Message ID | 20230703090455.62101-1-frank.li@vivo.com (mailing list archive) |
---|---|
Headers | show |
Series | introduce devm_request_threaded_irq_emsg() | expand |
+cc u.kleine-koenig@pengutronix.de, krzysztof.kozlowski@linaro.org On 2023/7/3 17:04, Yangtao Li wrote: > There are more than 700 calls to the devm_request_threaded_irq method. > Most drivers only request one interrupt resource, and these error > messages are basically the same. If error messages are printed > everywhere, more than 1000 lines of code can be saved by removing the > msg in the driver. > > And tglx point out that: > > If we actually look at the call sites of > devm_request_threaded_irq() then the vast majority of them print more or > less lousy error messages. A quick grep/sed/awk/sort/uniq revealed > > 519 messages total (there are probably more) > > 352 unique messages > > 323 unique messages after lower casing > > Those 323 are mostly just variants of the same patterns with > slight modifications in formatting and information provided. > > 186 of these messages do not deliver any useful information, > e.g. "no irq", " > > The most useful one of all is: "could request wakeup irq: %d" > > So there is certainly an argument to be made that this particular > function should print a well formatted and informative error message. > > It's not a general allocator like kmalloc(). It's specialized and in the > vast majority of cases failing to request the interrupt causes the > device probe to fail. So having proper and consistent information why > the device cannot be used _is_ useful. > > So add devm_request_threaded_irq_emsg(), which ensure that all error > handling branches print error information. In this way, when this function > fails, the upper-layer functions can directly return an error code without > missing debugging information. Otherwise, the error message will be > printed redundantly or missing. > > Yangtao Li (5): > genirq/devres: Add devm_request_threaded_irq_emsg() > thermal/drivers/armada: convert to use > devm_request_threaded_irq_emsg() > thermal/drivers/brcmstb_thermal: convert to use > devm_request_threaded_irq_emsg() > thermal/drivers/db8500: convert to use > devm_request_threaded_irq_emsg() > thermal/drivers/mediatek/lvts_thermal: convert to use > devm_request_threaded_irq_emsg() > > drivers/thermal/armada_thermal.c | 13 +++---- > drivers/thermal/broadcom/brcmstb_thermal.c | 12 +++---- > drivers/thermal/db8500_thermal.c | 16 ++++----- > drivers/thermal/mediatek/lvts_thermal.c | 6 ++-- > include/linux/interrupt.h | 6 ++++ > kernel/irq/devres.c | 42 ++++++++++++++++++++++ > 6 files changed, 67 insertions(+), 28 deletions(-) >