* [PATCH iwl-net v3] idpf: set mac type when adding and removing MAC filters
@ 2025-08-14 23:43 Emil Tantilov
2025-08-26 17:43 ` Simon Horman
2025-08-29 22:38 ` [Intel-wired-lan] " Salin, Samuel
0 siblings, 2 replies; 3+ messages in thread
From: Emil Tantilov @ 2025-08-14 23:43 UTC (permalink / raw)
To: intel-wired-lan
Cc: netdev, Aleksandr.Loktionov, przemyslaw.kitszel, anthony.l.nguyen,
andrew+netdev, davem, edumazet, kuba, pabeni, jianliu, mschmidt,
decot, willemb, joshua.a.hay, pmenzel
On control planes that allow changing the MAC address of the interface,
the driver must provide a MAC type to avoid errors such as:
idpf 0000:0a:00.0: Transaction failed (op 535)
idpf 0000:0a:00.0: Received invalid MAC filter payload (op 535) (len 0)
idpf 0000:0a:00.0: Transaction failed (op 536)
These errors occur during driver load or when changing the MAC via:
ip link set <iface> address <mac>
Add logic to set the MAC type when sending ADD/DEL (opcodes 535/536) to
the control plane. Since only one primary MAC is supported per vport, the
driver only needs to send an ADD opcode when setting it. Remove the old
address by calling __idpf_del_mac_filter(), which skips the message and
just clears the entry from the internal list. This avoids an error on DEL
as it attempts to remove an address already cleared by the preceding ADD
opcode.
Fixes: ce1b75d0635c ("idpf: add ptypes and MAC filter support")
Reported-by: Jian Liu <jianliu@redhat.com>
Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
---
Changelog:
v3:
- Update the commit message to clarify the change in logic from ADD/DEL
to just ADD in idpf_set_mac() is to avoid another case where the control plane will
return an error.
- s/old_address/old_mac_address/g
- Refactored idpf_set_mac_type() to use ternary operator for setting
the MAC type based on whether the address is primary or not.
v2:
- Make sure to clear the primary MAC from the internal list, following
successful change.
- Update the description to include the error on 536 opcode and
mention the removal of the old address.
v1:
https://lore.kernel.org/intel-wired-lan/20250806192130.3197-1-emil.s.tantilov@intel.com/
---
drivers/net/ethernet/intel/idpf/idpf_lib.c | 9 ++++++---
drivers/net/ethernet/intel/idpf/idpf_virtchnl.c | 12 ++++++++++++
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/intel/idpf/idpf_lib.c b/drivers/net/ethernet/intel/idpf/idpf_lib.c
index 2c2a3e85d693..513032cb5f08 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_lib.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_lib.c
@@ -2344,6 +2344,7 @@ static int idpf_set_mac(struct net_device *netdev, void *p)
struct idpf_netdev_priv *np = netdev_priv(netdev);
struct idpf_vport_config *vport_config;
struct sockaddr *addr = p;
+ u8 old_mac_addr[ETH_ALEN];
struct idpf_vport *vport;
int err = 0;
@@ -2367,17 +2368,19 @@ static int idpf_set_mac(struct net_device *netdev, void *p)
if (ether_addr_equal(netdev->dev_addr, addr->sa_data))
goto unlock_mutex;
+ ether_addr_copy(old_mac_addr, vport->default_mac_addr);
+ ether_addr_copy(vport->default_mac_addr, addr->sa_data);
vport_config = vport->adapter->vport_config[vport->idx];
err = idpf_add_mac_filter(vport, np, addr->sa_data, false);
if (err) {
__idpf_del_mac_filter(vport_config, addr->sa_data);
+ ether_addr_copy(vport->default_mac_addr, netdev->dev_addr);
goto unlock_mutex;
}
- if (is_valid_ether_addr(vport->default_mac_addr))
- idpf_del_mac_filter(vport, np, vport->default_mac_addr, false);
+ if (is_valid_ether_addr(old_mac_addr))
+ __idpf_del_mac_filter(vport_config, old_mac_addr);
- ether_addr_copy(vport->default_mac_addr, addr->sa_data);
eth_hw_addr_set(netdev, addr->sa_data);
unlock_mutex:
diff --git a/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c b/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
index a028c69f7fdc..6330d4a0ae07 100644
--- a/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
+++ b/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
@@ -3765,6 +3765,16 @@ u32 idpf_get_vport_id(struct idpf_vport *vport)
return le32_to_cpu(vport_msg->vport_id);
}
+static void idpf_set_mac_type(struct idpf_vport *vport,
+ struct virtchnl2_mac_addr *mac_addr)
+{
+ bool is_primary;
+
+ is_primary = ether_addr_equal(vport->default_mac_addr, mac_addr->addr);
+ mac_addr->type = is_primary ? VIRTCHNL2_MAC_ADDR_PRIMARY :
+ VIRTCHNL2_MAC_ADDR_EXTRA;
+}
+
/**
* idpf_mac_filter_async_handler - Async callback for mac filters
* @adapter: private data struct
@@ -3894,6 +3904,7 @@ int idpf_add_del_mac_filters(struct idpf_vport *vport,
list) {
if (add && f->add) {
ether_addr_copy(mac_addr[i].addr, f->macaddr);
+ idpf_set_mac_type(vport, &mac_addr[i]);
i++;
f->add = false;
if (i == total_filters)
@@ -3901,6 +3912,7 @@ int idpf_add_del_mac_filters(struct idpf_vport *vport,
}
if (!add && f->remove) {
ether_addr_copy(mac_addr[i].addr, f->macaddr);
+ idpf_set_mac_type(vport, &mac_addr[i]);
i++;
f->remove = false;
if (i == total_filters)
--
2.37.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH iwl-net v3] idpf: set mac type when adding and removing MAC filters
2025-08-14 23:43 [PATCH iwl-net v3] idpf: set mac type when adding and removing MAC filters Emil Tantilov
@ 2025-08-26 17:43 ` Simon Horman
2025-08-29 22:38 ` [Intel-wired-lan] " Salin, Samuel
1 sibling, 0 replies; 3+ messages in thread
From: Simon Horman @ 2025-08-26 17:43 UTC (permalink / raw)
To: Emil Tantilov
Cc: intel-wired-lan, netdev, Aleksandr.Loktionov, przemyslaw.kitszel,
anthony.l.nguyen, andrew+netdev, davem, edumazet, kuba, pabeni,
jianliu, mschmidt, decot, willemb, joshua.a.hay, pmenzel
On Thu, Aug 14, 2025 at 04:43:00PM -0700, Emil Tantilov wrote:
> On control planes that allow changing the MAC address of the interface,
> the driver must provide a MAC type to avoid errors such as:
>
> idpf 0000:0a:00.0: Transaction failed (op 535)
> idpf 0000:0a:00.0: Received invalid MAC filter payload (op 535) (len 0)
> idpf 0000:0a:00.0: Transaction failed (op 536)
>
> These errors occur during driver load or when changing the MAC via:
> ip link set <iface> address <mac>
>
> Add logic to set the MAC type when sending ADD/DEL (opcodes 535/536) to
> the control plane. Since only one primary MAC is supported per vport, the
> driver only needs to send an ADD opcode when setting it. Remove the old
> address by calling __idpf_del_mac_filter(), which skips the message and
> just clears the entry from the internal list. This avoids an error on DEL
> as it attempts to remove an address already cleared by the preceding ADD
> opcode.
>
> Fixes: ce1b75d0635c ("idpf: add ptypes and MAC filter support")
> Reported-by: Jian Liu <jianliu@redhat.com>
> Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [Intel-wired-lan] [PATCH iwl-net v3] idpf: set mac type when adding and removing MAC filters
2025-08-14 23:43 [PATCH iwl-net v3] idpf: set mac type when adding and removing MAC filters Emil Tantilov
2025-08-26 17:43 ` Simon Horman
@ 2025-08-29 22:38 ` Salin, Samuel
1 sibling, 0 replies; 3+ messages in thread
From: Salin, Samuel @ 2025-08-29 22:38 UTC (permalink / raw)
To: Tantilov, Emil S, intel-wired-lan@lists.osuosl.org
Cc: pmenzel@molgen.mpg.de, willemb@google.com, decot@google.com,
netdev@vger.kernel.org, Hay, Joshua A, Loktionov, Aleksandr,
andrew+netdev@lunn.ch, edumazet@google.com, jianliu@redhat.com,
Nguyen, Anthony L, Kitszel, Przemyslaw, kuba@kernel.org,
pabeni@redhat.com, davem@davemloft.net
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of
> Emil Tantilov
> Sent: Thursday, August 14, 2025 4:43 PM
> To: intel-wired-lan@lists.osuosl.org
> Cc: pmenzel@molgen.mpg.de; willemb@google.com; decot@google.com;
> netdev@vger.kernel.org; Hay, Joshua A <joshua.a.hay@intel.com>; Loktionov,
> Aleksandr <aleksandr.loktionov@intel.com>; andrew+netdev@lunn.ch;
> edumazet@google.com; jianliu@redhat.com; Nguyen, Anthony L
> <anthony.l.nguyen@intel.com>; Kitszel, Przemyslaw
> <przemyslaw.kitszel@intel.com>; kuba@kernel.org; pabeni@redhat.com;
> davem@davemloft.net
> Subject: [Intel-wired-lan] [PATCH iwl-net v3] idpf: set mac type when adding
> and removing MAC filters
>
> On control planes that allow changing the MAC address of the interface, the
> driver must provide a MAC type to avoid errors such as:
>
> idpf 0000:0a:00.0: Transaction failed (op 535) idpf 0000:0a:00.0: Received
> invalid MAC filter payload (op 535) (len 0) idpf 0000:0a:00.0: Transaction
> failed (op 536)
>
> These errors occur during driver load or when changing the MAC via:
> ip link set <iface> address <mac>
>
> Add logic to set the MAC type when sending ADD/DEL (opcodes 535/536) to
> the control plane. Since only one primary MAC is supported per vport, the
> driver only needs to send an ADD opcode when setting it. Remove the old
> address by calling __idpf_del_mac_filter(), which skips the message and just
> clears the entry from the internal list. This avoids an error on DEL as it attempts
> to remove an address already cleared by the preceding ADD opcode.
>
> Fixes: ce1b75d0635c ("idpf: add ptypes and MAC filter support")
> Reported-by: Jian Liu <jianliu@redhat.com>
> Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
> Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
> ---
> Changelog:
> v3:
> - Update the commit message to clarify the change in logic from ADD/DEL
> to just ADD in idpf_set_mac() is to avoid another case where the control
> plane will
> return an error.
> - s/old_address/old_mac_address/g
> - Refactored idpf_set_mac_type() to use ternary operator for setting
> the MAC type based on whether the address is primary or not.
>
> v2:
> - Make sure to clear the primary MAC from the internal list, following
> successful change.
> - Update the description to include the error on 536 opcode and
> mention the removal of the old address.
>
> v1:
> https://lore.kernel.org/intel-wired-lan/20250806192130.3197-1-
> emil.s.tantilov@intel.com/
> ---
> 2.37.3
Tested-by: Samuel Salin <Samuel.salin@intel.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-08-29 22:38 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-14 23:43 [PATCH iwl-net v3] idpf: set mac type when adding and removing MAC filters Emil Tantilov
2025-08-26 17:43 ` Simon Horman
2025-08-29 22:38 ` [Intel-wired-lan] " Salin, Samuel
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).