xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Paul Durrant <xadimgnik@gmail.com>
To: "'Oleksandr Andrushchenko'" <Oleksandr_Andrushchenko@epam.com>,
	<xen-devel@lists.xenproject.org>
Cc: "'Paul Durrant'" <pdurrant@amazon.com>,
	"'Ian Jackson'" <iwj@xenproject.org>, "'Wei Liu'" <wl@xen.org>,
	"'Anthony PERARD'" <anthony.perard@citrix.com>
Subject: RE: [PATCH v4 03/23] libxl: Make sure devices added by pci-attach are reflected in the config
Date: Thu, 3 Dec 2020 13:17:38 -0000	[thread overview]
Message-ID: <00a701d6c976$ac403020$04c09060$@xen.org> (raw)
In-Reply-To: <d16e33d7-a4af-8686-c639-b4f591caf77c@epam.com>

> -----Original Message-----
> From: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@epam.com>
> Sent: 01 December 2020 13:12
> To: Paul Durrant <paul@xen.org>; xen-devel@lists.xenproject.org
> Cc: Paul Durrant <pdurrant@amazon.com>; Ian Jackson <iwj@xenproject.org>; Wei Liu <wl@xen.org>;
> Anthony PERARD <anthony.perard@citrix.com>
> 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@amazon.com>
> >
> > 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@amazon.com>
> > ---
> > Cc: Ian Jackson <iwj@xenproject.org>
> > Cc: Wei Liu <wl@xen.org>
> > Cc: Anthony PERARD <anthony.perard@citrix.com>
> >
> > 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




  reply	other threads:[~2020-12-03 13:17 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-24  8:01 [PATCH v4 00/23] xl / libxl: named PCI pass-through devices Paul Durrant
2020-11-24  8:01 ` [PATCH v4 01/23] xl / libxl: s/pcidev/pci and remove DEFINE_DEVICE_TYPE_STRUCT_X Paul Durrant
2020-12-01 12:32   ` Oleksandr Andrushchenko
2020-12-03 13:00     ` Paul Durrant
2020-11-24  8:01 ` [PATCH v4 02/23] libxl: make libxl__device_list() work correctly for LIBXL__DEVICE_KIND_PCI Paul Durrant
2020-12-01 12:50   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 03/23] libxl: Make sure devices added by pci-attach are reflected in the config Paul Durrant
2020-12-01 13:12   ` Oleksandr Andrushchenko
2020-12-03 13:17     ` Paul Durrant [this message]
2020-12-03 13:20       ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 04/23] libxl: add/recover 'rdm_policy' to/from PCI backend in xenstore Paul Durrant
2020-12-01 13:13   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 05/23] libxl: s/detatched/detached in libxl_pci.c Paul Durrant
2020-12-01 13:15   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 06/23] libxl: remove extraneous arguments to do_pci_remove() " Paul Durrant
2020-12-01 13:41   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 07/23] libxl: stop using aodev->device_config in libxl__device_pci_add() Paul Durrant
2020-12-01 13:42   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 08/23] libxl: generalise 'driver_path' xenstore access functions in libxl_pci.c Paul Durrant
2020-12-01 13:48   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 09/23] libxl: remove unnecessary check from libxl__device_pci_add() Paul Durrant
2020-12-01 13:51   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 10/23] libxl: remove get_all_assigned_devices() from libxl_pci.c Paul Durrant
2020-12-01 14:18   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 11/23] libxl: make sure callers of libxl_device_pci_list() free the list after use Paul Durrant
2020-12-01 15:10   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 12/23] libxl: add libxl_device_pci_assignable_list_free() Paul Durrant
2020-12-01 15:17   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 13/23] libxl: use COMPARE_PCI() macro is_pci_in_array() Paul Durrant
2020-12-01 15:20   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 14/23] docs/man: extract documentation of PCI_SPEC_STRING from the xl.cfg manpage Paul Durrant
2020-12-01 15:25   ` Oleksandr Andrushchenko
2020-11-24  8:01 ` [PATCH v4 15/23] docs/man: improve documentation of PCI_SPEC_STRING Paul Durrant
2020-11-24  8:01 ` [PATCH v4 16/23] docs/man: fix xl(1) documentation for 'pci' operations Paul Durrant
2020-11-24  8:01 ` [PATCH v4 17/23] libxl: introduce 'libxl_pci_bdf' in the idl Paul Durrant
2020-11-24  8:01 ` [PATCH v4 18/23] libxlu: introduce xlu_pci_parse_spec_string() Paul Durrant
2020-11-24  8:01 ` [PATCH v4 19/23] libxl: modify libxl_device_pci_assignable_add/remove/list/list_free() Paul Durrant
2020-11-24  8:01 ` [PATCH v4 20/23] docs/man: modify xl(1) in preparation for naming of assignable devices Paul Durrant
2020-11-24  8:01 ` [PATCH v4 21/23] xl / libxl: support " Paul Durrant
2020-11-24  8:01 ` [PATCH v4 22/23] docs/man: modify xl-pci-configuration(5) to add 'name' field to PCI_SPEC_STRING Paul Durrant
2020-11-24  8:01 ` [PATCH v4 23/23] xl / libxl: support 'xl pci-attach/detach' by name Paul Durrant

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='00a701d6c976$ac403020$04c09060$@xen.org' \
    --to=xadimgnik@gmail.com \
    --cc=Oleksandr_Andrushchenko@epam.com \
    --cc=anthony.perard@citrix.com \
    --cc=iwj@xenproject.org \
    --cc=paul@xen.org \
    --cc=pdurrant@amazon.com \
    --cc=wl@xen.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).