Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

irqdomain: Check virq for 0 before use in irq_dispose_mapping()

It's a bit hard to read the logic since the virq is used before checking it
for 0. Rearrange the code to make it better to understand.

This, in particular, should clearly answer the question whether the caller
needs to perform this check or not, and there are plenty of places for both
variants, confirming a confusion.

Fun fact that the new code is shorter:

Function old new delta
irq_dispose_mapping 278 271 -7
Total: Before=11625, After=11618, chg -0.06%

when compiled by GCC on Debian for x86_64.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20240405190105.3932034-1-andriy.shevchenko@linux.intel.com

authored by

Andy Shevchenko and committed by
Thomas Gleixner
a2ea3cd7 7b6f0f27

+3 -2
+3 -2
kernel/irq/irqdomain.c
··· 909 909 */ 910 910 void irq_dispose_mapping(unsigned int virq) 911 911 { 912 - struct irq_data *irq_data = irq_get_irq_data(virq); 912 + struct irq_data *irq_data; 913 913 struct irq_domain *domain; 914 914 915 - if (!virq || !irq_data) 915 + irq_data = virq ? irq_get_irq_data(virq) : NULL; 916 + if (!irq_data) 916 917 return; 917 918 918 919 domain = irq_data->domain;