Hi Uwe,
On Mon, Jan 17, 2022 at 6:06 PM Uwe Kleine-König u.kleine-koenig@pengutronix.de wrote:
On Mon, Jan 17, 2022 at 02:08:19PM +0100, Geert Uytterhoeven wrote:
On Mon, Jan 17, 2022 at 12:49 PM Uwe Kleine-König u.kleine-koenig@pengutronix.de wrote:
The logic in e.g. drivers/tty/serial/sh-sci.c and drivers/spi/spi-rspi.c could be simplified and improved (currently it doesn't handle deferred probe) if platform_get_irq_optional() would return 0 instead of -ENXIO.
Also for spi-rspi.c I don't see how platform_get_irq_byname_optional() returning 0 instead of -ENXIO would help. Please talk in patches.
[...]
This is not a simplification, just looking at the line count and the added gotos. That's because it also improves error handling and so the effect isn't easily spotted.
Yes, it's larger because it adds currently missing error handling.
What about the following idea (in pythonic pseudo code for simplicity):
No idea what you gain by throwing in a language that is irrelevant to kernel programming (why no Rust? ;-)
So there are three reasons: because the absence of an optional IRQ is not an error, and thus that should not cause (a) an error code to be returned, and (b) an error message to be printed, and (c) because it can simplify the logic in device drivers.
I don't agree to (a). If the value signaling not-found is -ENXIO or 0 (or -ENODEV) doesn't matter much. I wouldn't deviate from the return code semantics of platform_get_irq() just for having to check against 0 instead of -ENXIO. Zero is then just another magic value.
Zero is a natural magic value (also for pointers). Errors are always negative. Positive values are cookies (or pointers) associated with success.
Yeah, the issue where we don't agree is if "not-found" is special enough to deserve the natural magic value. For me -ENXIO is magic enough to handle the absence of an irq line. I consider it even the better magic value.
It differs from other subsystems (clk, gpio, reset), which do return zero on not found. What's the point in having *_optional() APIs if they just return the same values as the non-optional ones?
Gr{oetje,eeting}s,
Geert
-- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds