Messages in this thread | | | Date | Fri, 2 Oct 2015 07:58:39 +0300 | From | Mika Westerberg <> | Subject | Re: CPU hotplug and chained interrupts on x86 |
| |
On Thu, Oct 01, 2015 at 11:45:23PM +0200, Thomas Gleixner wrote: > On Thu, 1 Oct 2015, Thomas Gleixner wrote: > > On Thu, 1 Oct 2015, Mika Westerberg wrote: > > > Now if I plug/unplug the card I may get few interrupts to CPU0 but rest > > > of the interrupts never happen. Probably because IO-APIC forwards them > > > to the lowest priority CPU which is offline at this point. > > > > > > There is following check in fixup_irqs(): > > > > > > if (!irq_has_action(irq) || irqd_is_per_cpu(data) || > > > cpumask_subset(affinity, cpu_online_mask)) { > > > raw_spin_unlock(&desc->lock); > > > continue; > > > } > > > > > > If an interrupt is requested by a driver it will force new affinity and > > > everything works fine. However if the interrupt is chained (it does not > > > have ->action) this is skipped and the current affinity remains. > > > > > > We could detect here if the interrupt is chained but there seems to be > > > no easy way to determine it currently so we would need to add a new flag > > > to desc->status_use_accessors that gets set in __irq_do_set_handler() > > > when is_chained is 1. > > > > Either there or in irq_data. Need to look at it in detail. > > desc->status_use_accessors is the place where this wants to go.
Thank you.
I'll prepare a patch fixing this shortly.
| |