Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp2960343pxb; Mon, 17 Jan 2022 09:02:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJzxyJvG0YEPPxxFE9mRi5zHp9zSbOLKaefB6v5jN5bG7rLL+YFv+ZYDMCMknwHmVtEp1V0b X-Received: by 2002:a17:90b:1b4b:: with SMTP id nv11mr6706904pjb.230.1642438961542; Mon, 17 Jan 2022 09:02:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642438961; cv=none; d=google.com; s=arc-20160816; b=xlZU54WJ8DnHN6TqLn89pQiivTspBPvILlitF2+e1D5x3j3Z5crgZuJOWjZ6k8VuXr qOXEPoDXpWqKXKVPUXYIhGI7FsxvExWvNCDpPduNY+UpJNxk+JR4tZwI7OxDp2NPrxHn YJc4sSjWMhWBCQm22XwvTPG54D7BfGMoZYFeprrR4JzJHJ33/vJUrihYYimQjn0mUbgX lks62DiNVIeQG21P8Pa6v8F77E+oTr2ymAC5cbrwkxNT19H5MjoEu9FRGbeErJfVqUo7 AOwesZsgQ5SmUGP+sqJY6JWj/fC+FWicp+OmUKt6+FG6HwTy4CG8TWx1koPLLTlpuh+e G4SQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=FVxkIVXvmC0Nrk/UWmSQOZ6cVlykJKmHFu7wmsgjKsA=; b=PGO07Y8zs7mlt0R+BeNwgYSKCGUlx+ssx8aEK3tAPUfBXb845B5/SlT507JkRPlSjW WvRHakW2qu8O2zxmFDsM5OyLDPCi6o/8BIMLcjhnJgc90YtYUszplfheX43+QO4EyoX8 itpv5njn3Dq/2xuZCIFdMojUDDng4va2JX7c/i9x2Cc3VZdC/0aPSbHEF0LheuW9Ps8Q 3vvhNj2MCTLEv+vmiGRVRcjj+f/8lRqUfIPagWpSiTekTIiMFjY0/n5czSxtt9xMnBfC zqObHY2+XLqz0YBNUV0A97bH3Qb0VKdFAeT6ayeOutO9iy9WFRpuzogtyBqXFbdzN80u UUww== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s19si5713077pjg.110.2022.01.17.09.02.29; Mon, 17 Jan 2022 09:02:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232553AbiAQItS (ORCPT + 99 others); Mon, 17 Jan 2022 03:49:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45142 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232592AbiAQItP (ORCPT ); Mon, 17 Jan 2022 03:49:15 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 50D21C061401 for ; Mon, 17 Jan 2022 00:49:15 -0800 (PST) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n9Ng2-0001gr-D1; Mon, 17 Jan 2022 09:47:46 +0100 Received: from [2a0a:edc0:0:900:1d::77] (helo=ptz.office.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1n9Nfp-00AmmL-Ku; Mon, 17 Jan 2022 09:47:32 +0100 Received: from ukl by ptz.office.stw.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1n9Nfo-0000aW-I8; Mon, 17 Jan 2022 09:47:32 +0100 Date: Mon, 17 Jan 2022 09:47:32 +0100 From: Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= To: Sergey Shtylyov Cc: Andrew Lunn , Ulf Hansson , Vignesh Raghavendra , KVM list , "Rafael J. Wysocki" , linux-iio@vger.kernel.org, Linus Walleij , Amit Kucheria , ALSA Development Mailing List , Jaroslav Kysela , Guenter Roeck , Thierry Reding , MTD Maling List , Linux I2C , "open list:GPIO SUBSYSTEM" , Miquel Raynal , linux-phy@lists.infradead.org, netdev@vger.kernel.org, linux-spi , Jiri Slaby , Khuong Dinh , Florian Fainelli , Matthias Schiffer , Kamal Dasu , Lee Jones , Bartosz Golaszewski , Daniel Lezcano , Kishon Vijay Abraham I , Geert Uytterhoeven , "open list:SERIAL DRIVERS" , bcm-kernel-feedback-list , Zhang Rui , platform-driver-x86@vger.kernel.org, Linux PWM List , Robert Richter , Saravanan Sekar , Corey Minyard , Linux PM list , Liam Girdwood , Mauro Carvalho Chehab , John Garry , Takashi Iwai , Peter Korsgaard , William Breathitt Gray , Mark Gross , Hans de Goede , Alex Williamson , Mark Brown , Borislav Petkov , Jakub Kicinski , Matthias Brugger , openipmi-developer@lists.sourceforge.net, Andy Shevchenko , Benson Leung , Pengutronix Kernel Team , Linux ARM , linux-edac@vger.kernel.org, Tony Luck , Richard Weinberger , Mun Yew Tham , Eric Auger , Greg Kroah-Hartman , Yoshihiro Shimoda , Cornelia Huck , Linux MMC List , Joakim Zhang , Linux Kernel Mailing List , Linux-Renesas , Vinod Koul , James Morse , Zha Qipeng , Sebastian Reichel , Niklas =?utf-8?Q?S=C3=B6derlund?= , linux-mediatek@lists.infradead.org, Brian Norris , "David S. Miller" Subject: Re: [PATCH 1/2] platform: make platform_get_irq_optional() optional Message-ID: <20220117084732.cdy2sash5hxp4lwo@pengutronix.de> References: <20220112085009.dbasceh3obfok5dc@pengutronix.de> <20220112213121.5ruae5mxwj6t3qiy@pengutronix.de> <29f0c65d-77f2-e5b2-f6cc-422add8a707d@omp.ru> <20220114092557.jrkfx7ihg26ekzci@pengutronix.de> <61b80939-357d-14f5-df99-b8d102a4e1a1@omp.ru> <20220114202226.ugzklxv4wzr6egwj@pengutronix.de> <57af1851-9341-985e-7b28-d2ba86770ecb@omp.ru> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="2mz4a6sr5yneo75s" Content-Disposition: inline In-Reply-To: <57af1851-9341-985e-7b28-d2ba86770ecb@omp.ru> X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ukl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --2mz4a6sr5yneo75s Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hello, On Sun, Jan 16, 2022 at 09:15:20PM +0300, Sergey Shtylyov wrote: > On 1/14/22 11:22 PM, Uwe Kleine-K=F6nig wrote: >=20 > >>>>>>> To me it sounds much more logical for the driver to check if an > >>>>>>> optional irq is non-zero (available) or zero (not available), tha= n to > >>>>>>> sprinkle around checks for -ENXIO. In addition, you have to remem= ber > >>>>>>> that this one returns -ENXIO, while other APIs use -ENOENT or -EN= OSYS > >>>>>>> (or some other error code) to indicate absence. I thought not hav= ing > >>>>>>> to care about the actual error code was the main reason behind the > >>>>>>> introduction of the *_optional() APIs. > >>>>> > >>>>>> No, the main benefit of gpiod_get_optional() (and clk_get_optional= ()) is > >>>>>> that you can handle an absent GPIO (or clk) as if it were availabl= e. > >>>> > >>>> Hm, I've just looked at these and must note that they match 1:1 w= ith > >>>> platform_get_irq_optional(). Unfortunately, we can't however behave = the > >>>> same way in request_irq() -- because it has to support IRQ0 for the = sake > >>>> of i8253 drivers in arch/... > >>> > >>> Let me reformulate your statement to the IMHO equivalent: > >>> > >>> If you set aside the differences between > >>> platform_get_irq_optional() and gpiod_get_optional(), > >> > >> Sorry, I should make it clear this is actually the diff between a w= ould-be > >> platform_get_irq_optional() after my patch, not the current code... > >=20 > > The similarity is that with your patch both gpiod_get_optional() and > > platform_get_irq_optional() return NULL and 0 on not-found. The relevant > > difference however is that for a gpiod NULL is a dummy value, while for > > irqs it's not. So the similarity is only syntactically, but not > > semantically. >=20 > I have noting to say here, rather than optional IRQ could well have a = different > meaning than for clk/gpio/etc. >=20 > [...] > >>> However for an interupt this cannot work. You will always have to che= ck > >>> if the irq is actually there or not because if it's not you cannot ju= st > >>> ignore that. So there is no benefit of an optional irq. > >>> > >>> Leaving error message reporting aside, the introduction of > >>> platform_get_irq_optional() allows to change > >>> > >>> irq =3D platform_get_irq(...); > >>> if (irq < 0 && irq !=3D -ENXIO) { > >>> return irq; > >>> } else if (irq >=3D 0) { > >> > >> Rather (irq > 0) actually, IRQ0 is considered invalid (but still re= turned). > >=20 > > This is a topic I don't feel strong for, so I'm sloppy here. If changing > > this is all that is needed to convince you of my point ... >=20 > Note that we should absolutely (and first of all) stop returning 0 fro= m platform_get_irq() > on a "real" IRQ0. Handling that "still good" zero absolutely doesn't scal= e e.g. for the subsystems > (like libata) which take 0 as an indication that the polling mode should = be used... We can't afford > to be sloppy here. ;-) Then maybe do that really first? I didn't recheck, but is this what the driver changes in your patch is about? After some more thoughts I wonder if your focus isn't to align platform_get_irq_optional to (clk|gpiod|regulator)_get_optional, but to simplify return code checking. Because with your change we have: - < 0 -> error - =3D=3D 0 -> no irq - > 0 -> irq For my part I'd say this doesn't justify the change, but at least I could better life with the reasoning. If you start at: irq =3D platform_get_irq_optional(...) if (irq < 0 && irq !=3D -ENXIO) return irq else if (irq > 0) setup_irq(irq); else setup_polling() I'd change that to irq =3D platform_get_irq_optional(...) if (irq > 0) /* or >=3D 0 ? */ setup_irq(irq) else if (irq =3D=3D -ENXIO) setup_polling() else return irq This still has to mention -ENXIO, but this is ok and checking for 0 just hardcodes a different return value. Anyhow, I think if you still want to change platform_get_irq_optional you should add a few patches converting some drivers which demonstrates the improvement for the callers. Best regards Uwe --=20 Pengutronix e.K. | Uwe Kleine-K=F6nig | Industrial Linux Solutions | https://www.pengutronix.de/ | --2mz4a6sr5yneo75s Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEfnIqFpAYrP8+dKQLwfwUeK3K7AkFAmHlLSEACgkQwfwUeK3K 7AmyYgf/XGQlmMOUl2lAj4GQW7CiS0lV2TuFuhlnDJf7F3PzQ2L1ZVscbjBxxIXN fsZPjxz917pgWPixWRPYgXzkeU3If7KNJ5f9/292eCe0By1fl+utu3I9WysE1hdr PuW7Agx3O7iU6i4vgBzZwgsXhX1Lsmncj4/gBgrEr2pBghxy0BIv+tTmGrYXlmtJ XRwbdG3Vvwwo7wBrJhY1BQafu9cvLp3DwecEhMLBuavyKMrZxRg81gVHsuuox+Bp OCOzyMTz2kRs5wf3x8L6Hytaa9Qy6EHRw/hfHWaJJE1zZ6vs89ZNbD5agngTlucq HqzlfNxrLhuHolxSw3kKK9ueKcEycg== =bX8l -----END PGP SIGNATURE----- --2mz4a6sr5yneo75s--