s390/cio: Make struct css_driver::remove return void
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Tue, 13 Jul 2021 19:35:19 +0000 (21:35 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 21 Jul 2021 09:53:41 +0000 (11:53 +0200)
The driver core ignores the return value of css_remove()
(because there is only little it can do when a device disappears) and
all callbacks return 0 anyhow.

So make it impossible for future drivers to return an unused error code
by changing the remove prototype to return void.

The real motivation for this change is the quest to make struct
bus_type::remove return void, too.

Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com>
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Link: https://lore.kernel.org/r/20210713193522.1770306-3-u.kleine-koenig@pengutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/s390/cio/chsc_sch.c
drivers/s390/cio/css.c
drivers/s390/cio/css.h
drivers/s390/cio/device.c
drivers/s390/cio/eadm_sch.c
drivers/s390/cio/vfio_ccw_drv.c

index c42405c620b5623a4bf85171508154332d0f9f1f..684348d82f08520eb2a79b88c46c3e45749c4da4 100644 (file)
@@ -100,7 +100,7 @@ static int chsc_subchannel_probe(struct subchannel *sch)
        return ret;
 }
 
-static int chsc_subchannel_remove(struct subchannel *sch)
+static void chsc_subchannel_remove(struct subchannel *sch)
 {
        struct chsc_private *private;
 
@@ -112,7 +112,6 @@ static int chsc_subchannel_remove(struct subchannel *sch)
                put_device(&sch->dev);
        }
        kfree(private);
-       return 0;
 }
 
 static void chsc_subchannel_shutdown(struct subchannel *sch)
index a974943c27dacc935763776f2f82edadce4db78f..092fd1ea57998139fe5327f75c62e23f441978e7 100644 (file)
@@ -1374,12 +1374,13 @@ static int css_probe(struct device *dev)
 static int css_remove(struct device *dev)
 {
        struct subchannel *sch;
-       int ret;
 
        sch = to_subchannel(dev);
-       ret = sch->driver->remove ? sch->driver->remove(sch) : 0;
+       if (sch->driver->remove)
+               sch->driver->remove(sch);
        sch->driver = NULL;
-       return ret;
+
+       return 0;
 }
 
 static void css_shutdown(struct device *dev)
index 2eddfc47f687c09b1b8bce14122bb9f308283f01..c98522cbe276f13019f990e03ab015a039e46747 100644 (file)
@@ -81,7 +81,7 @@ struct css_driver {
        int (*chp_event)(struct subchannel *, struct chp_link *, int);
        int (*sch_event)(struct subchannel *, int);
        int (*probe)(struct subchannel *);
-       int (*remove)(struct subchannel *);
+       void (*remove)(struct subchannel *);
        void (*shutdown)(struct subchannel *);
        int (*settle)(void);
 };
index 84f659cafe7665f9ae4401a88da24d8222b55140..cd5d2d4d8e46ad1bfc4b815ac4dcd6edd18108d5 100644 (file)
@@ -137,7 +137,7 @@ static int ccw_uevent(struct device *dev, struct kobj_uevent_env *env)
 
 static void io_subchannel_irq(struct subchannel *);
 static int io_subchannel_probe(struct subchannel *);
-static int io_subchannel_remove(struct subchannel *);
+static void io_subchannel_remove(struct subchannel *);
 static void io_subchannel_shutdown(struct subchannel *);
 static int io_subchannel_sch_event(struct subchannel *, int);
 static int io_subchannel_chp_event(struct subchannel *, struct chp_link *,
@@ -1101,7 +1101,7 @@ out_schedule:
        return 0;
 }
 
-static int io_subchannel_remove(struct subchannel *sch)
+static void io_subchannel_remove(struct subchannel *sch)
 {
        struct io_subchannel_private *io_priv = to_io_private(sch);
        struct ccw_device *cdev;
@@ -1120,7 +1120,6 @@ out_free:
                          io_priv->dma_area, io_priv->dma_area_dma);
        kfree(io_priv);
        sysfs_remove_group(&sch->dev.kobj, &io_subchannel_attr_group);
-       return 0;
 }
 
 static void io_subchannel_verify(struct subchannel *sch)
index c8964e0a23e7ff9d4472cc6783e635f09a5a62bc..15bdae5981ca71aca9a34bb6ce57395302a3acad 100644 (file)
@@ -282,7 +282,7 @@ disable:
        spin_unlock_irq(sch->lock);
 }
 
-static int eadm_subchannel_remove(struct subchannel *sch)
+static void eadm_subchannel_remove(struct subchannel *sch)
 {
        struct eadm_private *private = get_eadm_private(sch);
 
@@ -297,8 +297,6 @@ static int eadm_subchannel_remove(struct subchannel *sch)
        spin_unlock_irq(sch->lock);
 
        kfree(private);
-
-       return 0;
 }
 
 static void eadm_subchannel_shutdown(struct subchannel *sch)
index 9b61e9b131ade02da6be5f87be69068353881272..76099bcb765b457c4b06419f110776599e62b6c1 100644 (file)
@@ -234,7 +234,7 @@ out_free:
        return ret;
 }
 
-static int vfio_ccw_sch_remove(struct subchannel *sch)
+static void vfio_ccw_sch_remove(struct subchannel *sch)
 {
        struct vfio_ccw_private *private = dev_get_drvdata(&sch->dev);
        struct vfio_ccw_crw *crw, *temp;
@@ -257,7 +257,6 @@ static int vfio_ccw_sch_remove(struct subchannel *sch)
        VFIO_CCW_MSG_EVENT(4, "unbound from subchannel %x.%x.%04x\n",
                           sch->schid.cssid, sch->schid.ssid,
                           sch->schid.sch_no);
-       return 0;
 }
 
 static void vfio_ccw_sch_shutdown(struct subchannel *sch)