Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp4570898pxv; Tue, 6 Jul 2021 04:19:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyoJKBPwNnNcvyT7WQlmbOxqV0IrQt9YyH7NcRub4f337T4NB17fusG/bOXsgP1azZNpwYQ X-Received: by 2002:a17:906:3016:: with SMTP id 22mr17766750ejz.28.1625570398986; Tue, 06 Jul 2021 04:19:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625570398; cv=none; d=google.com; s=arc-20160816; b=QEjrVXS0NBSnr4dQhXpzmKuLlL56YRiT6g41cIoZ0rP7Wq1rdFt+AN53cj4AdwojIq 1jWLVERpzEhizEFnFu9RzGimFl89VqSwA+wsQxNZCjofmCP63GxISg183Q2zd3UCIK0T 72Oamoud357aWsdPJN6UrNZWjaC4uZ1fLOARIXwRnWaSv625cE7NPlVW9GiDng+4Y2CL Obpv/TJovoTwUMIUxjAWGjChzpts9QqpOgEWfT2MFl0JK8axb4m7QgT7YXV1/5tYNvXV L838lWUV8V+8mLbFgySu225ir41UazDTdD21SEpp6P8OxJD8MXzk7eCw4QqFsCbc9pJM gWVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:user-agent:references:organization:in-reply-to :subject:cc:to:from:dkim-signature; bh=GjbCzRDVGxTPwLr0ZAizMTX8crBOOlyEFb2n3sNXFts=; b=rSxFSxCHcUQl/mfcyorFSQE19TlQdJXNBlzHQM3x8veBv0MWpHhlIYTUd47gMxcY0u YmFn6hJ1iod66adLpFm6L1Jx3jLv2HkjxHmtWwi3W9BtSsiK2oGQRdD9dzobqpMkdgna kdbmZ+NOuNW9ZtGC4F/48Ch5pAoxXyOIFxpdowAU7Z2I0iped2dy3xdYo0i1MFs7FCa+ p5grxvB69RIRjHEZgWnxruj4AJfFW6p5ghV+zoAXRkIZe6FrTHtu1BiSxiVbAU7qEl19 ju5KN7alSIUuIgiI6C7EeunbpePN9DGEAddhXEP4P/BJ2zuyNFsIuCZFH/jE8vJsjPHq niKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Mg8Za+5c; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id nd35si15276704ejc.274.2021.07.06.04.19.35; Tue, 06 Jul 2021 04:19:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Mg8Za+5c; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233284AbhGFLWK (ORCPT + 99 others); Tue, 6 Jul 2021 07:22:10 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:42791 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232804AbhGFLUe (ORCPT ); Tue, 6 Jul 2021 07:20:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1625570276; 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=GjbCzRDVGxTPwLr0ZAizMTX8crBOOlyEFb2n3sNXFts=; b=Mg8Za+5cuo7gsg5xUintaXZdpb7JPWlWjhMbKDaaHFvrPHG9u162FVMM44sUxPDjAvo+CV pehcatdBLRDxpOtKwAlUwSeT/UdfkEq7ov4HyGbqnWJ39ysdx3Q570HQ3uaTdAONxNF4RD v9/Jy/0cEAYWX/g3ITkFEiDgBiJQeqs= 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-66-0awj3QsmOBmPU2KgCkEgvQ-1; Tue, 06 Jul 2021 07:17:54 -0400 X-MC-Unique: 0awj3QsmOBmPU2KgCkEgvQ-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 95A44800D62; 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> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org 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) { struct ccwgroup_device *gdev =3D to_ccwgroupdev(dev); struct ccwgroup_driver *gdrv =3D to_ccwgroupdrv(dev->driver); =20 if (!dev->driver) - return 0; + return; if (gdrv->remove) gdrv->remove(gdev); - - return 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) return ret; } =20 -static int css_remove(struct device *dev) +static void css_remove(struct device *dev) { struct subchannel *sch; - int ret; =20 sch =3D to_subchannel(dev); - ret =3D sch->driver->remove ? sch->driver->remove(sch) : 0; + if (sch->driver->remove) + sch->driver->remove(sch); sch->driver =3D NULL; - return 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) return 0; } =20 -static int ccw_device_remove(struct device *dev) +static void ccw_device_remove(struct device *dev) { struct ccw_device *cdev =3D to_ccwdev(dev); struct ccw_driver *cdrv =3D cdev->drv; @@ -1776,8 +1776,6 @@ static int ccw_device_remove(struct device *dev) spin_unlock_irq(cdev->ccwlock); io_subchannel_quiesce(sch); __disable_cmf(cdev); - - return 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) return scmdrv->probe ? scmdrv->probe(scmdev) : -ENODEV; } =20 -static int scmdev_remove(struct device *dev) +static void scmdev_remove(struct device *dev) { struct scm_device *scmdev =3D to_scm_dev(dev); struct scm_driver *scmdrv =3D to_scm_drv(dev->driver); =20 - return scmdrv->remove ? scmdrv->remove(scmdev) : -ENODEV; + if (scmdrv->remove) + scmdrv->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) return rc; } =20 -static int ap_device_remove(struct device *dev) +static void ap_device_remove(struct device *dev) { struct ap_device *ap_dev =3D to_ap_dev(dev); struct ap_driver *ap_drv =3D ap_dev->drv; @@ -909,8 +909,6 @@ static int ap_device_remove(struct device *dev) ap_dev->drv =3D NULL; =20 put_device(dev); - - return 0; } =20 struct ap_queue *ap_get_qdev(ap_qid_t qid)