mirror of https://gitee.com/openkylin/linux.git
bnx2x: Memory leak during VF removal
When removing a VF interface, the driver fails to release that VF's mailbox and bulletin board allocated memory. Signed-off-by: Yuval Mintz <Yuval.Mintz@qlogic.com> Signed-off-by: Ariel Elior <Ariel.Elior@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1c26585458
commit
e2a367f8e3
|
@ -13233,6 +13233,8 @@ static void __bnx2x_remove(struct pci_dev *pdev,
|
|||
iounmap(bp->doorbells);
|
||||
|
||||
bnx2x_release_firmware(bp);
|
||||
} else {
|
||||
bnx2x_vf_pci_dealloc(bp);
|
||||
}
|
||||
bnx2x_free_mem_bp(bp);
|
||||
|
||||
|
|
|
@ -2896,6 +2896,14 @@ void __iomem *bnx2x_vf_doorbells(struct bnx2x *bp)
|
|||
return bp->regview + PXP_VF_ADDR_DB_START;
|
||||
}
|
||||
|
||||
void bnx2x_vf_pci_dealloc(struct bnx2x *bp)
|
||||
{
|
||||
BNX2X_PCI_FREE(bp->vf2pf_mbox, bp->vf2pf_mbox_mapping,
|
||||
sizeof(struct bnx2x_vf_mbx_msg));
|
||||
BNX2X_PCI_FREE(bp->vf2pf_mbox, bp->pf2vf_bulletin_mapping,
|
||||
sizeof(union pf_vf_bulletin));
|
||||
}
|
||||
|
||||
int bnx2x_vf_pci_alloc(struct bnx2x *bp)
|
||||
{
|
||||
mutex_init(&bp->vf2pf_mutex);
|
||||
|
@ -2915,10 +2923,7 @@ int bnx2x_vf_pci_alloc(struct bnx2x *bp)
|
|||
return 0;
|
||||
|
||||
alloc_mem_err:
|
||||
BNX2X_PCI_FREE(bp->vf2pf_mbox, bp->vf2pf_mbox_mapping,
|
||||
sizeof(struct bnx2x_vf_mbx_msg));
|
||||
BNX2X_PCI_FREE(bp->vf2pf_mbox, bp->pf2vf_bulletin_mapping,
|
||||
sizeof(union pf_vf_bulletin));
|
||||
bnx2x_vf_pci_dealloc(bp);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
|
@ -502,6 +502,7 @@ static inline int bnx2x_vf_ustorm_prods_offset(struct bnx2x *bp,
|
|||
enum sample_bulletin_result bnx2x_sample_bulletin(struct bnx2x *bp);
|
||||
void bnx2x_timer_sriov(struct bnx2x *bp);
|
||||
void __iomem *bnx2x_vf_doorbells(struct bnx2x *bp);
|
||||
void bnx2x_vf_pci_dealloc(struct bnx2x *bp);
|
||||
int bnx2x_vf_pci_alloc(struct bnx2x *bp);
|
||||
int bnx2x_enable_sriov(struct bnx2x *bp);
|
||||
void bnx2x_disable_sriov(struct bnx2x *bp);
|
||||
|
@ -568,6 +569,7 @@ static inline void __iomem *bnx2x_vf_doorbells(struct bnx2x *bp)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline void bnx2x_vf_pci_dealloc(struct bnx2 *bp) {return 0; }
|
||||
static inline int bnx2x_vf_pci_alloc(struct bnx2x *bp) {return 0; }
|
||||
static inline void bnx2x_pf_set_vfs_vlan(struct bnx2x *bp) {}
|
||||
static inline int bnx2x_sriov_configure(struct pci_dev *dev, int num_vfs) {return 0; }
|
||||
|
|
Loading…
Reference in New Issue