From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 511B072 for ; Tue, 6 Jul 2021 11:17:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1625570277; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=X+JgLl9QuEVsbPi9CHfgp/50dUcjaNVT1a3Q1xwSglg=; b=NvkXANPVY3BU9Z47a7WIgfyX99b/fX2R3+gkXRx5UbLe8xvk+4bD/GEsafqgWAgCsYHYU8 8nqBRHRtdxTI/pAS0l9vErZyBvTg8xpzogppN68KAaDJjHkwpk3omwvyH4EL4uXOjv8Gqy vLNHZHbOCB1P+W+L0k2ttO2FFWZdnW4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-277-yIaEybclO9Gf3dSvLShqRA-1; Tue, 06 Jul 2021 07:17:55 -0400 X-MC-Unique: yIaEybclO9Gf3dSvLShqRA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 966CD802C87; Tue, 6 Jul 2021 11:17:49 +0000 (UTC) Received: from localhost (ovpn-113-13.ams2.redhat.com [10.36.113.13]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2FC1919C79; Tue, 6 Jul 2021 11:17:39 +0000 (UTC) From: Cornelia Huck To: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= , Greg Kroah-Hartman Cc: kernel@pengutronix.de, linux-kernel@vger.kernel.org, Russell King , Thomas Bogendoerfer , "James E.J. Bottomley" , Helge Deller , Geoff Levand , Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , "Rafael J. Wysocki" , Len Brown , William Breathitt Gray , =?utf-8?Q?Rafa=C5=82_Mi=C5=82eck?= =?utf-8?Q?i?= , Maxime Ripard , Chen-Yu Tsai , Jernej Skrabec , Alison Schofield , Vishal Verma , Ira Weiny , Ben Widawsky , Dan Williams , Dave Jiang , Vinod Koul , Stefan Richter , Sudeep Holla , Cristian Marussi , Wu Hao , Tom Rix , Moritz Fischer , Jiri Kosina , Benjamin Tissoires , Srinivas Pandruvada , "K. Y. Srinivasan" , Haiyang Zhang , Stephen Hemminger , Wei Liu , Dexuan Cui , Alexander Shishkin , Wolfram Sang , Alexandre Belloni , Dmitry Torokhov , Samuel Iglesias Gonsalvez , Jens Taprogge , Johannes Thumshirn , Mauro Carvalho Chehab , Maxim Levitsky , Alex Dubov , Ulf Hansson , Lee Jones , Tomas Winkler , Arnd Bergmann , Jakub Kicinski , "David S. Miller" , Jon Mason , Allen Hubbe , Kishon Vijay Abraham I , Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84sk?= =?utf-8?Q?i?= , Bjorn Helgaas , Dominik Brodowski , Maximilian Luz , Hans de Goede , Mark Gross , Matt Porter , Alexandre Bounine , Ohad Ben-Cohen , Bjorn Andersson , Mathieu Poirier , "Martin K. Petersen" , Thorsten Scherer , Srinivas Kandagatla , Andy Gross , Mark Brown , Stephen Boyd , Michael Buesch , Sven Van Asbroeck , Johan Hovold , Alex Elder , Andreas Noever , Michael Jamet , Mika Westerberg , Yehezkel Bernat , Rob Herring , Jiri Slaby , Heikki Krogerus , "Michael S. Tsirkin" , Jason Wang , Kirti Wankhede , Alex Williamson , Martyn Welch , Manohar Vanga , Boris Ostrovsky , Juergen Gross , Stefano Stabellini , Johannes Berg , Jaroslav Kysela , Takashi Iwai , Marc Zyngier , Tyrel Datwyler , Vladimir Zapolskiy , Samuel Holland , Qinglang Miao , Alexey Kardashevskiy , Kai-Heng Feng , Joey Pabalan , Pali =?utf-8?Q?Roh=C3=A1r?= , Adrian Hunter , Frank Li , Mike Christie , Bodo Stroesser , Hannes Reinecke , David Woodhouse , SeongJae Park , Julien Grall , linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org, linux-wireless@vger.kernel.org, linux-sunxi@lists.linux.dev, linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev, dmaengine@vger.kernel.org, linux1394-devel@lists.sourceforge.net, linux-fpga@vger.kernel.org, linux-input@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-i2c@vger.kernel.org, linux-i3c@lists.infradead.org, industrypack-devel@lists.sourceforge.net, linux-media@vger.kernel.org, linux-mmc@vger.kernel.org, netdev@vger.kernel.org, linux-ntb@googlegroups.com, linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-scsi@vger.kernel.org, alsa-devel@alsa-project.org, linux-arm-msm@vger.kernel.org, linux-spi@vger.kernel.org, linux-staging@lists.linux.dev, greybus-dev@lists.linaro.org, target-devel@vger.kernel.org, linux-usb@vger.kernel.org, linux-serial@vger.kernel.org, virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org Subject: Re: [PATCH] bus: Make remove callback return void In-Reply-To: <87pmvvhfqq.fsf@redhat.com> Organization: Red Hat GmbH References: <20210706095037.1425211-1-u.kleine-koenig@pengutronix.de> <87pmvvhfqq.fsf@redhat.com> User-Agent: Notmuch/0.32.1 (https://notmuchmail.org) Date: Tue, 06 Jul 2021 13:17:37 +0200 Message-ID: <87mtqzhesu.fsf@redhat.com> Precedence: bulk X-Mailing-List: linux-staging@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=cohuck@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On Tue, Jul 06 2021, Cornelia Huck wrote: > On Tue, Jul 06 2021, Uwe Kleine-K=C3=B6nig wrote: > >> The driver core ignores the return value of this callback because there >> is only little it can do when a device disappears. >> >> This is the final bit of a long lasting cleanup quest where several >> buses were converted to also return void from their remove callback. >> Additionally some resource leaks were fixed that were caused by drivers >> returning an error code in the expectation that the driver won't go >> away. >> >> With struct bus_type::remove returning void it's prevented that newly >> implemented buses return an ignored error code and so don't anticipate >> wrong expectations for driver authors. > > Yay! > >> >> Signed-off-by: Uwe Kleine-K=C3=B6nig >> --- >> Hello, >> >> this patch depends on "PCI: endpoint: Make struct pci_epf_driver::remove >> return void" that is not yet applied, see >> https://lore.kernel.org/r/20210223090757.57604-1-u.kleine-koenig@pengutr= onix.de. >> >> I tested it using allmodconfig on amd64 and arm, but I wouldn't be >> surprised if I still missed to convert a driver. So it would be great to >> get this into next early after the merge window closes. > > I'm afraid you missed the s390-specific busses in drivers/s390/cio/ > (css/ccw/ccwgroup). The change for vfio/mdev looks good. The following should do the trick for s390; not sure if other architectures have easy-to-miss busses as well. diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c index 9748165e08e9..a66f416138ab 100644 --- a/drivers/s390/cio/ccwgroup.c +++ b/drivers/s390/cio/ccwgroup.c @@ -439,17 +439,15 @@ module_exit(cleanup_ccwgroup); =20 /************************** driver stuff ******************************/ =20 -static int ccwgroup_remove(struct device *dev) +static void ccwgroup_remove(struct device *dev) { =09struct ccwgroup_device *gdev =3D to_ccwgroupdev(dev); =09struct ccwgroup_driver *gdrv =3D to_ccwgroupdrv(dev->driver); =20 =09if (!dev->driver) -=09=09return 0; +=09=09return; =09if (gdrv->remove) =09=09gdrv->remove(gdev); - -=09return 0; } =20 static void ccwgroup_shutdown(struct device *dev) diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c index a974943c27da..ebc321edba51 100644 --- a/drivers/s390/cio/css.c +++ b/drivers/s390/cio/css.c @@ -1371,15 +1371,14 @@ static int css_probe(struct device *dev) =09return ret; } =20 -static int css_remove(struct device *dev) +static void css_remove(struct device *dev) { =09struct subchannel *sch; -=09int ret; =20 =09sch =3D to_subchannel(dev); -=09ret =3D sch->driver->remove ? sch->driver->remove(sch) : 0; +=09if (sch->driver->remove) +=09=09sch->driver->remove(sch); =09sch->driver =3D NULL; -=09return ret; } =20 static void css_shutdown(struct device *dev) diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index 84f659cafe76..61d5d55bd9c8 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c @@ -1742,7 +1742,7 @@ ccw_device_probe (struct device *dev) =09return 0; } =20 -static int ccw_device_remove(struct device *dev) +static void ccw_device_remove(struct device *dev) { =09struct ccw_device *cdev =3D to_ccwdev(dev); =09struct ccw_driver *cdrv =3D cdev->drv; @@ -1776,8 +1776,6 @@ static int ccw_device_remove(struct device *dev) =09spin_unlock_irq(cdev->ccwlock); =09io_subchannel_quiesce(sch); =09__disable_cmf(cdev); - -=09return 0; } =20 static void ccw_device_shutdown(struct device *dev) diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c index 9f26d4310bb3..b6b4589c70bd 100644 --- a/drivers/s390/cio/scm.c +++ b/drivers/s390/cio/scm.c @@ -28,12 +28,13 @@ static int scmdev_probe(struct device *dev) =09return scmdrv->probe ? scmdrv->probe(scmdev) : -ENODEV; } =20 -static int scmdev_remove(struct device *dev) +static void scmdev_remove(struct device *dev) { =09struct scm_device *scmdev =3D to_scm_dev(dev); =09struct scm_driver *scmdrv =3D to_scm_drv(dev->driver); =20 -=09return scmdrv->remove ? scmdrv->remove(scmdev) : -ENODEV; +=09if (scmdrv->remove) +=09=09scmdrv->remove(scmdev); } =20 static int scmdev_uevent(struct device *dev, struct kobj_uevent_env *env) diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c index d2560186d771..8a0d37c0e2a5 100644 --- a/drivers/s390/crypto/ap_bus.c +++ b/drivers/s390/crypto/ap_bus.c @@ -884,7 +884,7 @@ static int ap_device_probe(struct device *dev) =09return rc; } =20 -static int ap_device_remove(struct device *dev) +static void ap_device_remove(struct device *dev) { =09struct ap_device *ap_dev =3D to_ap_dev(dev); =09struct ap_driver *ap_drv =3D ap_dev->drv; @@ -909,8 +909,6 @@ static int ap_device_remove(struct device *dev) =09ap_dev->drv =3D NULL; =20 =09put_device(dev); - -=09return 0; } =20 struct ap_queue *ap_get_qdev(ap_qid_t qid)