From patchwork Tue Mar 29 06:52:36 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?SsO8cmdlbiBHcm/Dnw==?= X-Patchwork-Id: 8682901 Return-Path: X-Original-To: patchwork-xen-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 89D4BC0553 for ; Tue, 29 Mar 2016 06:55:05 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 972352026F for ; Tue, 29 Mar 2016 06:55:04 +0000 (UTC) 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.kernel.org (Postfix) with ESMTPS id 952C02020F for ; Tue, 29 Mar 2016 06:55:03 +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 1aknW7-0000mM-Dt; Tue, 29 Mar 2016 06:52:43 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aknW5-0000kj-Kh for xen-devel@lists.xen.org; Tue, 29 Mar 2016 06:52:41 +0000 Received: from [85.158.137.68] by server-16.bemta-3.messagelabs.com id 72/B6-02994-8362AF65; Tue, 29 Mar 2016 06:52:40 +0000 X-Env-Sender: jgross@suse.com X-Msg-Ref: server-16.tower-31.messagelabs.com!1459234360!24269312!1 X-Originating-IP: [195.135.220.15] X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG X-StarScan-Received: X-StarScan-Version: 8.11; banners=-,-,- X-VirusChecked: Checked Received: (qmail 62496 invoked from network); 29 Mar 2016 06:52:40 -0000 Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by server-16.tower-31.messagelabs.com with DHE-RSA-CAMELLIA256-SHA encrypted SMTP; 29 Mar 2016 06:52:40 -0000 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 809AFAC16; Tue, 29 Mar 2016 06:52:39 +0000 (UTC) From: Juergen Gross To: xen-devel@lists.xen.org Date: Tue, 29 Mar 2016 08:52:36 +0200 Message-Id: <1459234356-2333-5-git-send-email-jgross@suse.com> X-Mailer: git-send-email 2.6.2 In-Reply-To: <1459234356-2333-1-git-send-email-jgross@suse.com> References: <1459234356-2333-1-git-send-email-jgross@suse.com> Cc: Juergen Gross , wei.liu2@citrix.com, stefano.stabellini@eu.citrix.com, George.Dunlap@eu.citrix.com, ian.jackson@eu.citrix.com, cyliu@suse.com Subject: [Xen-devel] [PATCH v4 4/4] libxl: check for dynamic device model start required 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-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add a service routine checking whether a device model must be started after adding a device to a domain. Signed-off-by: Juergen Gross --- tools/libxl/libxl.c | 12 ++++++++++++ tools/libxl/libxl_dm.c | 22 ++++++++++++++++++++++ tools/libxl/libxl_internal.h | 4 ++++ tools/libxl/libxl_pci.c | 3 +++ tools/libxl/libxl_pvusb.c | 6 ++++++ 5 files changed, 47 insertions(+) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index bb6a689..6d4b5b4 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -2084,6 +2084,9 @@ void libxl__device_vtpm_add(libxl__egc *egc, uint32_t domid, if (rc) goto out; DEVICE_ADD(vtpm, vtpms, domid, &vtpm_saved, COMPARE_DEVID, &d_config); + + rc = libxl__dm_check_start(gc, &d_config, domid); + if (rc) goto out; } for (;;) { @@ -2388,6 +2391,9 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, if (rc) goto out; DEVICE_ADD(disk, disks, domid, &disk_saved, COMPARE_DISK, &d_config); + + rc = libxl__dm_check_start(gc, &d_config, domid); + if (rc) goto out; } for (;;) { @@ -2928,6 +2934,9 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk, DEVICE_ADD(disk, disks, domid, &disk_saved, COMPARE_DISK, &d_config); + rc = libxl__dm_check_start(gc, &d_config, domid); + if (rc) goto out; + if (dm_ver == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) { rc = libxl__qmp_insert_cdrom(gc, domid, disk); if (rc) goto out; @@ -3354,6 +3363,9 @@ void libxl__device_nic_add(libxl__egc *egc, uint32_t domid, if (rc) goto out; DEVICE_ADD(nic, nics, domid, &nic_saved, COMPARE_DEVID, &d_config); + + rc = libxl__dm_check_start(gc, &d_config, domid); + if (rc) goto out; } for (;;) { diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c index 13e8892..7aabe15 100644 --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -2169,6 +2169,28 @@ int libxl__dm_active(libxl__gc *gc, uint32_t domid) return pid != NULL; } +int libxl__dm_check_start(libxl__gc *gc, libxl_domain_config *d_config, + uint32_t domid) +{ + int rc; + + if (libxl__dm_active(gc, domid)) + return 0; + + rc = libxl__need_xenpv_qemu(gc, d_config); + if (rc < 0) + goto out; + + if (!rc) + return 0; + + LOG(ERROR, "device model required but not running"); + rc = ERROR_FAIL; + +out: + return rc; +} + /* * Local variables: * mode: C diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 2db8b1b..9708a46 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1618,6 +1618,10 @@ _hidden const char *libxl__domain_device_model(libxl__gc *gc, const libxl_domain_build_info *info); _hidden int libxl__need_xenpv_qemu(libxl__gc *gc, libxl_domain_config *d_config); +_hidden int libxl__dm_active(libxl__gc *gc, uint32_t domid); +_hidden int libxl__dm_check_start(libxl__gc *gc, + libxl_domain_config *d_config, + uint32_t domid); /* * This function will fix reserved device memory conflict diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c index dc10cb7..300fd4d 100644 --- a/tools/libxl/libxl_pci.c +++ b/tools/libxl/libxl_pci.c @@ -169,6 +169,9 @@ static int libxl__device_pci_add_xenstore(libxl__gc *gc, uint32_t domid, libxl_d DEVICE_ADD(pci, pcidevs, domid, &pcidev_saved, COMPARE_PCI, &d_config); + rc = libxl__dm_check_start(gc, &d_config, domid); + if (rc) goto out; + for (;;) { rc = libxl__xs_transaction_start(gc, &t); if (rc) goto out; diff --git a/tools/libxl/libxl_pvusb.c b/tools/libxl/libxl_pvusb.c index 069b2a9..4a4ddc3 100644 --- a/tools/libxl/libxl_pvusb.c +++ b/tools/libxl/libxl_pvusb.c @@ -144,6 +144,9 @@ static int libxl__device_usbctrl_add_xenstore(libxl__gc *gc, uint32_t domid, DEVICE_ADD(usbctrl, usbctrls, domid, &usbctrl_saved, COMPARE_USBCTRL, &d_config); + + rc = libxl__dm_check_start(gc, &d_config, domid); + if (rc) goto out; } for (;;) { @@ -960,6 +963,9 @@ static int libxl__device_usbdev_add_xenstore(libxl__gc *gc, uint32_t domid, DEVICE_ADD(usbdev, usbdevs, domid, &usbdev_saved, COMPARE_USB, &d_config); + + rc = libxl__dm_check_start(gc, &d_config, domid); + if (rc) goto out; } for (;;) {