> From: Eric Farman <far...@linux.ibm.com>
> Sent: Thursday, October 20, 2022 12:22 AM
> 
> @@ -101,15 +101,20 @@ static int vfio_ccw_mdev_probe(struct
> mdev_device *mdev)
>  {
>       struct subchannel *sch = to_subchannel(mdev->dev.parent);
>       struct vfio_ccw_parent *parent = dev_get_drvdata(&sch->dev);
> -     struct vfio_ccw_private *private = dev_get_drvdata(&parent->dev);
> +     struct vfio_ccw_private *private;
>       int ret;
> 
> -     if (private->state == VFIO_CCW_STATE_NOT_OPER)
> -             return -ENODEV;

Not familiar with ccw but just want to double confirm this removal
is intentional w/o side-effect?

> +     private = vfio_ccw_alloc_private(sch);
> +     if (!private)
> +             return -ENOMEM;
> 
>       ret = vfio_init_device(&private->vdev, &mdev->dev,
> &vfio_ccw_dev_ops);
> -     if (ret)
> +     if (ret) {
> +             kfree(private);
>               return ret;
> +     }
> +
> +     dev_set_drvdata(&parent->dev, private);
> 
>       VFIO_CCW_MSG_EVENT(2, "sch %x.%x.%04x: create\n",
>                          sch->schid.cssid,
> @@ -123,6 +128,7 @@ static int vfio_ccw_mdev_probe(struct mdev_device
> *mdev)
>       return 0;
> 
>  err_put_vdev:
> +     dev_set_drvdata(&parent->dev, NULL);

No need to set drvdata to NULL, iiuc

Reply via email to