On 01/18/2018 04:27 PM, John Allen wrote:
> 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 <jal...@linux.vnet.ibm.com>

Reviewed-by: Nathan Fontenot <nf...@linux.vnet.ibm.com>

> ---
> diff --git a/drivers/net/ethernet/ibm/ibmvnic.c 
> b/drivers/net/ethernet/ibm/ibmvnic.c
> index bb56460..f0dbb76 100644
> --- a/drivers/net/ethernet/ibm/ibmvnic.c
> +++ b/drivers/net/ethernet/ibm/ibmvnic.c
> @@ -867,7 +867,7 @@ static int ibmvnic_get_vpd(struct ibmvnic_adapter 
> *adapter)
>       if (adapter->vpd->buff)
>               len = adapter->vpd->len;
> 
> -     reinit_completion(&adapter->fw_done);
> +     init_completion(&adapter->fw_done);
>       crq.get_vpd_size.first = IBMVNIC_CRQ_CMD;
>       crq.get_vpd_size.cmd = GET_VPD_SIZE;
>       ibmvnic_send_crq(adapter, &crq);
> @@ -929,6 +929,13 @@ static int init_resources(struct ibmvnic_adapter 
> *adapter)
>       if (!adapter->vpd)
>               return -ENOMEM;
> 
> +     /* Vital Product Data (VPD) */
> +     rc = ibmvnic_get_vpd(adapter);
> +     if (rc) {
> +             netdev_err(netdev, "failed to initialize Vital Product Data 
> (VPD)\n");
> +             return rc;
> +     }
> +
>       adapter->map_id = 1;
>       adapter->napi = kcalloc(adapter->req_rx_queues,
>                               sizeof(struct napi_struct), GFP_KERNEL);
> @@ -1002,7 +1009,7 @@ static int __ibmvnic_open(struct net_device *netdev)
>  static int ibmvnic_open(struct net_device *netdev)
>  {
>       struct ibmvnic_adapter *adapter = netdev_priv(netdev);
> -     int rc, vpd;
> +     int rc;
> 
>       mutex_lock(&adapter->reset_lock);
> 
> @@ -1030,11 +1037,6 @@ static int ibmvnic_open(struct net_device *netdev)
>       rc = __ibmvnic_open(netdev);
>       netif_carrier_on(netdev);
> 
> -     /* Vital Product Data (VPD) */
> -     vpd = ibmvnic_get_vpd(adapter);
> -     if (vpd)
> -             netdev_err(netdev, "failed to initialize Vital Product Data 
> (VPD)\n");
> -
>       mutex_unlock(&adapter->reset_lock);
> 
>       return rc;
> 

Reply via email to