On 11/2/22 11:01 AM, Eric Farman wrote: > Now that we have a reasonable separation of structs that follow > the subchannel and mdev lifecycles, there's no reason we can't > call the official vfio_alloc_device routine for our private data, > and behave like everyone else. > > Signed-off-by: Eric Farman <farman@xxxxxxxxxxxxx> > Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx> > --- > drivers/s390/cio/vfio_ccw_drv.c | 18 ------------------ > drivers/s390/cio/vfio_ccw_ops.c | 28 ++++++++++++++++++---------- > drivers/s390/cio/vfio_ccw_private.h | 2 -- > drivers/vfio/vfio_main.c | 10 +++++----- > include/linux/vfio.h | 2 -- > 5 files changed, 23 insertions(+), 37 deletions(-) > > diff --git a/drivers/s390/cio/vfio_ccw_drv.c b/drivers/s390/cio/vfio_ccw_drv.c > index 041cc0860f0e..fd58c0f4f8cc 100644 > --- a/drivers/s390/cio/vfio_ccw_drv.c > +++ b/drivers/s390/cio/vfio_ccw_drv.c > @@ -151,24 +151,6 @@ static void vfio_ccw_sch_irq(struct subchannel *sch) > vfio_ccw_fsm_event(private, VFIO_CCW_EVENT_INTERRUPT); > } > > -void vfio_ccw_free_private(struct vfio_ccw_private *private) > -{ > - struct vfio_ccw_crw *crw, *temp; > - > - list_for_each_entry_safe(crw, temp, &private->crw, next) { > - list_del(&crw->next); > - kfree(crw); > - } > - > - kmem_cache_free(vfio_ccw_crw_region, private->crw_region); > - kmem_cache_free(vfio_ccw_schib_region, private->schib_region); > - kmem_cache_free(vfio_ccw_cmd_region, private->cmd_region); > - kmem_cache_free(vfio_ccw_io_region, private->io_region); > - kfree(private->cp.guest_cp); > - mutex_destroy(&private->io_mutex); > - kfree(private); > -} > - > static void vfio_ccw_free_parent(struct device *dev) > { > struct vfio_ccw_parent *parent = container_of(dev, struct vfio_ccw_parent, dev); > diff --git a/drivers/s390/cio/vfio_ccw_ops.c b/drivers/s390/cio/vfio_ccw_ops.c > index 8a929a9cf3c6..1155f8bcedd9 100644 > --- a/drivers/s390/cio/vfio_ccw_ops.c > +++ b/drivers/s390/cio/vfio_ccw_ops.c > @@ -102,15 +102,10 @@ static int vfio_ccw_mdev_probe(struct mdev_device *mdev) > struct vfio_ccw_private *private; > int ret; > > - private = kzalloc(sizeof(*private), GFP_KERNEL); > - if (!private) > - return -ENOMEM; > - > - ret = vfio_init_device(&private->vdev, &mdev->dev, &vfio_ccw_dev_ops); > - if (ret) { > - kfree(private); > - return ret; > - } > + private = vfio_alloc_device(vfio_ccw_private, vdev, &mdev->dev, > + &vfio_ccw_dev_ops); > + if (IS_ERR(private)) > + return PTR_ERR(private); OK, and now it makes sense to switch to IS_ERR since _vfio_alloc_device uses ERR_PTR. Reviewed-by: Matthew Rosato <mjrosato@xxxxxxxxxxxxx>