]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
qede: Don't try removing unconfigured vlans
authorYuval Mintz <Yuval.Mintz@qlogic.com>
Wed, 27 Jul 2016 11:45:19 +0000 (14:45 +0300)
committerChuck Anderson <chuck.anderson@oracle.com>
Mon, 6 Mar 2017 04:59:23 +0000 (20:59 -0800)
Orabug: 25477939

As part of ndo_vlan_rx_kill_vid() implementation,
qede is requesting firmware to remove the vlan filter.
This currently happens even if the vlan wasn't previously
added [In case device ran out of vlan credits].

For PFs this doesn't cause any issues as the firmware
would simply ignore the removal request. But for VFs their
parent PF is holding an accounting of the configured vlans,
and such a request would cause the PF to fail the VF's
removal request.

Simply fix this for both PFs & VFs and don't remove filters
that were not previously added.

Fixes: 7c1bfcad9f3c8 ("qede: Add vlan filtering offload support")
Signed-off-by: Yuval Mintz <Yuval.Mintz@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit c524e2f5b7036c1ab4d8296b6869544b9eea01cd)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/net/ethernet/qlogic/qede/qede_main.c

index 5b871f3b491213abb635d2596bc4be365ace2aef..08aeff33905ee43f0f91d0fdcbb2cf9fff268bff 100644 (file)
@@ -2066,10 +2066,13 @@ static int qede_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid)
        }
 
        /* Remove vlan */
-       rc = qede_set_ucast_rx_vlan(edev, QED_FILTER_XCAST_TYPE_DEL, vid);
-       if (rc) {
-               DP_ERR(edev, "Failed to remove VLAN %d\n", vid);
-               return -EINVAL;
+       if (vlan->configured) {
+               rc = qede_set_ucast_rx_vlan(edev, QED_FILTER_XCAST_TYPE_DEL,
+                                           vid);
+               if (rc) {
+                       DP_ERR(edev, "Failed to remove VLAN %d\n", vid);
+                       return -EINVAL;
+               }
        }
 
        qede_del_vlan_from_list(edev, vlan);