]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
octeontx2-pf: check DMAC extraction support before filtering
authorSuman Ghosh <sumang@marvell.com>
Thu, 2 Jul 2026 03:34:51 +0000 (09:04 +0530)
committerPaolo Abeni <pabeni@redhat.com>
Wed, 8 Jul 2026 10:01:13 +0000 (12:01 +0200)
Currently, configuring a VF MAC address via the PF (e.g., 'ip link
set <pf> vf 0 mac <mac>') blindly attempts to install a DMAC-based
hardware filter. However, the hardware parser profile might not
support DMAC extraction.

Check if the hardware parsing profile supports DMAC extraction
before adding the filter. Additionally, emit a warning message
to inform the operator if the MAC filter installation fails due
to missing DMAC extraction support. Update config->mac only
after hardware programming succeeds in otx2_set_vf_mac().

Fixes: f0c2982aaf98 ("octeontx2-pf: Add support for SR-IOV management functions")
Signed-off-by: Suman Ghosh <sumang@marvell.com>
Signed-off-by: Nitin Shetty J <nshettyj@marvell.com>
Reviewed-by: Harshitha Ramamurthy <hramamurthy@google.com>
Link: https://patch.msgid.link/20260702033451.2969880-1-nshettyj@marvell.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c

index 88ac8535444547197c1a0a14d18ca9fa100912a2..2e33b33ec9934196d9a9d8663155401359771d77 100644 (file)
@@ -2516,10 +2516,42 @@ EXPORT_SYMBOL(otx2_config_hwtstamp_set);
 
 static int otx2_do_set_vf_mac(struct otx2_nic *pf, int vf, const u8 *mac)
 {
+       struct npc_get_field_status_req *freq;
+       struct npc_get_field_status_rsp *frsp;
        struct npc_install_flow_req *req;
        int err;
 
        mutex_lock(&pf->mbox.lock);
+
+       /* Skip installing the DMAC filter if the hardware parser profile
+        * does not support DMAC extraction.
+        */
+       freq = otx2_mbox_alloc_msg_npc_get_field_status(&pf->mbox);
+       if (!freq) {
+               err = -ENOMEM;
+               goto out;
+       }
+
+       freq->field = NPC_DMAC;
+       err = otx2_sync_mbox_msg(&pf->mbox);
+       if (err)
+               goto out;
+
+       frsp = (struct npc_get_field_status_rsp *)otx2_mbox_get_rsp
+              (&pf->mbox.mbox, 0, &freq->hdr);
+       if (IS_ERR(frsp)) {
+               err = PTR_ERR(frsp);
+               goto out;
+       }
+
+       if (!frsp->enable) {
+               netdev_warn(pf->netdev,
+                           "VF %d MAC filter not installed: DMAC extraction not supported by parser profile\n",
+                           vf);
+               err = -EOPNOTSUPP;
+               goto out;
+       }
+
        req = otx2_mbox_alloc_msg_npc_install_flow(&pf->mbox);
        if (!req) {
                err = -ENOMEM;
@@ -2558,13 +2590,12 @@ static int otx2_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
        if (!is_valid_ether_addr(mac))
                return -EINVAL;
 
-       config = &pf->vf_configs[vf];
-       ether_addr_copy(config->mac, mac);
-
        ret = otx2_do_set_vf_mac(pf, vf, mac);
-       if (ret == 0)
-               dev_info(&pdev->dev,
-                        "Load/Reload VF driver\n");
+       if (ret == 0) {
+               config = &pf->vf_configs[vf];
+               ether_addr_copy(config->mac, mac);
+               dev_info(&pdev->dev, "Load/Reload VF driver\n");
+       }
 
        return ret;
 }