Skip to content

Commit 69d08dc

Browse files
jallen93davem330
authored andcommitted
ibmvnic: Allocate and request vpd in init_resources
In reset events in which our memory allocations need to be reallocated, VPD data is being freed, but never reallocated. This can cause issues if we later attempt to access that memory or reset and attempt to free the memory. This patch moves the allocation of the VPD data to init_resources so that it will be symmetrically freed during release resources. Signed-off-by: John Allen <[email protected]> Reviewed-by: Nathan Fontenot <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent e791380 commit 69d08dc

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

drivers/net/ethernet/ibm/ibmvnic.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,7 @@ static int ibmvnic_get_vpd(struct ibmvnic_adapter *adapter)
881881
if (adapter->vpd->buff)
882882
len = adapter->vpd->len;
883883

884-
reinit_completion(&adapter->fw_done);
884+
init_completion(&adapter->fw_done);
885885
crq.get_vpd_size.first = IBMVNIC_CRQ_CMD;
886886
crq.get_vpd_size.cmd = GET_VPD_SIZE;
887887
ibmvnic_send_crq(adapter, &crq);
@@ -943,6 +943,13 @@ static int init_resources(struct ibmvnic_adapter *adapter)
943943
if (!adapter->vpd)
944944
return -ENOMEM;
945945

946+
/* Vital Product Data (VPD) */
947+
rc = ibmvnic_get_vpd(adapter);
948+
if (rc) {
949+
netdev_err(netdev, "failed to initialize Vital Product Data (VPD)\n");
950+
return rc;
951+
}
952+
946953
adapter->map_id = 1;
947954
adapter->napi = kcalloc(adapter->req_rx_queues,
948955
sizeof(struct napi_struct), GFP_KERNEL);
@@ -1016,7 +1023,7 @@ static int __ibmvnic_open(struct net_device *netdev)
10161023
static int ibmvnic_open(struct net_device *netdev)
10171024
{
10181025
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
1019-
int rc, vpd;
1026+
int rc;
10201027

10211028
mutex_lock(&adapter->reset_lock);
10221029

@@ -1039,11 +1046,6 @@ static int ibmvnic_open(struct net_device *netdev)
10391046
rc = __ibmvnic_open(netdev);
10401047
netif_carrier_on(netdev);
10411048

1042-
/* Vital Product Data (VPD) */
1043-
vpd = ibmvnic_get_vpd(adapter);
1044-
if (vpd)
1045-
netdev_err(netdev, "failed to initialize Vital Product Data (VPD)\n");
1046-
10471049
mutex_unlock(&adapter->reset_lock);
10481050

10491051
return rc;

0 commit comments

Comments
 (0)