[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v4 03/23] libxl: Make sure devices added by pci-attach are reflected in the config
> -----Original Message----- > From: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@xxxxxxxx> > Sent: 01 December 2020 13:12 > To: Paul Durrant <paul@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx > Cc: Paul Durrant <pdurrant@xxxxxxxxxx>; Ian Jackson <iwj@xxxxxxxxxxxxxx>; Wei > Liu <wl@xxxxxxx>; > Anthony PERARD <anthony.perard@xxxxxxxxxx> > Subject: Re: [PATCH v4 03/23] libxl: Make sure devices added by pci-attach > are reflected in the config > > Hi, Paul! > > On 11/24/20 10:01 AM, Paul Durrant wrote: > > From: Paul Durrant <pdurrant@xxxxxxxxxx> > > > > Currently libxl__device_pci_add_xenstore() is broken in that does not > > update the domain's configuration for the first device added (which causes > > creation of the overall backend area in xenstore). This can be easily > > observed > > by running 'xl list -l' after adding a single device: the device will be > > missing. > > > > This patch fixes the problem and adds a DEBUG log line to allow easy > > verification that the domain configuration is being modified. Also, the use > > of libxl__device_generic_add() is dropped as it leads to a confusing > > situation > > where only partial backend information is written under the xenstore > > '/libxl' path. For LIBXL__DEVICE_KIND_PCI devices the only definitive > > information in xenstore is under '/local/domain/0/backend' (the '0' being > > hard-coded). > > > > NOTE: This patch includes a whitespace in add_pcis_done(). > > > > Signed-off-by: Paul Durrant <pdurrant@xxxxxxxxxx> > > --- > > Cc: Ian Jackson <iwj@xxxxxxxxxxxxxx> > > Cc: Wei Liu <wl@xxxxxxx> > > Cc: Anthony PERARD <anthony.perard@xxxxxxxxxx> > > > > v2: > > - Avoid having two completely different ways of adding devices into > > xenstore > > > > v3: > > - Revert some changes form v2 as there is confusion over use of the libxl > > and backend xenstore paths which needs to be fixed > > --- > > tools/libs/light/libxl_pci.c | 87 > > +++++++++++++++++++++++--------------------- > > 1 file changed, 45 insertions(+), 42 deletions(-) > > > > diff --git a/tools/libs/light/libxl_pci.c b/tools/libs/light/libxl_pci.c > > index 9d44b28f0a..da01c77ba2 100644 > > --- a/tools/libs/light/libxl_pci.c > > +++ b/tools/libs/light/libxl_pci.c > > @@ -79,39 +79,55 @@ static void libxl__device_from_pci(libxl__gc *gc, > > uint32_t domid, > > device->kind = LIBXL__DEVICE_KIND_PCI; > > } > > > > -static int libxl__create_pci_backend(libxl__gc *gc, uint32_t domid, > > - const libxl_device_pci *pci, > > - int num) > > +static void libxl__create_pci_backend(libxl__gc *gc, xs_transaction_t t, > > + uint32_t domid, const > > libxl_device_pci *pci) > > { > > - flexarray_t *front = NULL; > > - flexarray_t *back = NULL; > > - libxl__device device; > > - int i; > > + libxl_ctx *ctx = libxl__gc_owner(gc); > > + flexarray_t *front, *back; > > + char *fe_path, *be_path; > > + struct xs_permissions fe_perms[2], be_perms[2]; > > + > > + LOGD(DEBUG, domid, "Creating pci backend"); > > > > front = flexarray_make(gc, 16, 1); > > back = flexarray_make(gc, 16, 1); > > > > - LOGD(DEBUG, domid, "Creating pci backend"); > > - > > - /* add pci device */ > > - libxl__device_from_pci(gc, domid, pci, &device); > > + fe_path = libxl__domain_device_frontend_path(gc, domid, 0, > > + LIBXL__DEVICE_KIND_PCI); > > + be_path = libxl__domain_device_backend_path(gc, 0, domid, 0, > > + LIBXL__DEVICE_KIND_PCI); > > > > + flexarray_append_pair(back, "frontend", fe_path); > > flexarray_append_pair(back, "frontend-id", GCSPRINTF("%d", domid)); > > - flexarray_append_pair(back, "online", "1"); > > + flexarray_append_pair(back, "online", GCSPRINTF("%d", 1)); > > flexarray_append_pair(back, "state", GCSPRINTF("%d", > > XenbusStateInitialising)); > > flexarray_append_pair(back, "domain", libxl__domid_to_name(gc, > > domid)); > > > > - for (i = 0; i < num; i++, pci++) > > - libxl_create_pci_backend_device(gc, back, i, pci); > > + be_perms[0].id = 0; > > There was a discussion [1] on PCI on ARM and one of the question was that it > is possible > > that we have the pci backend running in a late hardware domain/driver domain, > which may > > not be Domain-0. Do you think we can avoid using 0 here and get some clue of > the domain > > from "*backend=domain-id"? If not set it will return Domain-0's ID and won't > break anything* Not sure what you're asking for since... > > *Thank you,* > > *Oleksandr > * > > > + be_perms[0].perms = XS_PERM_NONE; > > + be_perms[1].id = domid; > > + be_perms[1].perms = XS_PERM_READ; > > + > > + xs_rm(ctx->xsh, t, be_path); > > + xs_mkdir(ctx->xsh, t, be_path); > > + xs_set_permissions(ctx->xsh, t, be_path, be_perms, > > + ARRAY_SIZE(be_perms)); > > + libxl__xs_writev(gc, t, be_path, libxl__xs_kvs_of_flexarray(gc, back)); > > > > - flexarray_append_pair(back, "num_devs", GCSPRINTF("%d", num)); > > + flexarray_append_pair(front, "backend", be_path); > > flexarray_append_pair(front, "backend-id", GCSPRINTF("%d", 0)); ... backend-id is written here. Paul
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |