[PATCH v5 11/18] cxl: Separate bare-metal fields in adapter and AFU data structures

Ian Munsie imunsie at au1.ibm.com
Thu Mar 3 15:09:20 AEDT 2016


Excerpts from Frederic Barrat's message of 2016-02-24 03:21:52 +1100:
>  static int pci_init_afu(struct cxl *adapter, int slice, struct pci_dev *dev)
>  {
>      struct cxl_afu *afu;
> -    int rc;
> +    int rc = -ENOMEM;
>  
>      afu = cxl_alloc_afu(adapter, slice);
>      if (!afu)
>          return -ENOMEM;
>  
> +    afu->native = kzalloc(sizeof(struct cxl_afu_native), GFP_KERNEL);
> +    if (!afu->native)
> +        goto err_free_afu;
> +
> +    mutex_init(&afu->native->spa_mutex);
> +
>      rc = dev_set_name(&afu->dev, "afu%i.%i", adapter->adapter_num, slice);
>      if (rc)
> -        goto err_free;
> +        goto err_free_native;
>  
>      rc = pci_configure_afu(afu, adapter, dev);
>      if (rc)
> -        goto err_free;
> +        goto err_free_native;
>  
>      /* Don't care if this fails */
>      cxl_debugfs_afu_add(afu);
> @@ -859,7 +866,9 @@ err_put1:
>      device_unregister(&afu->dev);
>      return rc;
>  
> -err_free:
> +err_free_native:
> +    kfree(afu->native);
> +err_free_afu:
>      kfree(afu);
>      return rc;

Great - thanks for changing that to use consistent error paths :)

> @@ -1162,6 +1172,12 @@ static struct cxl *cxl_pci_init_adapter(struct pci_dev *dev)
>      if (!adapter)
>          return ERR_PTR(-ENOMEM);
>  
> +    adapter->native = kzalloc(sizeof(struct cxl_native), GFP_KERNEL);
> +    if (!adapter->native) {
> +        rc = -ENOMEM;
> +        goto err_release;
> +    }
> +
>      /* Set defaults for parameters which need to persist over
>       * configure/reconfigure
>       */
> @@ -1171,8 +1187,7 @@ static struct cxl *cxl_pci_init_adapter(struct pci_dev *dev)
>      rc = cxl_configure_adapter(adapter, dev);
>      if (rc) {
>          pci_disable_device(dev);
> -        cxl_release_adapter(&adapter->dev);
> -        return ERR_PTR(rc);
> +        goto err_release;
>      }
>  
>      /* Don't care if this one fails: */
> @@ -1198,6 +1213,10 @@ err_put1:
>      cxl_deconfigure_adapter(adapter);
>      device_unregister(&adapter->dev);
>      return ERR_PTR(rc);
> +
> +err_release:
> +    cxl_release_adapter(&adapter->dev);
> +    return ERR_PTR(rc);
>  }

Likewise, looks much better now :)

Acked-by: Ian Munsie <imunsie at au1.ibm.com>

Cheers,
-Ian



More information about the Linuxppc-dev mailing list