From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D484742B24; Tue, 16 May 2023 16:14:02 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AE8E941141; Tue, 16 May 2023 16:14:02 +0200 (CEST) Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2084.outbound.protection.outlook.com [40.107.101.84]) by mails.dpdk.org (Postfix) with ESMTP id 10F11410EE; Tue, 16 May 2023 16:14:01 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TkYCsz4EY2JapyyKswhpp3Ov6ToLd2rWGxrPh2fmRu1VQwbWwOUZtOxIXwW39N5fMJuPftQavUgoBn6OCLM6qxAXrq6KfEFHEYe/df5miPxX+y7PNFIAD1pzfdP0th6pRfF7MtV2joG4o8iBAmvCDTz0qwc6WRqIPRBJOigqse9X5aTsB9kkwdcUPCBB6OVFDBPHOa5WH/mhBnGyt3mPaDq1KoO0bQbApsqTnmK0hgHVZcqWXtHbo/SgBGskoeHxU9t18/QkBIm/dHKEsQkDCod+md/13/Yv0yE9g+RiDmNeCApSeYN5p04mY2NMS7LHKv2aUp9Q+AwS8Ws7x3YWIQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7HGu19OedA9F5picPQmkDYytlcitkqbPGYajRDlT8xg=; b=VduNxx93+2+NViGq9KgZDIfNrJbCua3KsRHVxyeLLFoxrxkcX2XVGvKKIli4gDvcbfLi9PsDheOvyMYTklkT2Trr6idOX7Pibpm70Ge7kk1AALhvY+Dwcdd97xtKtwdMV477swYy8xUlnniG89Ty2zJFGVbofKxGmsmifStUfX5im43YH/WawGbJmIBXkzqd+S3buStWBm/2n1bfuCCdbAEoCYq3/hP5sj1NsJeGMr+sIJvAfNnbYbP8PAPLkgfuT5eGbWBM0BnbawDGTQHLTXQ95tOSNw/d1XnM5CyddaH631ojatvXPhE7cQWR3s2IDzX5PzADhSiYIRIZ8+8Vyg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7HGu19OedA9F5picPQmkDYytlcitkqbPGYajRDlT8xg=; b=yP9YbYcWWeLAvzwv/18fsFM79+C+ODnknpJrGdhIV9Pu/n6aq7ktfPmh10xUjK1Kee3E7hEEpiZOXvUoJpf50J1b5/g1EBCW1k5/SG2/U5dE+l5zqn9aIo80V2e1qotxfGFJvSKsOr7Y5LZmHPbfaH9SI9sUljwRp8ArWghmG1s= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from CH2PR12MB4294.namprd12.prod.outlook.com (2603:10b6:610:a9::11) by CO6PR12MB5425.namprd12.prod.outlook.com (2603:10b6:303:13e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.32; Tue, 16 May 2023 14:13:58 +0000 Received: from CH2PR12MB4294.namprd12.prod.outlook.com ([fe80::7957:641d:6aba:3f9a]) by CH2PR12MB4294.namprd12.prod.outlook.com ([fe80::7957:641d:6aba:3f9a%4]) with mapi id 15.20.6387.033; Tue, 16 May 2023 14:13:58 +0000 Message-ID: Date: Tue, 16 May 2023 15:13:52 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 To: "lihuisong (C)" Cc: thomas@monjalon.net, andrew.rybchenko@oktetlabs.ru, liudongdong3@huawei.com, huangdaode@huawei.com, fengchengwen@huawei.com, dev@dpdk.org, "techboard@dpdk.org" References: <20221020093102.20679-1-lihuisong@huawei.com> <20230202123625.14975-1-lihuisong@huawei.com> <9fe8b055-2530-0cc3-c5fd-6672b2f569c0@huawei.com> Content-Language: en-US From: Ferruh Yigit Subject: Re: [PATCH V8] ethdev: fix one address occupies two entries in MAC addrs In-Reply-To: <9fe8b055-2530-0cc3-c5fd-6672b2f569c0@huawei.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: LO4P265CA0076.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2bd::11) To CH2PR12MB4294.namprd12.prod.outlook.com (2603:10b6:610:a9::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB4294:EE_|CO6PR12MB5425:EE_ X-MS-Office365-Filtering-Correlation-Id: 0e660f28-4c48-41d7-3454-08db5617ca7b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lLrDf7rYqHcSRnqKDtFVkbDSlU5uj5SSIwvg4jE2xvkYAtgFsXIgytVC8wYFEe7pG2SFI8e3LGZN4doDurFXlpmn0FzfgKhCJyK05eYYm7WZmPzq7fpkDzuxNzcOReRMnw39BE6BuEzzWJRFurrkcFj46zum63U1WW0SAlD3W+1mIdTVuaRXVoN8dN512Tb0MeA4EdXrOqZqiZZlE3JBCqh+TB+K1kjZDv9Xn21HuzEdg4KRMtak8lj2X9UeOzNh4Q2nzPtvVMk52FasusC+cAGNsohjilH0E2k8Koj08PgJC0G46Zdk+0859OaVdM5LHLp41sqmhDITSRIgEmDDjbgGZf0nN5pILvHz+aLhtJDqDSTSJW70SjVh23xZNmLSeeZHHs5EfR/kFRxvo04FEHBd0PjzcIRz8iZU781L11GMEZcppfBvmSBoCBmxrc4AShdViRSBdS0A9Do/npudhT5zNX5Fz7ZA0Ga6VAIEqurWut8XZWhSYmHFWjXGCUrw2Szv0Eb12L3m8RWKcVUtwZyPyBRg1gw9SS63B8QX3QCv9rrXBhEVcEh9Y5YaXNC4uMdML5KORcIBCWhZ4WtbwgFvUsZ3Sb+c7gyvf8eqTrnlUVWv2qMYa/DO8r1wlSolck7KVbz5JeQuadGt4oZ0zw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR12MB4294.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(366004)(376002)(39860400002)(346002)(136003)(396003)(451199021)(2616005)(38100700002)(6506007)(186003)(6512007)(53546011)(26005)(83380400001)(2906002)(8936002)(5660300002)(44832011)(8676002)(36756003)(41300700001)(478600001)(31696002)(66946007)(6486002)(6666004)(66556008)(66476007)(316002)(6916009)(86362001)(4326008)(31686004)(66899021)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VHBhQTIwMEpGSlhNV1QxQ2RSSExjTGo3RW55OWZCN2t6c3p1R2E3Z0hUU3hS?= =?utf-8?B?ZjcrL2oxTnVFVGJpbGFzcTFoODQxTGw4bWx4QjJ6alhEcEhNRHBlUmxvYURh?= =?utf-8?B?Y1ovWWorUVBadk1ZNFlpT20rSXFEb09xYnhka0xjMTh4QjVaTTRLTmlGTWFM?= =?utf-8?B?cm56KzhEbVZNbnYzUTFnVDVtdmdpYWd1dGkwWUsxaXZ1VTB4ZXJIODI5Tyth?= =?utf-8?B?WWJtKy9hYkswSmJKZk5Zd1IrcVVWSFZ4Y1NKQS9SWWxGWU80dkRrcThreEZC?= =?utf-8?B?aFBNZVpBazBQbEpEaTdCUlBxWFZMU2hUSENwM3FOY29KaStmc2RHSDdaUmFh?= =?utf-8?B?K3RrVVVQYmxiV3pBNVZoVnhpTDBJUWZQQUorM2VoMWZ0VGVPSVR4ZW83N0p0?= =?utf-8?B?bnJrMTBaVE1QOFhvaUN1U0xwVlhMTWVDZGwvZnhuRmYvMFdnSFpsYlh2c3N3?= =?utf-8?B?SVZweFJOdndMcWY1SEplQmkwRVhHallPMXNscHFMSnU0eTlvRnVrMjdsZHBP?= =?utf-8?B?K3ZBb2FER1NOYVk5K0pxQW9WOWY4VHF4bGtRMnpVeDhMWGJ1ZGJtZmoyeTI2?= =?utf-8?B?ajJrMXZNTFhQMDZZeGE2UDU3U3lCVXRWK1o3d3Jnem5zdk5GcFcxbDZVNUIz?= =?utf-8?B?Y1p3WnZOcEZJaHB0dGlmKzRENGZxNk9pUVczTjBMRDlSSll2dm5iaW9sLzB6?= =?utf-8?B?ZEZTZW5ZY2VmTlZXdGtrLys3ZjZ6V1B0d1g5c3BDbHlkOTA0SDlBOElIazVI?= =?utf-8?B?cjJuM0dONEhYaUtHSitwQjViSFVLSGlidkNhOGVMK3JhaVpVY2VXWE5tN3RH?= =?utf-8?B?UzdNeThnZVJ4V29kL0EyTi96bFAreTFoTlh0OCtlTkQ0MGRhWVNTTEMrcEVl?= =?utf-8?B?OUtONnhMV3IxYk10bU45RHNGVnp0Y1I2NXhXbElqRk5uN3NYNTNtUDR3TVVU?= =?utf-8?B?Yi95REJmL0dCQ1lmZFhxS1JUU2ovd3lMdEJjUyszK2ZrWE9KeDlWYnQzb1E2?= =?utf-8?B?L3FwRWFramRKODhJWlBwRTJjWHk0MFVEU25qZ3BNTllwRzFybGt4bGw0eTBl?= =?utf-8?B?QTBuVHBXanJOT3h4aXFTbzJPM2ZZV1RuT1lJVVVneDRHYW9sSXdyb1VtbjZU?= =?utf-8?B?M1ZNbEMzdjF5NlU3V3Bta3ROckhWbjI5M2p1NG9XaVA5SG4rREo4WjlTOTc1?= =?utf-8?B?RUhSdE5jTjVSRUhyNEpwcmVDOStUSElSMDhXMndwZGliVzN5YXBnTzYwdlVl?= =?utf-8?B?VithTitRVE9ram1MM2FuNWczSEVINnd2azhXMHR6OS9JbWVaakY2TkM5NXlk?= =?utf-8?B?YW42c3ZCSitramE2WjVqRnZhbXdoZ29rdW4xQTNTdUhxYmZhTy9iV1hQaWd0?= =?utf-8?B?cy8wbUxCb0tUNTlXRTdaeVdGZ01PaWdmdndvcXMyWUFuZk9lWnMxNjkwZDkz?= =?utf-8?B?Q3RNVHlWYU9CT0lhL1o1SnY5dEpyZm1hYVhmLzgrZlFxcHJsZS9Oang5WWdw?= =?utf-8?B?NllaU2NRN3ovbW43MXVlbGdIa1ByWCtJMmVHQXE4NThyaFhwdWZ2Wk45RHpj?= =?utf-8?B?eDZUSGJ0Wk1BMzZHR1RqWVZDTmc5Y2I4cWpKTnIxV3k0blVubG10WWNvTHIw?= =?utf-8?B?Z1Z1b1I3N1pMdkh6dDRuUXpaWEZNNGpWbWVING5Rc2hTbDRCeDlTejcvc3hs?= =?utf-8?B?MHFhWUN4eFBqREs4WlRaU0VFVXRNZk1zMWZJVHZIOTFWclVMaW13SmFyVGI4?= =?utf-8?B?d25DQnVFOGlZanFoV1VkTThUVXlTUGlsQW83Q1hkVy9aU1ZiR1VmR1VRdS9W?= =?utf-8?B?akh1c2ljL1Nrd29QakYwNnVBLzcrMVk1NWs4OUJxR0NObkJ6UWRkM3Z3ZWxD?= =?utf-8?B?ZnV1UE9yWW1aTGwrNHIyU2czYmtRT3dMR2RTTkl6R1dKVkROcmdxMDgvMlJD?= =?utf-8?B?d2pNek1oQTVSdlNuSmhuY1R5RVh2V1RPTVF0UkFZL040blJZV21EbFRGOE5G?= =?utf-8?B?NFN2VTl3NElmN3NKR1pnTWYrSE1RRzFOTkJTQWhlQlBKT20yQlF2YkFUNi9s?= =?utf-8?B?V0FvRXRUdVBNV0RUcTYwUEMwanRlMzFONjFUV01vdnV3dnlBTXdHaHFBR2ls?= =?utf-8?Q?C5Fk7bPaPkgj8mi5UHcoKeda/?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0e660f28-4c48-41d7-3454-08db5617ca7b X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4294.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 May 2023 14:13:58.7307 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KPNo9q0BRm3HyESkcaCiMWYkr7p7gr1zJ5OMVDfHusWo4YPXTvXnyfUh6guxKfXB X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR12MB5425 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On 5/16/2023 12:47 PM, lihuisong (C) wrote: > Hi Ferruh, > > There is no result on techboard. > How to deal with this problem next? +techboard for comment. Btw, what was your positioning to Bruce's suggestion, when a MAC address is in the list, fail to set it as default and enforce user do the corrective action (delete MAC explicitly etc...). If you are OK with it, that is good for me too, unless techboard objects we can proceed with that one. > > /Huisong > > 在 2023/2/2 20:36, Huisong Li 写道: >> The dev->data->mac_addrs[0] will be changed to a new MAC address when >> applications modify the default MAC address by .mac_addr_set(). However, >> if the new default one has been added as a non-default MAC address by >> .mac_addr_add(), the .mac_addr_set() doesn't remove it from the mac_addrs >> list. As a result, one MAC address occupies two entries in the list. >> Like: >> add(MAC1) >> add(MAC2) >> add(MAC3) >> add(MAC4) >> set_default(MAC3) >> default=MAC3, the rest of the list=MAC1, MAC2, MAC3, MAC4 >> Note: MAC3 occupies two entries. >> >> 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 see MAC3 from the list, >> but packets with MAC3 aren't actually received by the PMD. >> >> So need to ensure that the new default address is removed from the >> rest of >> the list if the address was already in the list. >> >> Fixes: 854d8ad4ef68 ("ethdev: add default mac address modifier") >> Cc: stable@dpdk.org >> >> Signed-off-by: Huisong Li >> Acked-by: Chengwen Feng >> --- >> v8: fix some comments. >> v7: add announcement in the release notes and document this behavior. >> v6: fix commit log and some code comments. >> v5: >>   - merge the second patch into the first patch. >>   - add error log when rollback failed. >> v4: >>    - fix broken in the patchwork >> v3: >>    - first explicitly remove the non-default MAC, then set default one. >>    - document default and non-default MAC address >> v2: >>    - fixed commit log. >> --- >>   doc/guides/rel_notes/release_23_03.rst |  6 +++++ >>   lib/ethdev/ethdev_driver.h             |  6 ++++- >>   lib/ethdev/rte_ethdev.c                | 35 ++++++++++++++++++++++++-- >>   lib/ethdev/rte_ethdev.h                |  3 +++ >>   4 files changed, 47 insertions(+), 3 deletions(-) >> >> diff --git a/doc/guides/rel_notes/release_23_03.rst >> b/doc/guides/rel_notes/release_23_03.rst >> index 84b112a8b1..1c9b9912c2 100644 >> --- a/doc/guides/rel_notes/release_23_03.rst >> +++ b/doc/guides/rel_notes/release_23_03.rst >> @@ -105,6 +105,12 @@ API Changes >>      Also, make sure to start the actual text at the margin. >>      ======================================================= >>   +* ethdev: ensured all entries in MAC address list are uniques. >> +  When setting a default MAC address with the function >> +  ``rte_eth_dev_default_mac_addr_set``, >> +  the address is now removed from the rest of the address list >> +  in order to ensure it is only at index 0 of the list. >> + >>     ABI Changes >>   ----------- >> diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h >> index dde3ec84ef..3994c61b86 100644 >> --- a/lib/ethdev/ethdev_driver.h >> +++ b/lib/ethdev/ethdev_driver.h >> @@ -117,7 +117,11 @@ struct rte_eth_dev_data { >>         uint64_t rx_mbuf_alloc_failed; /**< Rx ring mbuf allocation >> failures */ >>   -    /** Device Ethernet link address. @see >> rte_eth_dev_release_port() */ >> +    /** >> +     * Device Ethernet link addresses. >> +     * All entries are unique. >> +     * The first entry (index zero) is the default address. >> +     */ >>       struct rte_ether_addr *mac_addrs; >>       /** Bitmap associating MAC addresses to pools */ >>       uint64_t mac_pool_sel[RTE_ETH_NUM_RECEIVE_MAC_ADDR]; >> diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c >> index 86ca303ab5..de25183619 100644 >> --- a/lib/ethdev/rte_ethdev.c >> +++ b/lib/ethdev/rte_ethdev.c >> @@ -4498,7 +4498,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); >> @@ -4517,16 +4520,44 @@ rte_eth_dev_default_mac_addr_set(uint16_t >> port_id, struct rte_ether_addr *addr) >>       if (*dev->dev_ops->mac_addr_set == NULL) >>           return -ENOTSUP; >>   +    /* Keep address unique in dev->data->mac_addrs[]. */ >> +    index = eth_dev_get_mac_addr_index(port_id, addr); >> +    if (index > 0) { >> +        /* Remove address in dev 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, "Cannot remove the port %u address >> from the rest of list.\n", >> +                       port_id); >> +            return ret; >> +        } >> +    } >>       ret = (*dev->dev_ops->mac_addr_set)(dev, addr); >>       if (ret < 0) >> -        return ret; >> +        goto out; >>         /* Update default address in NIC data structure */ >>       rte_ether_addr_copy(addr, &dev->data->mac_addrs[0]); >>         return 0; >> -} >>   +out: >> +    if (index > 0) { >> +        pool = 0; >> +        do { >> +            if (mac_pool_sel_bk & UINT64_C(1)) { >> +                if (rte_eth_dev_mac_addr_add(port_id, addr, >> +                                 pool) != 0) >> +                    RTE_ETHDEV_LOG(ERR, "failed to restore MAC pool >> id(%u) in port %u.\n", >> +                               pool, port_id); >> +            } >> +            mac_pool_sel_bk >>= 1; >> +            pool++; >> +        } while (mac_pool_sel_bk != 0); >> +    } >> + >> +    return ret; >> +} >>     /* >>    * Returns index into MAC address array of addr. Use >> 00:00:00:00:00:00 to find >> diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h >> index d22de196db..2456153457 100644 >> --- a/lib/ethdev/rte_ethdev.h >> +++ b/lib/ethdev/rte_ethdev.h >> @@ -4356,6 +4356,9 @@ int rte_eth_dev_mac_addr_remove(uint16_t port_id, >>     /** >>    * Set the default MAC address. >> + * It replaces the address at index 0 of the MAC address list. >> + * If the address was already in the MAC address list, >> + * it is removed from the rest of the list. >>    * >>    * @param port_id >>    *   The port identifier of the Ethernet device.