Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

qlcnic: Fix guest VLAN

o Clear cached vport vlan variable(vp->vlan) in PF on PCI FLR and
back-channel termination which will allow to configure guest VLAN
on VF after force off/shut down the guest VM.

Signed-off-by: Manish Chopra <manish.chopra@qlogic.com>
Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Manish Chopra and committed by
David S. Miller
2f0a9afa b662eca0

+10 -2
+10 -2
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
··· 635 635 struct qlcnic_cmd_args *cmd) 636 636 { 637 637 struct qlcnic_vf_info *vf = trans->vf; 638 - struct qlcnic_adapter *adapter = vf->adapter; 639 - int err; 638 + struct qlcnic_vport *vp = vf->vp; 639 + struct qlcnic_adapter *adapter; 640 640 u16 func = vf->pci_func; 641 + int err; 641 642 643 + adapter = vf->adapter; 642 644 cmd->rsp.arg[0] = trans->req_hdr->cmd_op; 643 645 cmd->rsp.arg[0] |= (1 << 16); 644 646 ··· 652 650 qlcnic_sriov_pf_config_vport(adapter, 0, func); 653 651 } 654 652 } else { 653 + if (vp->vlan_mode == QLC_GUEST_VLAN_MODE) 654 + vp->vlan = 0; 655 655 err = qlcnic_sriov_pf_config_vport(adapter, 0, func); 656 656 } 657 657 ··· 1565 1561 struct qlcnic_vf_info *vf) 1566 1562 { 1567 1563 struct net_device *dev = vf->adapter->netdev; 1564 + struct qlcnic_vport *vp = vf->vp; 1568 1565 1569 1566 if (!test_and_clear_bit(QLC_BC_VF_STATE, &vf->state)) { 1570 1567 clear_bit(QLC_BC_VF_FLR, &vf->state); ··· 1577 1572 vf->pci_func); 1578 1573 return; 1579 1574 } 1575 + 1576 + if (vp->vlan_mode == QLC_GUEST_VLAN_MODE) 1577 + vp->vlan = 0; 1580 1578 1581 1579 qlcnic_sriov_schedule_flr(sriov, vf, qlcnic_sriov_pf_process_flr); 1582 1580 netdev_info(dev, "FLR received for PCI func %d\n", vf->pci_func);