Re: [PATCH 1/2] platform: make platform_get_irq_optional() optional
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
- Subject: Re: [PATCH 1/2] platform: make platform_get_irq_optional() optional
- From: Sergey Shtylyov <s.shtylyov@xxxxxx>
- Date: Wed, 19 Jan 2022 18:50:12 +0300
- Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>, "Rafael J. Wysocki" <rafael@xxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>, Andrew Lunn <andrew@xxxxxxx>, Ulf Hansson <ulf.hansson@xxxxxxxxxx>, Vignesh Raghavendra <vigneshr@xxxxxx>, Jiri Slaby <jirislaby@xxxxxxxxxx>, Liam Girdwood <lgirdwood@xxxxxxxxx>, <linux-iio@xxxxxxxxxxxxxxx>, Linus Walleij <linus.walleij@xxxxxxxxxx>, Amit Kucheria <amitk@xxxxxxxxxx>, <alsa-devel@xxxxxxxxxxxxxxxx>, Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>, Sebastian Reichel <sre@xxxxxxxxxx>, <linux-phy@xxxxxxxxxxxxxxxxxxx>, Thierry Reding <thierry.reding@xxxxxxxxx>, <linux-mtd@xxxxxxxxxxxxxxxxxxx>, <linux-i2c@xxxxxxxxxxxxxxx>, <linux-gpio@xxxxxxxxxxxxxxx>, Miquel Raynal <miquel.raynal@xxxxxxxxxxx>, Guenter Roeck <groeck@xxxxxxxxxxxx>, Lee Jones <lee.jones@xxxxxxxxxx>, <openipmi-developer@xxxxxxxxxxxxxxxxxxxxx>, Saravanan Sekar <sravanhome@xxxxxxxxx>, Khuong Dinh <khuong@xxxxxxxxxxxxxxxxxxxxxx>, "Florian Fainelli" <f.fainelli@xxxxxxxxx>, Matthias Schiffer <matthias.schiffer@xxxxxxxxxxxxxxx>, <kvm@xxxxxxxxxxxxxxx>, Kamal Dasu <kdasu.kdev@xxxxxxxxx>, Richard Weinberger <richard@xxxxxx>, "Bartosz Golaszewski" <brgl@xxxxxxxx>, Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>, Kishon Vijay Abraham I <kishon@xxxxxx>, <bcm-kernel-feedback-list@xxxxxxxxxxxx>, <linux-serial@xxxxxxxxxxxxxxx>, Jakub Kicinski <kuba@xxxxxxxxxx>, Zhang Rui <rui.zhang@xxxxxxxxx>, "Jaroslav Kysela" <perex@xxxxxxxx>, <platform-driver-x86@xxxxxxxxxxxxxxx>, <linux-pwm@xxxxxxxxxxxxxxx>, John Garry <john.garry@xxxxxxxxxx>, "Robert Richter" <rric@xxxxxxxxxx>, Zha Qipeng <qipeng.zha@xxxxxxxxx>, Corey Minyard <minyard@xxxxxxx>, <linux-pm@xxxxxxxxxxxxxxx>, Peter Korsgaard <peter@xxxxxxxxxxxxx>, William Breathitt Gray <vilhelm.gray@xxxxxxxxx>, "Mark Gross" <markgross@xxxxxxxxxx>, Hans de Goede <hdegoede@xxxxxxxxxx>, "Alex Williamson" <alex.williamson@xxxxxxxxxx>, Mark Brown <broonie@xxxxxxxxxx>, Borislav Petkov <bp@xxxxxxxxx>, Matthias Brugger <matthias.bgg@xxxxxxxxx>, Takashi Iwai <tiwai@xxxxxxxx>, Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>, Benson Leung <bleung@xxxxxxxxxxxx>, <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx>, <linux-edac@xxxxxxxxxxxxxxx>, Tony Luck <tony.luck@xxxxxxxxx>, Mun Yew Tham <mun.yew.tham@xxxxxxxxx>, Eric Auger <eric.auger@xxxxxxxxxx>, <netdev@xxxxxxxxxxxxxxx>, Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx>, Cornelia Huck <cohuck@xxxxxxxxxx>, <linux-mmc@xxxxxxxxxxxxxxx>, Joakim Zhang <qiangqing.zhang@xxxxxxx>, <linux-spi@xxxxxxxxxxxxxxx>, <linux-renesas-soc@xxxxxxxxxxxxxxx>, Vinod Koul <vkoul@xxxxxxxxxx>, James Morse <james.morse@xxxxxxx>, "Pengutronix Kernel Team" <kernel@xxxxxxxxxxxxxx>, Niklas Söderlund <niklas.soderlund@xxxxxxxxxxxx>, <linux-mediatek@xxxxxxxxxxxxxxxxxxx>, "Brian Norris" <computersforpeace@xxxxxxxxx>, "David S. Miller" <davem@xxxxxxxxxxxxx>
- In-reply-to: <20220119150238.5sru3vtuwsswdnkx@pengutronix.de>
- Organization: Open Mobile Platform
- References: <20220110195449.12448-1-s.shtylyov@omp.ru> <20220110195449.12448-2-s.shtylyov@omp.ru> <770fb569-03c8-78f9-c174-94b31e866017@omp.ru> <20220119150238.5sru3vtuwsswdnkx@pengutronix.de>
- User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1
On 1/19/22 6:02 PM, Uwe Kleine-König wrote:
[...]
>>> This patch is based on the former Andy Shevchenko's patch:
>>>
>>> https://lore.kernel.org/lkml/20210331144526.19439-1-andriy.shevchenko@xxxxxxxxxxxxxxx/
>>>
>>> Currently platform_get_irq_optional() returns an error code even if IRQ
>>> resource simply has not been found. It prevents the callers from being
>>> error code agnostic in their error handling:
>>>
>>> ret = platform_get_irq_optional(...);
>>> if (ret < 0 && ret != -ENXIO)
>>> return ret; // respect deferred probe
>>> if (ret > 0)
>>> ...we get an IRQ...
>>>
>>> All other *_optional() APIs seem to return 0 or NULL in case an optional
>>> resource is not available. Let's follow this good example, so that the
>>> callers would look like:
>>>
>>> ret = platform_get_irq_optional(...);
>>> if (ret < 0)
>>> return ret;
>>> if (ret > 0)
>>> ...we get an IRQ...
>>>
>>> Reported-by: Matthias Schiffer <matthias.schiffer@xxxxxxxxxxxxxxx>
>>> Signed-off-by: Sergey Shtylyov <s.shtylyov@xxxxxx>
>> [...]
>>
>> Please don't merge this as yet, I'm going thru this patch once again
>> and have already found some sloppy code. :-/
>
> Who would you expect to merge this? I would have expected Greg, but he
Me too, it's his area, the message was addressed to Greg KH...
> seems to have given up this thread.
You instill too much uncertainty in him. :-)
>>> diff --git a/drivers/char/ipmi/bt-bmc.c b/drivers/char/ipmi/bt-bmc.c
>>> index 7450904e330a..fdc63bfa5be4 100644
>>> --- a/drivers/char/ipmi/bt-bmc.c
>>> +++ b/drivers/char/ipmi/bt-bmc.c
>>> @@ -382,12 +382,14 @@ static int bt_bmc_config_irq(struct bt_bmc *bt_bmc,
>>> bt_bmc->irq = platform_get_irq_optional(pdev, 0);
>>> if (bt_bmc->irq < 0)
>>> return bt_bmc->irq;
>>> + if (!bt_bmc->irq)
>>> + return 0;
>>
>> Hm, this is sloppy. Will recast and rebase to the -next branch.
>
> I didn't think about what you mean with sloppy, but the code is
> equivalent to
>
> if (bt_bmc->irq <= 0)
> return bt_bmc->irq;
Exactly.
[...]
>>> diff --git a/drivers/edac/xgene_edac.c b/drivers/edac/xgene_edac.c
>>> index 2ccd1db5e98f..0d1bdd27cd78 100644
>>> --- a/drivers/edac/xgene_edac.c
>>> +++ b/drivers/edac/xgene_edac.c
>>> @@ -1917,7 +1917,7 @@ static int xgene_edac_probe(struct platform_device *pdev)
>>>
>>> for (i = 0; i < 3; i++) {
>>> irq = platform_get_irq_optional(pdev, i);
>>
>> Is *_optinal() even correct here?
>
> _optinal isn't correct, _optional maybe is. :-)
No. :-)
> Anyhow, look at e26124cd5f7099949109608845bba9e9bf96599c, the driver was
> fixed not to print two error messages and the wrong option was picked.
I think this patch is wrong...
>>> - if (irq < 0) {
>>> + if (irq <= 0) {
>>> dev_err(&pdev->dev, "No IRQ resource\n");
This is what needed to be thrown overboard... :-)
>>> rc = -EINVAL;
>>> goto out_err;
>
> What's wrong here is that the return code is hardcoded ...
This is wrong as well -- kills the deferred probing. I have 2 separate patches
for this driver now... just need some time to get 'em ready...
[...]
>>> index bdf924b73e47..51289700a7ac 100644
>>> --- a/drivers/power/supply/mp2629_charger.c
>>> +++ b/drivers/power/supply/mp2629_charger.c
>>> @@ -581,9 +581,9 @@ static int mp2629_charger_probe(struct platform_device *pdev)
>>> platform_set_drvdata(pdev, charger);
>>>
>>> irq = platform_get_irq_optional(to_platform_device(dev->parent), 0);
>>
>> Again, is *_optional() even correct here?
>>
>>> - if (irq < 0) {
>>> + if (irq <= 0) {
>>> dev_err(dev, "get irq fail: %d\n", irq);
>>> - return irq;
>>> + return irq < 0 ? irq : -ENXIO;
>
> Ack, could be simplified by switching to platform_get_irq().
Have a draft patch...
> Best regards
> Uwe
MBR, Sergey
[Index of Archives]
[Linux Kernel]
[Linux ARM (vger)]
[Linux ARM MSM]
[Linux Omap]
[Linux Arm]
[Linux Tegra]
[Fedora ARM]
[Linux for Samsung SOC]
[eCos]
[Linux Fastboot]
[Gcc Help]
[Git]
[DCCP]
[IETF Announce]
[Security]
[Linux MIPS]
[Yosemite Campsites]
|