All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: David Marchand <david.marchand@redhat.com>
Cc: dev@dpdk.org
Subject: Re: [PATCH v2 0/5] Remove limitations coming from legacy VMDq
Date: Wed, 6 May 2026 19:51:28 -0700	[thread overview]
Message-ID: <20260506195128.68d47ed2@phoenix.local> (raw)
In-Reply-To: <20260506123554.2524136-1-david.marchand@redhat.com>

On Wed,  6 May 2026 14:35:48 +0200
David Marchand <david.marchand@redhat.com> wrote:

> Since the commit 88ac4396ad29 ("ethdev: add VMDq support"),
> VMDq has been imposing a maximum number of mac addresses in the
> mac_addr_add/del API.
> 
> Nowadays, new Intel drivers do not support the feature and few other
> drivers implement this feature.
> 
> This series proposes to flag drivers that support the feature, and
> remove the limit of number of mac addresses for others.
> 
> Next step could be to remove the VMDq pool notion from the generic API.
> However I have some concern about this, as changing the quite stable
> mac_addr_add/del API now seems a lot of noise for not much benefit.
> 


AI review (manual not automated) saw these:

On Wed,  6 May 2026 14:35:49 +0200
David Marchand <david.marchand@redhat.com> wrote:

[PATCH v2 1/5] ethdev: skip VMDq pools unless configured
--------------------------------------------------------

Warning: duplicate-add no longer returns 0 in non-VMDq mode

   } else if (vmdq) {
           pool_mask = dev->data->mac_pool_sel[index];
           /* Check if both MAC address and pool is already there, and do nothing */
           if (pool_mask & RTE_BIT64(pool))
                   return 0;
   }

   When index >= 0 (MAC already present) and VMDq is not configured,
   the early "already there" return that existed before is now skipped
   entirely. The driver's mac_addr_add op gets re-invoked and
   mac_pool_sel is no longer updated for !vmdq, so subsequent calls
   keep re-invoking it. Pre-patch behaviour was idempotent (return 0).

   Suggested fix:

   } else if (vmdq) {
           pool_mask = dev->data->mac_pool_sel[index];
           if (pool_mask & RTE_BIT64(pool))
                   return 0;
   } else {
           return 0;       /* MAC already installed, only one pool */
   }


[PATCH v2 2/5] ethdev: announce VMDq capability
-----------------------------------------------

Warning: capability advertised even when max_vmdq_pools may be 0

   The capability bit is set unconditionally in several drivers where
   VMDq availability is conditional on hardware variant or runtime
   configuration:

     - net/intel/e1000/igb_ethdev.c: max_vmdq_pools = 0 for e1000_82575,
       e1000_i354 (no setting), e1000_i210, e1000_i211.
     - net/intel/i40e/i40e_ethdev.c: max_vmdq_pools is gated on
       (pf->flags & I40E_FLAG_VMDQ).
     - net/bnxt/bnxt_ethdev.c: max_vmdq_pools is set to 0 when there
       are not enough resources (see "Not enough resources to support
       VMDq" path).

   With this patch a user can pass mq_mode |= RTE_ETH_MQ_RX_VMDQ_FLAG
   through rte_eth_dev_configure() because the new capability check
   passes, but the driver has no pools to honour the request.

   Suggested fix: gate the capa bit on max_vmdq_pools > 0, or set it
   per-MAC-type / per-flag in each driver.

Warning: VMDq capability advertised on VFs that do not configure VMDq

   ixgbevf_dev_info_get() and txgbevf_dev_info_get() now advertise
   RTE_ETH_DEV_CAPA_VMDQ, but ixgbevf_dev_configure() and
   txgbevf_dev_configure() only handle RTE_ETH_MQ_RX_RSS_FLAG. The
   feature matrices doc/guides/nics/features/ixgbe_vf.ini and
   txgbe_vf.ini do not list "VMDq = Y". A VF is itself a member of a
   PF VMDq pool; advertising the capa from the VF is misleading.

Warning: ipn3ke advertises VMDq=Y in its features file but is not
   updated by the patch

   doc/guides/nics/features/ipn3ke.ini has "VMDq = Y" but the patch
   does not add RTE_ETH_DEV_CAPA_VMDQ to ipn3ke. Either update the
   driver or correct the feature matrix.

Warning: missing release note

   The new RTE_ETH_DEV_CAPA_VMDQ public bit and the new rejection in
   rte_eth_dev_configure() (returning -EINVAL when an application sets
   a VMDq mq_mode on a non-VMDq device) are user-visible API and
   behavioural changes. release_26_07.rst should mention them under
   "API Changes".


[PATCH v2 3/5] ethdev: hide VMDq internal sizes
-----------------------------------------------

Warning: public defines removed without deprecation cycle

   RTE_ETH_NUM_RECEIVE_MAC_ADDR and RTE_ETH_VMDQ_NUM_UC_HASH_ARRAY
   were declared in the application-facing rte_ethdev.h. Moving them
   to ethdev_driver.h removes them from the public API. Per the DPDK
   API/ABI policy this normally needs a prior deprecation notice; at
   minimum it warrants a release_26_07.rst "API Changes" entry.


[PATCH v2 4/5] net/iavf: accept up to 32k unicast MAC addresses
---------------------------------------------------------------

Warning: dead store in iavf_add_del_uc_addr_bulk()

   for (uint32_t i = 0; i < nb_addrs; i++) {
           size_t buf_len = sizeof(struct virtchnl_ether_addr_list) +
                   sizeof(struct virtchnl_ether_addr) * list->num_elements;
           ...
           buf_len = sizeof(struct virtchnl_ether_addr_list) +
                   sizeof(struct virtchnl_ether_addr) * list->num_elements;

   The first initialiser is unconditionally overwritten by the second
   assignment before any read. Drop the initialiser (or move the
   declaration to the use site).

Warning: missing release note for max_mac_addrs jump

   max_mac_addrs goes from 64 to 32768 and dev_data->mac_addrs is now
   allocated at RTE_ETHER_ADDR_LEN * 32768 = 192 KiB per VF port. This
   is a notable behaviour change for iavf users and worth a
   release_26_07.rst entry.

  parent reply	other threads:[~2026-05-07  2:51 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-03  9:18 [PATCH 0/4] Remove limitations coming from legacy VMDq David Marchand
2026-04-03  9:18 ` [PATCH 1/4] ethdev: skip VMDq pools unless configured David Marchand
2026-06-01  9:30   ` Andrew Rybchenko
2026-04-03  9:18 ` [PATCH 2/4] ethdev: announce VMDq capability David Marchand
2026-04-06 22:22   ` Kishore Padmanabha
2026-04-29 14:18     ` David Marchand
2026-05-18 22:12       ` Kishore Padmanabha
2026-06-01  9:32   ` Andrew Rybchenko
2026-04-03  9:18 ` [PATCH 3/4] ethdev: hide VMDq internal sizes David Marchand
2026-06-01  9:34   ` Andrew Rybchenko
2026-04-03  9:18 ` [PATCH 4/4] net/iavf: accept up to 32k unicast MAC addresses David Marchand
2026-04-05 18:47 ` [PATCH 0/4] Remove limitations coming from legacy VMDq Stephen Hemminger
2026-04-29 14:22   ` David Marchand
2026-05-06 12:35 ` [PATCH v2 0/5] " David Marchand
2026-05-06 12:35   ` [PATCH v2 1/5] ethdev: skip VMDq pools unless configured David Marchand
2026-06-01  9:35     ` Andrew Rybchenko
2026-05-06 12:35   ` [PATCH v2 2/5] ethdev: announce VMDq capability David Marchand
2026-06-01  9:36     ` Andrew Rybchenko
2026-05-06 12:35   ` [PATCH v2 3/5] ethdev: hide VMDq internal sizes David Marchand
2026-05-06 12:35   ` [PATCH v2 4/5] net/iavf: accept up to 32k unicast MAC addresses David Marchand
2026-05-06 12:35   ` [PATCH v2 5/5] net/iavf: fix duplicate MAC addresses install David Marchand
2026-05-07  2:51   ` Stephen Hemminger [this message]
2026-05-10 15:03     ` [PATCH v2 0/5] Remove limitations coming from legacy VMDq David Marchand
2026-05-10 17:03 ` [PATCH v3 " David Marchand
2026-05-10 17:03   ` [PATCH v3 1/5] ethdev: check VMDq availability David Marchand
2026-06-01  9:38     ` Andrew Rybchenko
2026-05-10 17:03   ` [PATCH v3 2/5] ethdev: skip VMDq pools unless configured David Marchand
2026-06-01  9:38     ` Andrew Rybchenko
2026-05-10 17:03   ` [PATCH v3 3/5] ethdev: hide VMDq internal sizes David Marchand
2026-06-01  9:39     ` Andrew Rybchenko
2026-05-10 17:03   ` [PATCH v3 4/5] net/iavf: accept up to 32k unicast MAC addresses David Marchand
2026-05-12 14:41     ` Stephen Hemminger
2026-05-27 13:25       ` David Marchand
2026-05-10 17:03   ` [PATCH v3 5/5] net/iavf: fix duplicate MAC addresses install David Marchand

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=20260506195128.68d47ed2@phoenix.local \
    --to=stephen@networkplumber.org \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.