Messages in this thread | | | Date | Thu, 1 Oct 2015 23:45:23 +0200 (CEST) | From | Thomas Gleixner <> | Subject | Re: CPU hotplug and chained interrupts on x86 |
| |
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.
Thanks,
tglx
| |