On 2/16/21 7:35 PM, Xueming(Steven) Li wrote:
> 
>> -----Original Message-----
>> From: Andrew Rybchenko <andrew.rybche...@oktetlabs.ru>
>> Sent: Monday, February 15, 2021 5:32 PM
>> To: Xueming(Steven) Li <xuemi...@nvidia.com>
>> Cc: dev@dpdk.org; Slava Ovsiienko <viachesl...@nvidia.com>; Asaf Penso 
>> <as...@nvidia.com>; NBU-Contact-Thomas Monjalon
>> <tho...@monjalon.net>; Ferruh Yigit <ferruh.yi...@intel.com>; Ray Kinsella 
>> <m...@ashroe.eu>; Neil Horman
>> <nhor...@tuxdriver.com>
>> Subject: Re: [PATCH v6 8/9] ethdev: representor iterator compare complete 
>> info
>>
>> On 2/14/21 6:21 AM, Xueming Li wrote:
>>> The NIC can have multiple PCIe links and can be attached to multiple
>>> hosts, for example the same single NIC can be shared for multiple
>>> server units in the rack. On each PCIe link NIC can provide multiple
>>> PFs and VFs/SFs based on these ones. The full representor identifier
>>> consists of three indices - controller index, PF index, and VF or SF index 
>>> (if any).
>>>
>>> SR-IOV and SubFunction are created on top of PF. PF index is
>>> introduced because there might be multiple PFs in the bonding
>>> configuration and only bonding device is probed.
>>>
>>> In eth representor comparator callback, ethdev representor ID was
>>> compared with devarg. Since controller index and PF index not
>>> compared, callback returned representor from other PF or controller.
>>>
>>> This patch adds new API to convert representor controller, pf and
>>> vf/sf index to representor ID. Representor comparer callback convert
>>> representor info into ID and compare with device representor ID.
>>>
>>> Signed-off-by: Xueming Li <xuemi...@nvidia.com>

[snip]

>>> +   }
>>> +   n = ret;
>>> +   size = sizeof(*info) + n * sizeof(info->ranges[0]);
>>> +   info = calloc(1, size);
>>> +   if (info == NULL)
>>> +           return -ENOMEM;
>>> +   ret = rte_eth_representor_info_get(ethdev->data->port_id, info);
>>> +   if (ret < 0)
>>> +           goto out;
>>> +
>>> +   /* Default controller and pf to caller. */
>>> +   if (controller == -1)
>>> +           controller = info->controller;
>>> +   if (pf == -1)
>>> +           pf = info->pf;
>>> +
>>> +   /* Locate representor ID. */
>>> +   for (i = 0; i < n; ++i) {
>>> +           if (info->ranges[i].type != type)
>>> +                   continue;
>>> +           /* PMD hit: ignore controller if -1. */
>>> +           if (info->ranges[i].controller != -1 &&
>>> +               info->ranges[i].controller != (uint16_t)controller)
>>> +                   continue;
>>
>> I think it is incorrect to ignore controller in range if controller is 
>> specified in request. It must match.
> 
> This is a real requirement I'm facing from orchestration, before 
> orchestration having knowledge on port
> status, it always send "pf#vf#" to OVS->DPDK, although "pf#" is meaningless 
> in standard mode. It will take
> time for orchestration and OVS to evolve... PMD uses this option to decide 
> ignore them or not.

I'll take a look at it on the next version, but it still sounds
wrong when something is specified, but ignored. May be I simply
misunderstand.

Thanks for working on the patch series.

Reply via email to