2024-05-06 13:03:16

by Jinjie Ruan

[permalink] [raw]
Subject: [PATCH] genirq: Simplify the check for __irq_get_desc_lock()

If it set "_IRQ_DESC_PERCPU" in "check" but the desc is not percpu, or if
the desc is percpu but it not set "_IRQ_DESC_PERCPU" in "check", it both
return NULL, so simplify the check in __irq_get_desc_lock() with "!=".

Signed-off-by: Jinjie Ruan <[email protected]>
---
kernel/irq/irqdesc.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
index 88ac3652fcf2..6c52deb134b9 100644
--- a/kernel/irq/irqdesc.c
+++ b/kernel/irq/irqdesc.c
@@ -882,11 +882,7 @@ __irq_get_desc_lock(unsigned int irq, unsigned long *flags, bool bus,

if (desc) {
if (check & _IRQ_DESC_CHECK) {
- if ((check & _IRQ_DESC_PERCPU) &&
- !irq_settings_is_per_cpu_devid(desc))
- return NULL;
-
- if (!(check & _IRQ_DESC_PERCPU) &&
+ if (!!(check & _IRQ_DESC_PERCPU) !=
irq_settings_is_per_cpu_devid(desc))
return NULL;
}
--
2.34.1



2024-05-06 17:55:25

by Thomas Gleixner

[permalink] [raw]
Subject: Re: [PATCH] genirq: Simplify the check for __irq_get_desc_lock()

On Mon, May 06 2024 at 20:50, Jinjie Ruan wrote:

> If it set "_IRQ_DESC_PERCPU" in "check" but the desc is not percpu, or if
> the desc is percpu but it not set "_IRQ_DESC_PERCPU" in "check", it both
> return NULL, so simplify the check in __irq_get_desc_lock() with "!=".

What is exactly simplified here?

> Signed-off-by: Jinjie Ruan <[email protected]>
> ---
> kernel/irq/irqdesc.c | 6 +-----
> 1 file changed, 1 insertion(+), 5 deletions(-)
>
> diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
> index 88ac3652fcf2..6c52deb134b9 100644
> --- a/kernel/irq/irqdesc.c
> +++ b/kernel/irq/irqdesc.c
> @@ -882,11 +882,7 @@ __irq_get_desc_lock(unsigned int irq, unsigned long *flags, bool bus,
>
> if (desc) {
> if (check & _IRQ_DESC_CHECK) {
> - if ((check & _IRQ_DESC_PERCPU) &&
> - !irq_settings_is_per_cpu_devid(desc))
> - return NULL;
> -
> - if (!(check & _IRQ_DESC_PERCPU) &&
> + if (!!(check & _IRQ_DESC_PERCPU) !=
> irq_settings_is_per_cpu_devid(desc))
> return NULL;

The existing code is readable and obvious. This is not.

Thanks,

tglx

2024-05-07 01:16:21

by Jinjie Ruan

[permalink] [raw]
Subject: Re: [PATCH] genirq: Simplify the check for __irq_get_desc_lock()



On 2024/5/7 1:55, Thomas Gleixner wrote:
> On Mon, May 06 2024 at 20:50, Jinjie Ruan wrote:
>
>> If it set "_IRQ_DESC_PERCPU" in "check" but the desc is not percpu, or if
>> the desc is percpu but it not set "_IRQ_DESC_PERCPU" in "check", it both
>> return NULL, so simplify the check in __irq_get_desc_lock() with "!=".
>
> What is exactly simplified here?
>
>> Signed-off-by: Jinjie Ruan <[email protected]>
>> ---
>> kernel/irq/irqdesc.c | 6 +-----
>> 1 file changed, 1 insertion(+), 5 deletions(-)
>>
>> diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
>> index 88ac3652fcf2..6c52deb134b9 100644
>> --- a/kernel/irq/irqdesc.c
>> +++ b/kernel/irq/irqdesc.c
>> @@ -882,11 +882,7 @@ __irq_get_desc_lock(unsigned int irq, unsigned long *flags, bool bus,
>>
>> if (desc) {
>> if (check & _IRQ_DESC_CHECK) {
>> - if ((check & _IRQ_DESC_PERCPU) &&
>> - !irq_settings_is_per_cpu_devid(desc))
>> - return NULL;
>> -
>> - if (!(check & _IRQ_DESC_PERCPU) &&
>> + if (!!(check & _IRQ_DESC_PERCPU) !=
>> irq_settings_is_per_cpu_devid(desc))
>> return NULL;
>
> The existing code is readable and obvious. This is not.

Thank you for your review. The existing code is indeed clear, but it
seems that both judgments are checking whether the percpu flags are
consistent.

>
> Thanks,
>
> tglx

2024-05-07 10:20:58

by Thomas Gleixner

[permalink] [raw]
Subject: Re: [PATCH] genirq: Simplify the check for __irq_get_desc_lock()

On Tue, May 07 2024 at 09:16, Jinjie Ruan wrote:
> On 2024/5/7 1:55, Thomas Gleixner wrote:
>>> if (desc) {
>>> if (check & _IRQ_DESC_CHECK) {
>>> - if ((check & _IRQ_DESC_PERCPU) &&
>>> - !irq_settings_is_per_cpu_devid(desc))
>>> - return NULL;
>>> -
>>> - if (!(check & _IRQ_DESC_PERCPU) &&
>>> + if (!!(check & _IRQ_DESC_PERCPU) !=
>>> irq_settings_is_per_cpu_devid(desc))
>>> return NULL;
>>
>> The existing code is readable and obvious. This is not.
>
> Thank you for your review. The existing code is indeed clear, but it
> seems that both judgments are checking whether the percpu flags are
> consistent.

The code checks whether the descriptor is marked as per CPU devid if and
only if the caller requested it.

As the code exactly doing that, what is the point of changing it to
something incomprehensible?

Thanks,

tglx