DPDK patches and discussions
 help / color / mirror / Atom feed
From: "lihuisong (C)" <lihuisong@huawei.com>
To: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
	"Min Hu (Connor)" <humin29@huawei.com>, <dev@dpdk.org>
Cc: Thomas Monjalon <thomas@monjalon.net>,
	Ferruh Yigit <ferruh.yigit@xilinx.com>,
	Shepard Siegel <shepard.siegel@atomicrules.com>,
	Ed Czeck <ed.czeck@atomicrules.com>,
	John Miller <john.miller@atomicrules.com>,
	Rasesh Mody <rmody@marvell.com>,
	Shahed Shaikh <shshaikh@marvell.com>,
	Ajit Khaparde <ajit.khaparde@broadcom.com>,
	"Somnath Kotur" <somnath.kotur@broadcom.com>,
	Simei Su <simei.su@intel.com>, Wenjun Wu <wenjun1.wu@intel.com>,
	Qi Zhang <qi.z.zhang@intel.com>,
	Xiao Wang <xiao.w.wang@intel.com>,
	Yuying Zhang <Yuying.Zhang@intel.com>,
	Beilei Xing <beilei.xing@intel.com>,
	Qiming Yang <qiming.yang@intel.com>,
	Jiawen Wu <jiawenwu@trustnetic.com>,
	Jian Wang <jianwang@trustnetic.com>
Subject: Re: [PATCH v4 1/2] ethdev: fix one address occupies two indexes in MAC addrs
Date: Sat, 11 Jun 2022 17:04:43 +0800	[thread overview]
Message-ID: <79be0c50-6c27-353a-bd3d-091ae625648b@huawei.com> (raw)
In-Reply-To: <816b0738-f986-b448-79c6-4d4be23be87f@oktetlabs.ru>


在 2022/6/2 21:54, Andrew Rybchenko 写道:
> Cc more driver maintainers
>
> On 6/2/22 06:16, lihuisong (C) wrote:
>>
>> 在 2022/6/2 1:49, Andrew Rybchenko 写道:
>>> On 6/1/22 09:39, Min Hu (Connor) wrote:
>>>> From: Huisong Li <lihuisong@huawei.com>
>>>>
>>>> The dev->data->mac_addrs[0] will be changed to a new MAC address when
>>>> applications modify the default MAC address by
>>>> rte_eth_dev_default_mac_addr_set(). However, if the new default one 
>>>> has
>>>> been added as a non-default MAC address by 
>>>> rte_eth_dev_mac_addr_add(), the
>>>> the rte_eth_dev_default_mac_addr_set() doesn't remove it from the 
>>>> mac_addrs
>>>> list. As a result, one MAC address occupies two indexes in the 
>>>> list. Like:
>>>> add(MAC1)
>>>> add(MAC2)
>>>> add(MAC3)
>>>> add(MAC4)
>>>> set_default(MAC3)
>>>> default=MAC3, filters=MAC1, MAC2, MAC3, MAC4
>>>>
>>>> In addition, some PMDs, such as i40e, ice, hns3 and so on, do 
>>>> remove the
>>>> old default MAC when set default MAC. If user continues to do
>>>> set_default(MAC5), and the mac_addrs list is default=MAC5, 
>>>> filters=(MAC1,
>>>> MAC2, MAC3, MAC4). At this moment, user can still view MAC3 from 
>>>> the list,
>>>> but packets with MAC3 aren't actually received by the PMD.
>>>
>>> IMHO, the main problem is inconsistency which exists right now.
>>> rte_eth_dev_mac_addr_add() checks for duplicate MAC addition
>>> including the default one (index zero) and extends the entry
>>> pool mask (including zero entry case).
>>>
>>> However, the patch above does not extend zero entry pool mask.
>>> So, the result will depend on order which is bad:
>>> A. Set default to A, add MAC A with pool 2 => pool mask has 2
>>> B. Add MAC A with pool 2, set default to A => pool mask is empty
>>>
>> I don't know how this MAC pool works in which driver.
>
> Me too
>
>> However, the 'eth_dev_mac_restore' API show that 1) the default MAC 
>> has only pool zero
>> if set it by the 'mac_addr_add', 2) the default one hasn't pool 
>> information if set it
>> by 'default_mac_addr_set'.
>>
>> Do you mean we should inherit its pool mask in this case?
>
> I simply want to make it consistent
I know what you mean. However, from the implementations mentioned above, 
it seems that
drivers used pool mask don't care the pool mask of the default MAC.
Do we need to set pool mask for the default MAC?
>
>>> Am I missing something in the code?
>>> What is the right/intended behaviour?
>>>
>>>>
>>>> Fixes: 854d8ad4ef68 ("ethdev: add default mac address modifier")
>>>> Cc: stable@dpdk.org
>>>>
>>>> Signed-off-by: Huisong Li <lihuisong@huawei.com>
>>>> Signed-off-by: Min Hu <humin29@huawei.com>
>>>> ---
>>>>   lib/ethdev/rte_ethdev.c | 39 +++++++++++++++++++++++++++++++++++++--
>>>>   1 file changed, 37 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
>>>> index 46c088dc88..fc9ca8d6fd 100644
>>>> --- a/lib/ethdev/rte_ethdev.c
>>>> +++ b/lib/ethdev/rte_ethdev.c
>>>> @@ -4260,7 +4260,10 @@ rte_eth_dev_mac_addr_remove(uint16_t 
>>>> port_id, struct rte_ether_addr *addr)
>>>>   int
>>>>   rte_eth_dev_default_mac_addr_set(uint16_t port_id, struct 
>>>> rte_ether_addr *addr)
>>>>   {
>>>> +    uint64_t mac_pool_sel_bk = 0;
>>>>       struct rte_eth_dev *dev;
>>>> +    uint32_t pool;
>>>> +    int index;
>>>>       int ret;
>>>>         RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
>>>> @@ -4278,16 +4281,48 @@ rte_eth_dev_default_mac_addr_set(uint16_t 
>>>> port_id, struct rte_ether_addr *addr)
>>>> RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mac_addr_set, -ENOTSUP);
>>>>   +    /*
>>>> +     * If the address has been added as a non-default MAC address by
>>>> +     * rte_eth_dev_mac_addr_add API, it should be removed from
>>>> +     * dev->data->mac_addrs[].
>>>> +     */
>>>> +    index = eth_dev_get_mac_addr_index(port_id, addr);
>>>> +    if (index > 0) {
>>>> +        /* remove address in NIC data structure */
>>>> +        mac_pool_sel_bk = dev->data->mac_pool_sel[index];
>>>> +        ret = rte_eth_dev_mac_addr_remove(port_id, addr);
>>>> +        if (ret < 0) {
>>>> +            RTE_ETHDEV_LOG(ERR,
>>>> +            "Delete MAC address from the MAC list of ethdev port 
>>>> %u.\n",
>>>> +            port_id);
>>>> +            return ret;
>>>> +        }
>>>> +        /* reset pool bitmap */
>>>> +        dev->data->mac_pool_sel[index] = 0;
>>>> +    }
>>>> +
>>>>       ret = (*dev->dev_ops->mac_addr_set)(dev, addr);
>>>>       if (ret < 0)
>>>> -        return ret;
>>>> +        goto back;
>>>>         /* Update default address in NIC data structure */
>>>>       rte_ether_addr_copy(addr, &dev->data->mac_addrs[0]);
>>>>         return 0;
>>>> -}
>>>>   +back:
>>>> +    if (index > 0) {
>>>> +        pool = 0;
>>>> +        do {
>>>> +            if (mac_pool_sel_bk & UINT64_C(1))
>>>> +                rte_eth_dev_mac_addr_add(port_id, addr, pool);
>>>
>>> Don't we want to have at least error logs in the case of rollback
>>> failure here?
>> It doesn't feel necessary. It may trigger the printing of a large 
>> number of error logs
>> in abnormal scenarios.
>
> Otherwise how will user know that rollback failed and configuration
> is inconsistent?
Ack.
>
>>>
>>>> +            mac_pool_sel_bk >>= 1;
>>>> +            pool++;
>>>> +        } while (mac_pool_sel_bk);
>>>
>>> Please, compare vs 0 explicitly.
>> Ack
>>>
>>>> +    }
>>>> +
>>>> +    return ret;
>>>> +}
>>>>     /*
>>>>    * Returns index into MAC address array of addr. Use 
>>>> 00:00:00:00:00:00 to find
>>>
>>> .
>
> .

  reply	other threads:[~2022-06-11  9:05 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-22  3:36 [dpdk-dev] [PATCH] ethdev: fix one MAC address occupies two index in mac addrs Min Hu (Connor)
2021-09-22  6:39 ` Andrew Rybchenko
2021-09-22  7:43   ` Huisong Li
2021-09-22  8:02     ` Andrew Rybchenko
2021-09-22  9:48       ` Huisong Li
2021-10-05 19:21 ` Thomas Monjalon
2021-10-08  7:02   ` Min Hu (Connor)
2021-10-08 10:04     ` Thomas Monjalon
2021-10-09  9:53       ` Min Hu (Connor)
2021-10-11  9:02         ` Thomas Monjalon
2021-10-11  9:28 ` [dpdk-dev] [PATCH v2] " Min Hu (Connor)
2021-10-11 10:35   ` Thomas Monjalon
2021-10-12  2:58     ` lihuisong (C)
2021-10-12  7:14       ` Thomas Monjalon
2021-10-15  2:00         ` lihuisong (C)
2021-10-19 17:45   ` Ferruh Yigit
2021-10-20  6:49     ` lihuisong (C)
2021-10-20  7:41       ` Ferruh Yigit
2021-10-20 10:15         ` Kevin Traynor
2021-10-20 16:32           ` Ferruh Yigit
2021-10-21  2:05             ` lihuisong (C)
2021-10-21  8:30               ` Ferruh Yigit
2021-10-22  2:04                 ` lihuisong (C)
2021-10-26 10:21                   ` Ferruh Yigit
2021-11-08  6:55                     ` lihuisong (C)
2022-04-25  6:42                       ` Min Hu (Connor)
2022-10-20  9:31   ` [PATCH V5] ethdev: fix one address occupies two indexes in MAC addrs Huisong Li
2022-11-16  7:37     ` lihuisong (C)
2022-12-06  8:08     ` lihuisong (C)
2023-01-10  1:00     ` fengchengwen
2023-01-18  8:26     ` Thomas Monjalon
2023-01-18  8:38       ` Thomas Monjalon
2023-01-19 10:09         ` lihuisong (C)
2023-01-19  9:57       ` lihuisong (C)
2023-01-19 14:38         ` Thomas Monjalon
2023-01-28  1:38           ` lihuisong (C)
2023-01-31  6:41     ` [PATCH V6] ethdev: fix one address occupies two entries " Huisong Li
2023-02-01 10:42       ` Thomas Monjalon
2023-02-01 12:26         ` lihuisong (C)
2023-02-01 13:15     ` [PATCH V7] " Huisong Li
2023-02-01 16:37       ` Thomas Monjalon
2023-02-02  1:11         ` lihuisong (C)
2023-02-02 11:50           ` Thomas Monjalon
2023-02-02 12:19             ` lihuisong (C)
2023-02-02 12:36     ` [PATCH V8] " Huisong Li
2023-02-02 13:11       ` Thomas Monjalon
2023-02-02 18:09       ` Ferruh Yigit
2023-02-02 21:10         ` Thomas Monjalon
2023-02-02 21:50           ` Morten Brørup
2023-02-03  1:56           ` lihuisong (C)
2023-02-03 12:58             ` Ferruh Yigit
2023-02-04  2:57               ` lihuisong (C)
2023-02-09  8:32                 ` lihuisong (C)
2023-02-09 12:45                 ` Ferruh Yigit
2023-02-10  9:54                   ` lihuisong (C)
2023-02-10 12:27                     ` Ferruh Yigit
2023-02-10 13:20                       ` lihuisong (C)
2023-05-16 11:47       ` lihuisong (C)
2023-05-16 14:13         ` Ferruh Yigit
2023-05-17  7:45           ` lihuisong (C)
2023-05-17  8:53             ` Ferruh Yigit
2023-05-17 11:46               ` lihuisong (C)
2023-05-17 13:43                 ` Ferruh Yigit
2023-05-19  3:00     ` [PATCH V9] " Huisong Li
2023-05-19  8:42       ` Ferruh Yigit
2023-05-19  9:21         ` lihuisong (C)
2023-05-19  9:31     ` [PATCH V10] " Huisong Li
2023-05-19 10:45       ` Ferruh Yigit
2022-05-14  2:00 ` [PATCH V3 0/2] ethdev: fix MAC addrs list Min Hu (Connor)
2022-05-14  2:00   ` [PATCH V3 1/2] ethdev: fix one address occupies two indexes in MAC addrs Min Hu (Connor)
2022-05-14  2:00   ` [PATCH V3 2/2] ethdev: document default and non-default MAC address Min Hu (Connor)
2022-05-31 15:22   ` [PATCH V3 0/2] ethdev: fix MAC addrs list Andrew Rybchenko
2022-06-01  6:43     ` Min Hu (Connor)
2022-06-01  6:39   ` [PATCH v4 " Min Hu (Connor)
2022-06-01  6:39     ` [PATCH v4 1/2] ethdev: fix one address occupies two indexes in MAC addrs Min Hu (Connor)
2022-06-01 17:49       ` Andrew Rybchenko
2022-06-02  3:16         ` lihuisong (C)
2022-06-02 13:54           ` Andrew Rybchenko
2022-06-11  9:04             ` lihuisong (C) [this message]
2022-06-01  6:39     ` [PATCH v4 2/2] ethdev: document default and non-default MAC address Min Hu (Connor)
2022-06-01 17:49       ` Andrew Rybchenko
2022-06-01 17:49     ` [PATCH v4 0/2] ethdev: fix MAC addrs list Andrew Rybchenko

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=79be0c50-6c27-353a-bd3d-091ae625648b@huawei.com \
    --to=lihuisong@huawei.com \
    --cc=Yuying.Zhang@intel.com \
    --cc=ajit.khaparde@broadcom.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=beilei.xing@intel.com \
    --cc=dev@dpdk.org \
    --cc=ed.czeck@atomicrules.com \
    --cc=ferruh.yigit@xilinx.com \
    --cc=humin29@huawei.com \
    --cc=jianwang@trustnetic.com \
    --cc=jiawenwu@trustnetic.com \
    --cc=john.miller@atomicrules.com \
    --cc=qi.z.zhang@intel.com \
    --cc=qiming.yang@intel.com \
    --cc=rmody@marvell.com \
    --cc=shepard.siegel@atomicrules.com \
    --cc=shshaikh@marvell.com \
    --cc=simei.su@intel.com \
    --cc=somnath.kotur@broadcom.com \
    --cc=thomas@monjalon.net \
    --cc=wenjun1.wu@intel.com \
    --cc=xiao.w.wang@intel.com \
    /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).