be2net: dynamically allocate adapter->vf_cfg
Subsystems (2)
PATCH 4/5 be2net: dynamically allocate adapter->vf_cfg
Instead of a fixed sized array for vf_cfg, allocate the size dynamically depending on number of VFs the device supports.
Signed-off-by Ajit Khaparde <[email protected]>
--- drivers/net/benet/be.h | 4 +--- drivers/net/benet/be_main.c | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-)
drivers/net/benet/be.h +1 -3
@@ -92,8 +92,6 @@ static inline char *nic_name(struct pci_dev *pdev)#define FW_VER_LEN 32 -#define BE_MAX_VF 32 -struct be_dma_mem {void *va;dma_addr_t dma;
@@ -336,7 +334,7 @@ struct be_adapter {bool be3_native;bool sriov_enabled; -struct be_vf_cfg vf_cfg[BE_MAX_VF ]; +struct be_vf_cfg *vf_cfg;u8 is_virtfn;u32 sli_family;u8 hba_port_num;
drivers/net/benet/be_main.c +12 -2
@@ -2837,6 +2837,7 @@ static void __devexit be_remove(struct pci_dev *pdev)be_ctrl_cleanup (adapter); +kfree (adapter->vf_cfg);be_sriov_disable (adapter);be_msix_disable (adapter);
@@ -3021,16 +3022,23 @@ static int __devinit be_probe(struct pci_dev *pdev, }be_sriov_enable (adapter); +if (adapter->sriov_enabled) { + adapter->vf_cfg =kcalloc (num_vfs, +sizeof (struct be_vf_cfg ),GFP_KERNEL ); + +if (!adapter->vf_cfg) + goto free_netdev; + } status =be_ctrl_init (adapter);if (status) - goto free_netdev; + goto free_vf_cfg;if (lancer_chip (adapter)) { status =lancer_test_and_set_rdy_state (adapter);if (status) {dev_err (&pdev->dev,"Adapter in non recoverable error\n" ); - goto free_netdev; + goto ctrl_clean; } }
@@ -3092,6 +3100,8 @@ stats_clean:be_stats_cleanup (adapter); ctrl_clean:be_ctrl_cleanup (adapter); +free_vf_cfg: +kfree (adapter->vf_cfg); free_netdev:be_sriov_disable (adapter);free_netdev (netdev);
Signature · 1 line
1.7.1