[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


  • To: "paul@xxxxxxx" <paul@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@xxxxxxxx>
  • Date: Thu, 3 Dec 2020 13:20:18 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VUwRy5/vE/PKCVxGZpC6aHaCa0X0v8XsvbChM7sHiM8=; b=H9UVYebyWCx8PnvvBLC6ywTathOzwXg0ke8kuFauSrZiCnJg2rpt21/a+ldKIX0X/rtd+7w2Dc8ax2XsPKmxc/AToLD3eReQBpn37pfmnpS9UrG169vis4kLcPkziZjvCAMJBUdxIpxCoinaUwWbTmLbFecBVzpYv9PV55uiwJXbi8MVEeVXxlkTC7i8vWAMdKmngNCMvVx1Z8vmHNL0GiO7ijlholbBRYzGR3E1PxBxb80q+BgR7ArpnYJW9mNnotfQ++hpHmA0gUSMnb9iEMUMxb7vlziCMPJnefQQXrxXzPDkctfT0AItxr5Bv8tUJXQwhDVB14AxaNXrHEcMiA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kZ3k8hysJyNOsM7A4KoDaf0sEzuERIfpE03WxYl9PwL/0uo07gvSxslH9XhEHaAEmIS54Ye4u73Jdd26JiwRuso4iW061p87ylqyUtlQQZXqwjUCblMEDyoluwCDHD50oL3jCyHJBAhn8ppyzMq6r/4aMpYsj4p3ucfYZzCrT4ABdRZhWJpGZDAwwP+joFjl1prgSU8k64WI8Jj28Jj7/PkzpZBlJzXuN6uIfNuuM2CXysGRap91TVbpxhUgd09ZsiGUJELgyjPcJ2UAea+z8rc+z8VpWxwsM0LBkLeZEx43N5X9ByAdnT7eORQIuXaFQh8cQJYlIjw48zKs+w2/mw==
  • Authentication-results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=epam.com;
  • Cc: 'Paul Durrant' <pdurrant@xxxxxxxxxx>, 'Ian Jackson' <iwj@xxxxxxxxxxxxxx>, 'Wei Liu' <wl@xxxxxxx>, 'Anthony PERARD' <anthony.perard@xxxxxxxxxx>
  • Delivery-date: Thu, 03 Dec 2020 13:20:28 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHWx+OabtYotvRU7E6Ior0bjSGKzKnlXZAAgAAAvYA=
  • Thread-topic: [PATCH v4 03/23] libxl: Make sure devices added by pci-attach are reflected in the config

On 12/3/20 3:17 PM, Paul Durrant wrote:
>> -----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...

My bad, please ignore

Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>

Thank you,

Oleksandr

>
>> *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
>
>

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.