From: Marek Marczykowski Date: Tue, 21 Jun 2011 16:50:47 +0000 (+0100) Subject: libxl: add all pci devices to xenstore at once (during VM create) X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~10131^2~11 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b6c23c86fe5a1a027d9e173d9cba7e89c8eb2d67;p=xen.git libxl: add all pci devices to xenstore at once (during VM create) When adding pci devices one by one, pciback notice only the first one. For every next, "state" is left as is (usualy "4" in that time), so backend will not rescan xenstore. So when VM is starting all devices should be added at once and then backend can initialize it. This applies only to pci, because only pci backend have one xenstore dir for multiple devices. Signed-off-by: Marek Marczykowski Signed-off-by: Ian Jackson Committed-by: Ian Jackson --- diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 91e2414f7e..1b7fd61034 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -525,6 +525,14 @@ static int do_domain_create(libxl__gc *gc, libxl_domain_config *d_config, for (i = 0; i < d_config->num_pcidevs; i++) libxl__device_pci_add(gc, domid, &d_config->pcidevs[i], 1); + ret = libxl__create_pci_backend(gc, domid, d_config->pcidevs, + d_config->num_pcidevs); + if (ret < 0) { + LIBXL__LOG(ctx, LIBXL__LOG_ERROR, + "libxl_create_pci_backend failed: %d", ret); + goto error_out; + } + if (!d_config->c_info.hvm && d_config->b_info.u.pv.e820_host) { int rc; rc = libxl__e820_alloc(ctx, domid, d_config); diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 3d3bf52f0c..49665b891a 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -226,6 +226,8 @@ _hidden int libxl__wait_for_backend(libxl__gc *gc, char *be_path, char *state); /* from libxl_pci */ _hidden int libxl__device_pci_add(libxl__gc *gc, uint32_t domid, libxl_device_pci *pcidev, int starting); +_hidden int libxl__create_pci_backend(libxl__gc *gc, uint32_t domid, + libxl_device_pci *pcidev, int num); /* xl_exec */ diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c index 307ca2376b..8d2c4d19a3 100644 --- a/tools/libxl/libxl_pci.c +++ b/tools/libxl/libxl_pci.c @@ -221,7 +221,8 @@ static void libxl_create_pci_backend_device(libxl__gc *gc, flexarray_t *back, in flexarray_append_pair(back, libxl__sprintf(gc, "state-%d", num), libxl__sprintf(gc, "%d", 1)); } -static int libxl__create_pci_backend(libxl__gc *gc, uint32_t domid, libxl_device_pci *pcidev, int num) +int libxl__create_pci_backend(libxl__gc *gc, uint32_t domid, + libxl_device_pci *pcidev, int num) { libxl_ctx *ctx = libxl__gc_owner(gc); flexarray_t *front = NULL; @@ -707,7 +708,10 @@ out: } } - rc = libxl__device_pci_add_xenstore(gc, domid, pcidev, starting); + if (!starting) + rc = libxl__device_pci_add_xenstore(gc, domid, pcidev, starting); + else + rc = 0; return rc; }