[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] libxl: fix pci device re-assigning after domain reboot
On Wed, Jun 26, 2019 at 03:37:26PM +0200, Juergen Gross wrote: > After a reboot of a guest only the first pci device configuration will > be retrieved from Xenstore resulting in loss of any further assigned > passed through pci devices. > > The main reason is that all passed through pci devices reside under a > common root device "0" in Xenstore. So when the device list is rebuilt > from Xenstore after a reboot the sub-devices below that root device > need to be selected instead of using the root device number as a > selector. > > Fix that by adding a new member to struct libxl_device_type which when > set is used to get the number of devices. Add such a member for pci to > get the correct number of pci devices instead of implying it from the > number of pci root devices (which will always be 1). > > While at it fix the type of libxl__device_pci_from_xs_be() to match > the one of the .from_xenstore member of struct libxl_device_type. This > fixes a latent bug checking the return value of a function returning > void. > > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> > Tested-by: Chao Gao <chao.gao@xxxxxxxxx> Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> Thanks! > --- > tools/libxl/libxl_device.c | 24 +++++++++++++++++++----- > tools/libxl/libxl_internal.h | 2 ++ > tools/libxl/libxl_pci.c | 35 ++++++++++++++++++++++++++--------- > 3 files changed, 47 insertions(+), 14 deletions(-) > > diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c > index db6c0203b7..a2569102ee 100644 > --- a/tools/libxl/libxl_device.c > +++ b/tools/libxl/libxl_device.c > @@ -2026,6 +2026,7 @@ void *libxl__device_list(libxl__gc *gc, const struct > libxl_device_type *dt, > char *libxl_path; > char **dir = NULL; > unsigned int ndirs = 0; > + unsigned int ndevs = 0; I think you could reduce the scope of ndevs... > int rc; > > *num = 0; > @@ -2037,21 +2038,34 @@ void *libxl__device_list(libxl__gc *gc, const struct > libxl_device_type *dt, > dir = libxl__xs_directory(gc, XBT_NULL, libxl_path, &ndirs); > > if (dir && ndirs) { ... by declaring it here. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |