From patchwork Fri Mar 17 11:27:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "lan,Tianyu" X-Patchwork-Id: 9630459 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 8460860249 for ; Fri, 17 Mar 2017 11:37:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6E88A284E9 for ; Fri, 17 Mar 2017 11:37:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 634D52864B; Fri, 17 Mar 2017 11:37:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 10F79284E9 for ; Fri, 17 Mar 2017 11:37:50 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1coqAH-0003rD-HC; Fri, 17 Mar 2017 11:35:25 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1coqAH-0003p5-2f for xen-devel@lists.xen.org; Fri, 17 Mar 2017 11:35:25 +0000 Received: from [85.158.143.35] by server-9.bemta-6.messagelabs.com id 84/B4-14382-CF9CBC85; Fri, 17 Mar 2017 11:35:24 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrFLMWRWlGSWpSXmKPExsVywNwkVvf3ydM RBpcPWVgs+biYxYHR4+ju30wBjFGsmXlJ+RUJrBlTHqoUXBOvONm/nq2B8ahgFyMXB4vALSaJ 1ivnmUAcIYFpjBK9BzYBOZwcEgK8EkeWzWCFsP0lFj58zQZR1M8o8fB3BxtIgk1AXeLE4omMI LaIgLTEtc+XGUGKmAWaGSWmvVzMApIQFkiUuD79AVgDi4CqxLuVd8E28Aq4Shw/8wqogQNog4 LEnEk2IGFOoPDdtgfsILaQgIvEva4rLBMY+RYwMqxiVC9OLSpLLdI11ksqykzPKMlNzMzRNTQ w08tNLS5OTE/NSUwq1kvOz93ECAwTBiDYwdjxz+kQoyQHk5Iob/mPExFCfEn5KZUZicUZ8UWl OanFhxhlODiUJHifKpyMEBIsSk1PrUjLzAEGLExagoNHSYT3CEiat7ggMbc4Mx0idYpRUUqc9 yRIQgAkkVGaB9cGi5JLjLJSwryMQIcI8RSkFuVmlqDKv2IU52BUEua9CjKFJzOvBG76K6DFTE CL3344AbK4JBEhJdXAGMhXyJXdc1d5Ql/5qpDWTJGo/neB4eJd0q/4rYv5IjYFr9jxYM3vwJg Nr54kXP+gUtO7dfma4qA0YQ1BBsd/HQFzDrVYW170vfvsTszDT9v4nx8POLOi9IhC2kLB7YZ9 zM8u748KSmeJL5byTPqizn3mkVZhZo9GgElYa+VTuZ93DTuVNnkqsRRnJBpqMRcVJwIA72MUW o0CAAA= X-Env-Sender: tianyu.lan@intel.com X-Msg-Ref: server-12.tower-21.messagelabs.com!1489750519!61079102!2 X-Originating-IP: [192.55.52.93] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTkyLjU1LjUyLjkzID0+IDMyNDY2NQ==\n X-StarScan-Received: X-StarScan-Version: 9.2.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 24466 invoked from network); 17 Mar 2017 11:35:23 -0000 Received: from mga11.intel.com (HELO mga11.intel.com) (192.55.52.93) by server-12.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 17 Mar 2017 11:35:23 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1489750523; x=1521286523; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=PrbQpfsQPRzoGCRY8eSztwkDedpInIfEd+nTmOzvqjY=; b=BEMMdcul4ZA/xkFAgyRZwAvwgph1SOHMPQQXaohXYSImn9vKq2nR9N8p VBlGJCtafQPf581mP2OfZW1wvTG6/Q==; Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Mar 2017 04:35:23 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,176,1486454400"; d="scan'208";a="945414205" Received: from lantianyu-ws.sh.intel.com (HELO localhost) ([10.239.159.159]) by orsmga003.jf.intel.com with ESMTP; 17 Mar 2017 04:35:19 -0700 From: Lan Tianyu To: xen-devel@lists.xen.org Date: Fri, 17 Mar 2017 19:27:09 +0800 Message-Id: <1489750043-17260-10-git-send-email-tianyu.lan@intel.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1489750043-17260-1-git-send-email-tianyu.lan@intel.com> References: <1489750043-17260-1-git-send-email-tianyu.lan@intel.com> Cc: Lan Tianyu , wei.liu2@citrix.com, kevin.tian@intel.com, ian.jackson@eu.citrix.com, chao.gao@intel.com Subject: [Xen-devel] [RFC PATCH 9/23] Tools/libxl: Inform device model to create a guest with a vIOMMU device X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Chao Gao A new device, xen_viommu, is added to qemu. In xen side, we can inform device model to create a guest with a vIOMMU device through "-device xen_viommu" when a viommu has been configurated in guest configuration file. Some specific parameters are passed through xenstore. Qemu will create a dummy device to preserve the address range and the dummy device will launch a viommu creation and destruction throuth libxc interface. Signed-off-by: Chao Gao Signed-off-by: Lan Tianyu --- tools/libxl/libxl_create.c | 12 +++++++++++- tools/libxl/libxl_dm.c | 9 +++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index e741b9a..7954186 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -453,7 +453,7 @@ int libxl__domain_build(libxl__gc *gc, vments[4] = "start_time"; vments[5] = GCSPRINTF("%lu.%02d", start_time.tv_sec,(int)start_time.tv_usec/10000); - localents = libxl__calloc(gc, 9, sizeof(char *)); + localents = libxl__calloc(gc, 11, sizeof(char *)); i = 0; localents[i++] = "platform/acpi"; localents[i++] = libxl__acpi_defbool_val(info) ? "1" : "0"; @@ -472,6 +472,11 @@ int libxl__domain_build(libxl__gc *gc, info->u.hvm.mmio_hole_memkb << 10); } } + if (info->u.hvm.viommu.base_addr) { + localents[i++] = "viommu/base_addr"; + localents[i++] = + GCSPRINTF("%"PRIu64, info->u.hvm.viommu.base_addr); + } break; case LIBXL_DOMAIN_TYPE_PV: @@ -680,6 +685,11 @@ retry_transaction: GCSPRINTF("%s/attr", dom_path), rwperm, ARRAY_SIZE(rwperm)); + if (info->type == LIBXL_DOMAIN_TYPE_HVM) + libxl__xs_mknod(gc, t, + GCSPRINTF("%s/viommu", dom_path), + noperm, ARRAY_SIZE(noperm)); + if (libxl_defbool_val(info->driver_domain)) { /* * Create a local "libxl" directory for each guest, since we might want diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c index 281058d..f7fb81e 100644 --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -1252,6 +1252,15 @@ static int libxl__build_device_model_args_new(libxl__gc *gc, flexarray_append(dm_args, "-net"); flexarray_append(dm_args, "none"); } + + if ( !libxl_defbool_is_default(b_info->u.hvm.viommu.intremap) + && libxl_defbool_val(b_info->u.hvm.viommu.intremap) ) + { + flexarray_append(dm_args, "-device"); + flexarray_append(dm_args, + GCSPRINTF("xen_viommu,cap=%ld", + b_info->u.hvm.viommu.cap)); + } } else { if (!sdl && !vnc) { flexarray_append(dm_args, "-nographic");