Re: [Xen-devel] [PATCH v3 4/5] libxl: check for dynamic device model start required

2016-03-25 Thread Chun Yan Liu


>>> On 3/25/2016 at 02:25 PM, in message <56f4d9d6.8030...@suse.com>, Juergen 
>>> Gross
 wrote: 
> On 25/03/16 03:06, Chun Yan Liu wrote: 
> >  
> >  
>  On 3/23/2016 at 08:24 PM, in message 
> > <1458735847-9448-5-git-send-email-jgr...@suse.com>, Juergen Gross 
> >  wrote:  
> >> 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   | 14 ++  
> >>  tools/libxl/libxl_internal.h |  4   
> >>  tools/libxl/libxl_pci.c  |  3 +++  
> >>  tools/libxl/libxl_pvusb.c|  6 ++  
> >>  5 files changed, 39 insertions(+)  
> >>   
> >> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c  
> >> index dcd0951..2b4e36f 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, _saved, COMPARE_DEVID,   
> >> _config);  
> >> +  
> >> +rc = libxl__dm_check_start(gc, _config, domid);  
> >> +if (rc) goto out;  
> >>  } 
> >  
> > Why is this check put inside the if (aodev->update_json) {  }? I think it's 
> >  
> a common 
> > check, so should move outside. 
>  
> It is the only case where the check makes sense: update_json isn't set 
> when we are just creating the domain, in which case the test for the 
> device model needed is already in place.

See. That's OK then.

Thanks,
Chunyan
 
> When the device is added to an 
> already running domain update_json will always be true. 
>  
>  
> Juergen 
>  



___
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel


Re: [Xen-devel] [PATCH v3 4/5] libxl: check for dynamic device model start required

2016-03-25 Thread Juergen Gross
On 25/03/16 03:06, Chun Yan Liu wrote:
> 
> 
 On 3/23/2016 at 08:24 PM, in message
> <1458735847-9448-5-git-send-email-jgr...@suse.com>, Juergen Gross
>  wrote: 
>> 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   | 14 ++ 
>>  tools/libxl/libxl_internal.h |  4  
>>  tools/libxl/libxl_pci.c  |  3 +++ 
>>  tools/libxl/libxl_pvusb.c|  6 ++ 
>>  5 files changed, 39 insertions(+) 
>>  
>> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c 
>> index dcd0951..2b4e36f 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, _saved, COMPARE_DEVID,  
>> _config); 
>> + 
>> +rc = libxl__dm_check_start(gc, _config, domid); 
>> +if (rc) goto out; 
>>  }
> 
> Why is this check put inside the if (aodev->update_json) {  }? I think it's a 
> common
> check, so should move outside.

It is the only case where the check makes sense: update_json isn't set
when we are just creating the domain, in which case the test for the
device model needed is already in place. When the device is added to an
already running domain update_json will always be true.


Juergen

___
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel


Re: [Xen-devel] [PATCH v3 4/5] libxl: check for dynamic device model start required

2016-03-24 Thread Chun Yan Liu


>>> On 3/23/2016 at 08:24 PM, in message
<1458735847-9448-5-git-send-email-jgr...@suse.com>, Juergen Gross
 wrote: 
> 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   | 14 ++ 
>  tools/libxl/libxl_internal.h |  4  
>  tools/libxl/libxl_pci.c  |  3 +++ 
>  tools/libxl/libxl_pvusb.c|  6 ++ 
>  5 files changed, 39 insertions(+) 
>  
> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c 
> index dcd0951..2b4e36f 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, _saved, COMPARE_DEVID,  
> _config); 
> + 
> +rc = libxl__dm_check_start(gc, _config, domid); 
> +if (rc) goto out; 
>  }

Why is this check put inside the if (aodev->update_json) {  }? I think it's a 
common
check, so should move outside.

- Chunyan 
 
>   
>  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, _saved, COMPARE_DISK, 
> _config); 
> + 
> +rc = libxl__dm_check_start(gc, _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, _saved, COMPARE_DISK, _config); 
>   
> +rc = libxl__dm_check_start(gc, _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, _saved, COMPARE_DEVID, _config); 
> + 
> +rc = libxl__dm_check_start(gc, _config, domid); 
> +if (rc) goto out; 
>  } 
>   
>  for (;;) { 
> diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c 
> index bffb8f8..78c46674 100644 
> --- a/tools/libxl/libxl_dm.c 
> +++ b/tools/libxl/libxl_dm.c 
> @@ -2160,6 +2160,20 @@ 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) 
> +{ 
> +if (libxl__dm_active(gc, domid)) 
> +return 0; 
> + 
> +if (!libxl__need_xenpv_qemu(gc, d_config)) 
> +return 0; 
> + 
> +LOG(ERROR, "device model required but not running"); 
> + 
> +return ERROR_FAIL; 
> +} 
> + 
>  /* 
>   * 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, _saved, COMPARE_PCI, _config); 
>   
> +rc = libxl__dm_check_start(gc, _config, domid); 
> +if (rc) goto out; 
> + 
>  for (;;) { 
>  rc = libxl__xs_transaction_start(gc, ); 
>  if (rc) goto out; 
> diff --git a/tools/libxl/libxl_pvusb.c b/tools/libxl/libxl_pvusb.c 
> index 7200ead..976e4c7 100644 
> --- a/tools/libxl/libxl_pvusb.c 
> +++ b/tools/libxl/libxl_pvusb.c 
> @@ -139,6 +139,9 @@ static int libxl__device_usbctrl_add_xenstore(libxl__gc  
> *gc, uint32_t domid, 
>   
>  DEVICE_ADD(usbctrl, usbctrls, domid, _saved, 
> COMPARE_USBCTRL, _config); 
> + 
> +rc = libxl__dm_check_start(gc, _config, domid); 
> +if (rc) goto out; 
>  } 
>   
>  for (;;) { 
> @@ -955,6 +958,9 @@ static int libxl__device_usbdev_add_xenstore(libxl__gc  
> *gc, uint32_t domid, 
>   
>  DEVICE_ADD(usbdev, usbdevs, 

[Xen-devel] [PATCH v3 4/5] libxl: check for dynamic device model start required

2016-03-23 Thread Juergen Gross
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   | 14 ++
 tools/libxl/libxl_internal.h |  4 
 tools/libxl/libxl_pci.c  |  3 +++
 tools/libxl/libxl_pvusb.c|  6 ++
 5 files changed, 39 insertions(+)

diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index dcd0951..2b4e36f 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, _saved, COMPARE_DEVID, _config);
+
+rc = libxl__dm_check_start(gc, _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, _saved, COMPARE_DISK, _config);
+
+rc = libxl__dm_check_start(gc, _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, _saved, COMPARE_DISK, _config);
 
+rc = libxl__dm_check_start(gc, _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, _saved, COMPARE_DEVID, _config);
+
+rc = libxl__dm_check_start(gc, _config, domid);
+if (rc) goto out;
 }
 
 for (;;) {
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index bffb8f8..78c46674 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -2160,6 +2160,20 @@ 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)
+{
+if (libxl__dm_active(gc, domid))
+return 0;
+
+if (!libxl__need_xenpv_qemu(gc, d_config))
+return 0;
+
+LOG(ERROR, "device model required but not running");
+
+return ERROR_FAIL;
+}
+
 /*
  * 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, _saved, COMPARE_PCI, _config);
 
+rc = libxl__dm_check_start(gc, _config, domid);
+if (rc) goto out;
+
 for (;;) {
 rc = libxl__xs_transaction_start(gc, );
 if (rc) goto out;
diff --git a/tools/libxl/libxl_pvusb.c b/tools/libxl/libxl_pvusb.c
index 7200ead..976e4c7 100644
--- a/tools/libxl/libxl_pvusb.c
+++ b/tools/libxl/libxl_pvusb.c
@@ -139,6 +139,9 @@ static int libxl__device_usbctrl_add_xenstore(libxl__gc 
*gc, uint32_t domid,
 
 DEVICE_ADD(usbctrl, usbctrls, domid, _saved,
COMPARE_USBCTRL, _config);
+
+rc = libxl__dm_check_start(gc, _config, domid);
+if (rc) goto out;
 }
 
 for (;;) {
@@ -955,6 +958,9 @@ static int libxl__device_usbdev_add_xenstore(libxl__gc *gc, 
uint32_t domid,
 
 DEVICE_ADD(usbdev, usbdevs, domid, _saved,
COMPARE_USB, _config);
+
+rc = libxl__dm_check_start(gc, _config, domid);
+if (rc) goto out;
 }
 
 for (;;) {
-- 
2.6.2


___
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel