ixgbe: fix setting port VLAN
authorEmil Tantilov <emil.s.tantilov@intel.com>
Wed, 10 Dec 2014 05:28:51 +0000 (05:28 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Fri, 6 Feb 2015 03:57:47 +0000 (19:57 -0800)
This patch fixes couple of issues introduced by
commit 2b509c0cd292 ("ixgbe: cleanup ixgbe_ndo_set_vf_vlan")

- fix setting of the VLAN inside ixgbe_enable_port_vlan()
- disable the "hide VLAN" bit in PFQDE when port VLAN is disabled

Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Krishneil Singh <Krishneil.k.singh@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c

index a82a36bc789e21fc5a744d664cb06d9b43c72ccc..7f37fe7269a7360c0edbccfab6f8e7e03ff5a3b0 100644 (file)
@@ -1094,14 +1094,12 @@ static int ixgbe_enable_port_vlan(struct ixgbe_adapter *adapter, int vf,
                                  u16 vlan, u8 qos)
 {
        struct ixgbe_hw *hw = &adapter->hw;
-       int err = 0;
+       int err;
 
-       if (adapter->vfinfo[vf].pf_vlan)
-               err = ixgbe_set_vf_vlan(adapter, false,
-                                       adapter->vfinfo[vf].pf_vlan,
-                                       vf);
+       err = ixgbe_set_vf_vlan(adapter, true, vlan, vf);
        if (err)
                goto out;
+
        ixgbe_set_vmvir(adapter, vlan, qos, vf);
        ixgbe_set_vmolr(hw, vf, false);
        if (adapter->vfinfo[vf].spoofchk_enabled)
@@ -1140,6 +1138,11 @@ static int ixgbe_disable_port_vlan(struct ixgbe_adapter *adapter, int vf)
        hw->mac.ops.set_vlan_anti_spoofing(hw, false, vf);
        if (adapter->vfinfo[vf].vlan_count)
                adapter->vfinfo[vf].vlan_count--;
+
+       /* disable hide VLAN on X550 */
+       if (hw->mac.type >= ixgbe_mac_X550)
+               ixgbe_write_qde(adapter, vf, IXGBE_QDE_ENABLE);
+
        adapter->vfinfo[vf].pf_vlan = 0;
        adapter->vfinfo[vf].pf_qos = 0;