On 19.06.2024 11:58, Roger Pau Monne wrote: > fixup_irqs() is used to evacuate interrupts from to be offlined CPUs. Given > the CPU is to become offline, the normal migration logic used by Xen where the > vector in the previous target(s) is left configured until the interrupt is > received on the new destination is not suitable. > > Instead attempt to do as much as possible in order to prevent loosing > interrupts. If fixup_irqs() is called from the CPU to be offlined (as is > currently the case for CPU hot unplug) attempt to forward pending vectors when > interrupts that target the current CPU are migrated to a different > destination. > > Additionally, for interrupts that have already been moved from the current CPU > prior to the call to fixup_irqs() but that haven't been delivered to the new > destination (iow: interrupts with move_in_progress set and the current CPU set > in ->arch.old_cpu_mask) also check whether the previous vector is pending and > forward it to the new destination. > > This allows us to remove the window with interrupts enabled at the bottom of > fixup_irqs(). Such window wasn't safe anyway: references to the CPU to become > offline are removed from interrupts masks, but the per-CPU vector_irq[] array > is not updated to reflect those changes (as the CPU is going offline anyway). > > Signed-off-by: Roger Pau Monné <roger....@citrix.com>
Reviewed-by: Jan Beulich <jbeul...@suse.com>