Messages in this thread | | | Subject | Re: [patch 3/8] x86/apic: Provide apic_ack_irq() | From | Dou Liyang <> | Date | Wed, 6 Jun 2018 11:48:55 +0800 |
| |
Hi Thomas,
At 06/05/2018 07:41 PM, Thomas Gleixner wrote: > On Tue, 5 Jun 2018, Dou Liyang wrote: >>> +{ >>> + if (unlikely(irqd_is_setaffinity_pending(irqd))) >> >> Affinity pending is also judged in >> >>> + irq_move_irq(irqd); >> >> If we can remove the if(...) statement here > > That requires to fix all call sites in ia64 and that's why I didn't. But
I didn't express clearly, I meant remove the if(...) statement from apic_ack_irq(), it doesn't require to fix the call sites in ia64.
+void apic_ack_irq(struct irq_data *irqd) +{ + irq_move_irq(irqd); + ack_APIC_irq(); +}
BTW, If apic_ack_irq() can accept _any_ irq_data when hierarchical irqdomains are enabled[1]? If it is true, If there is a situation in the original code that we should avoid:
If the top-level irq_data has the IRQD_SETAFFINITY_PENDING state, but non-top-level irq_data state not, when using non-top-level irq_data in apic_ack_irq(), we may skip the irq_move_irq() which we should call.
[1] commit 77ed42f18edd("genirq: Prevent crash in irq_move_irq()")
> we can make irq_move_irq() an inline function and have the check in the > inline. >
I don't know why do we need to make irq_move_irq() an inline function.
And, yes, irq_move_irq() has already had the check
... if (likely(!irqd_is_setaffinity_pending(idata))) return; ...
Thanks, dou
| |