Message ID | 1476755613-3921-4-git-send-email-marmarek@invisiblethingslab.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Oct 18, 2016 at 03:53:33AM +0200, Marek Marczykowski-Górecki wrote: > Stubdomain do not have it's own config file - its configuration is > derived from target domains. Do not try to manipulate it when attaching > PCI device. > > This bug prevented starting HVM with stubdomain and PCI passthrough > device attached. > > Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> > --- > tools/libxl/libxl_pci.c | 24 +++++++++++++++--------- > 1 file changed, 15 insertions(+), 9 deletions(-) > > diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c > index 3805d30..5ad70c5 100644 > --- a/tools/libxl/libxl_pci.c > +++ b/tools/libxl/libxl_pci.c > @@ -151,14 +151,18 @@ static int libxl__device_pci_add_xenstore(libxl__gc *gc, uint32_t domid, libxl_d > GCNEW(device); > libxl__device_from_pcidev(gc, domid, pcidev, device); > > - lock = libxl__lock_domain_userdata(gc, domid); > - if (!lock) { > - rc = ERROR_LOCK_FAIL; > - goto out; > - } > + /* Stubdomain config is derived from its target domain, it doesn't have > + its own file */ > + if (!libxl_is_stubdom(CTX, domid, NULL)) { > + lock = libxl__lock_domain_userdata(gc, domid); > + if (!lock) { > + rc = ERROR_LOCK_FAIL; > + goto out; > + } > What makes PCI devices special with regard to other devices? In other words, do we need to make similar changes to other devices as well? Wei.
On Wed, Oct 19, 2016 at 10:38:04AM +0100, Wei Liu wrote: > On Tue, Oct 18, 2016 at 03:53:33AM +0200, Marek Marczykowski-Górecki wrote: > > Stubdomain do not have it's own config file - its configuration is > > derived from target domains. Do not try to manipulate it when attaching > > PCI device. > > > > This bug prevented starting HVM with stubdomain and PCI passthrough > > device attached. > > > > Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> > > --- > > tools/libxl/libxl_pci.c | 24 +++++++++++++++--------- > > 1 file changed, 15 insertions(+), 9 deletions(-) > > > > diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c > > index 3805d30..5ad70c5 100644 > > --- a/tools/libxl/libxl_pci.c > > +++ b/tools/libxl/libxl_pci.c > > @@ -151,14 +151,18 @@ static int libxl__device_pci_add_xenstore(libxl__gc *gc, uint32_t domid, libxl_d > > GCNEW(device); > > libxl__device_from_pcidev(gc, domid, pcidev, device); > > > > - lock = libxl__lock_domain_userdata(gc, domid); > > - if (!lock) { > > - rc = ERROR_LOCK_FAIL; > > - goto out; > > - } > > + /* Stubdomain config is derived from its target domain, it doesn't have > > + its own file */ > > + if (!libxl_is_stubdom(CTX, domid, NULL)) { > > + lock = libxl__lock_domain_userdata(gc, domid); > > + if (!lock) { > > + rc = ERROR_LOCK_FAIL; > > + goto out; > > + } > > > > What makes PCI devices special with regard to other devices? In other > words, do we need to make similar changes to other devices as well? I think PCI is special because libxl doesn't bother to update stubdomain configuration for other device types at all... If I try dynamic attach of network device to a HVM (with stubdomain), it gets attached _only_ to the target domain. So HVM without any PV drivers is out of luck. Is it supposed to work with qemu in dom0?
diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c index 3805d30..5ad70c5 100644 --- a/tools/libxl/libxl_pci.c +++ b/tools/libxl/libxl_pci.c @@ -151,14 +151,18 @@ static int libxl__device_pci_add_xenstore(libxl__gc *gc, uint32_t domid, libxl_d GCNEW(device); libxl__device_from_pcidev(gc, domid, pcidev, device); - lock = libxl__lock_domain_userdata(gc, domid); - if (!lock) { - rc = ERROR_LOCK_FAIL; - goto out; - } + /* Stubdomain config is derived from its target domain, it doesn't have + its own file */ + if (!libxl_is_stubdom(CTX, domid, NULL)) { + lock = libxl__lock_domain_userdata(gc, domid); + if (!lock) { + rc = ERROR_LOCK_FAIL; + goto out; + } - rc = libxl__get_domain_configuration(gc, domid, &d_config); - if (rc) goto out; + rc = libxl__get_domain_configuration(gc, domid, &d_config); + if (rc) goto out; + } DEVICE_ADD(pci, pcidevs, domid, &pcidev_saved, COMPARE_PCI, &d_config); @@ -169,8 +173,10 @@ static int libxl__device_pci_add_xenstore(libxl__gc *gc, uint32_t domid, libxl_d rc = libxl__xs_transaction_start(gc, &t); if (rc) goto out; - rc = libxl__set_domain_configuration(gc, domid, &d_config); - if (rc) goto out; + if (lock) { + rc = libxl__set_domain_configuration(gc, domid, &d_config); + if (rc) goto out; + } libxl__xs_writev(gc, t, be_path, libxl__xs_kvs_of_flexarray(gc, back));
Stubdomain do not have it's own config file - its configuration is derived from target domains. Do not try to manipulate it when attaching PCI device. This bug prevented starting HVM with stubdomain and PCI passthrough device attached. Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> --- tools/libxl/libxl_pci.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-)