bnx2x: Fix VF's VLAN reconfiguration in reload.
[ Upstream commit 4a4d2d372fb9b9229327e2ed01d5d9572eddf4de ] Commit 04f05230c5c13 ("bnx2x: Remove configured vlans as part of unload sequence."), introduced a regression in driver that as a part of VF's reload flow, VLANs created on the VF doesn't get re-configured in hardware as vlan metadata/info was not getting cleared for the VFs which causes vlan PING to stop. This patch clears the vlan metadata/info so that VLANs gets re-configured back in the hardware in VF's reload flow and PING/traffic continues for VLANs created over the VFs. Fixes: 04f05230c5c13 ("bnx2x: Remove configured vlans as part of unload sequence.") Signed-off-by: Manish Chopra <manishc@marvell.com> Signed-off-by: Sudarsana Kalluru <skalluru@marvell.com> Signed-off-by: Shahed Shaikh <shshaikh@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5f35f44a37
commit
f7be89699a
@ -3062,12 +3062,13 @@ int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode, bool keep_link)
|
||||
/* if VF indicate to PF this function is going down (PF will delete sp
|
||||
* elements and clear initializations
|
||||
*/
|
||||
if (IS_VF(bp))
|
||||
if (IS_VF(bp)) {
|
||||
bnx2x_clear_vlan_info(bp);
|
||||
bnx2x_vfpf_close_vf(bp);
|
||||
else if (unload_mode != UNLOAD_RECOVERY)
|
||||
} else if (unload_mode != UNLOAD_RECOVERY) {
|
||||
/* if this is a normal/close unload need to clean up chip*/
|
||||
bnx2x_chip_cleanup(bp, unload_mode, keep_link);
|
||||
else {
|
||||
} else {
|
||||
/* Send the UNLOAD_REQUEST to the MCP */
|
||||
bnx2x_send_unload_req(bp, unload_mode);
|
||||
|
||||
|
@ -425,6 +425,8 @@ void bnx2x_set_reset_global(struct bnx2x *bp);
|
||||
void bnx2x_disable_close_the_gate(struct bnx2x *bp);
|
||||
int bnx2x_init_hw_func_cnic(struct bnx2x *bp);
|
||||
|
||||
void bnx2x_clear_vlan_info(struct bnx2x *bp);
|
||||
|
||||
/**
|
||||
* bnx2x_sp_event - handle ramrods completion.
|
||||
*
|
||||
|
@ -8488,11 +8488,21 @@ int bnx2x_set_vlan_one(struct bnx2x *bp, u16 vlan,
|
||||
return rc;
|
||||
}
|
||||
|
||||
void bnx2x_clear_vlan_info(struct bnx2x *bp)
|
||||
{
|
||||
struct bnx2x_vlan_entry *vlan;
|
||||
|
||||
/* Mark that hw forgot all entries */
|
||||
list_for_each_entry(vlan, &bp->vlan_reg, link)
|
||||
vlan->hw = false;
|
||||
|
||||
bp->vlan_cnt = 0;
|
||||
}
|
||||
|
||||
static int bnx2x_del_all_vlans(struct bnx2x *bp)
|
||||
{
|
||||
struct bnx2x_vlan_mac_obj *vlan_obj = &bp->sp_objs[0].vlan_obj;
|
||||
unsigned long ramrod_flags = 0, vlan_flags = 0;
|
||||
struct bnx2x_vlan_entry *vlan;
|
||||
int rc;
|
||||
|
||||
__set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
|
||||
@ -8501,10 +8511,7 @@ static int bnx2x_del_all_vlans(struct bnx2x *bp)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Mark that hw forgot all entries */
|
||||
list_for_each_entry(vlan, &bp->vlan_reg, link)
|
||||
vlan->hw = false;
|
||||
bp->vlan_cnt = 0;
|
||||
bnx2x_clear_vlan_info(bp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user