[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v7 1/2] xen/pci: introduce PF<->VF links


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
  • Date: Fri, 15 Nov 2024 06:53:10 -0500
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=suse.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=364/DgW48fE10Pe7XEFHWNwrLlFlYwITFQpfFQeOhXw=; b=RyVsZA8fgBPa6UITfSEYyyjD0FmbphM6mwylmefYka9oZpJKq8HHwI/lHj+tboFjhmmHMPvsosmS8GNnemO/I+2QrLmNf5OwyWvZdUlVPpMHwI7IWoAdu1DT05phps4peeV2dmIvN1L2yk8IV0l10H6jZMdusmHOb+rDs2xnCvAFL0ptLjPv+4q5ZLxPzD6suIVnnpx95MG3ntRmlS9upRA3QV7+oiagD4ZUJOWpUvi3LACfeYmSfKL+3SYhzd73rqCfmSlST+aG1M4Z18R5wFo5dcanHw+zKbt7eoh1QzXxAlV+6y1IN2nVF82zcJeXpWD44jD+YMrrhyDdydtTUg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tHN8r+RODQMRYIjyFthuionoG3YTVqTVy+MGwjZ03pJPIL629iI/OcNUu83wbUvGbuW24BL8ZDj/HqSVxgJnQTXi2YW5MwQ3LYS3AqPiPplLotiGXGLBSFqtDoUyQCHhKgTnMSzD8i8Vw5lguYVvulvI8L0jiMy+DvqOaVyijp/zPqypFxsTgbD4Jn3lT3GB96qNjtxsVErpHNMzDB80P25+SSTzRuHlnT08fM260cFzU+KLLwiTjjW+Mn7kQB6Tz/vpAjUdEgAPYRzdqG1Vll2gs77U5yWXUMlkpmlpC2A6By1+PAnOqGUhT3Ok4Ugu7zMSj2+FtZLB68dvguA1cw==
  • Cc: Roger Pau Monné <roger.pau@xxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, "Stefano Stabellini" <sstabellini@xxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Fri, 15 Nov 2024 12:02:26 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 11/15/24 02:55, Jan Beulich wrote:
> On 14.11.2024 19:50, Stewart Hildebrand wrote:
>> On 11/14/24 05:34, Jan Beulich wrote:
>>> On 12.11.2024 21:53, Stewart Hildebrand wrote:
>>>> +            pdev->pf_pdev = pf_pdev;
>>>> +            list_for_each_entry(vf_pdev, &pf_pdev->vf_list, vf_list)
>>>> +            {
>>>> +                if ( vf_pdev == pdev )
>>>> +                {
>>>> +                    already_added = true;
>>>> +                    break;
>>>> +                }
>>>> +            }
>>>> +            if ( !already_added )
>>>> +                list_add(&pdev->vf_list, &pf_pdev->vf_list);
>>>> +        }
>>>>      }
>>>
>>> Personally, as I have a dislike for excess variables, I'd have gotten away
>>> without "already_added". Instead of setting it to true, vf_pdev could be
>>> set to NULL. Others may, however, consider this "obfuscation" or alike.
>>
>> This relies on vf_pdev being set to non-NULL when the list is empty and
>> after the last iteration if the list doesn't contain the element. I had
>> to look up the definitions of list_for_each_entry, INIT_LIST_HEAD, and
>> list_{add,del,entry} to verify that vf_pdev would be non-NULL in those
>> cases.
>>
>> Perhaps a better approach would be to introduce list_add_unique() in
>> Xen's list library? Then we can also get rid of the vf_pdev variable.
>>
>> static inline bool list_contains(struct list_head *entry,
>>                                  struct list_head *head)
>> {
>>    struct list_head *ptr;
>>
>>    list_for_each(ptr, head)
>>    {
>>        if ( ptr == entry )
>>            return true;
>>    }
>>
>>    return false;
>> }
>>
>> static inline void list_add_unique(struct list_head *new,
>>                                    struct list_head *head)
>> {
>>     if ( !list_contains(new, head) )
>>         list_add(new, head);
>> }
> 
> I'm uncertain of this kind of an addition. For long lists one would need to
> be careful with whether to actually use list_contains(). It being a simple
> library function would make this easy to overlook.

It occurs to me I could simply check if pdev->pf_pdev has been initialized:

            if ( !pdev->pf_pdev )
                list_add(&pdev->vf_list, &pf_pdev->vf_list);
            pdev->pf_pdev = pf_pdev;



 


Rackspace

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