Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fix from Thomas Gleixner:
"Fix for a regression caused by the conversion of x86 to the generic
hotplug code.

Instead of doing a plain single line revert, this adds a pile of
comments so the semantics of the force argument are clear"

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
genirq/cpuhotplug: Revert "Set force affinity flag on hotplug migration"

Changed files
+13 -3
include
linux
kernel
+6 -1
include/linux/irq.h
··· 388 388 * @irq_mask_ack: ack and mask an interrupt source 389 389 * @irq_unmask: unmask an interrupt source 390 390 * @irq_eoi: end of interrupt 391 - * @irq_set_affinity: set the CPU affinity on SMP machines 391 + * @irq_set_affinity: Set the CPU affinity on SMP machines. If the force 392 + * argument is true, it tells the driver to 393 + * unconditionally apply the affinity setting. Sanity 394 + * checks against the supplied affinity mask are not 395 + * required. This is used for CPU hotplug where the 396 + * target CPU is not yet set in the cpu_online_mask. 392 397 * @irq_retrigger: resend an IRQ to the CPU 393 398 * @irq_set_type: set the flow type (IRQ_TYPE_LEVEL/etc.) of an IRQ 394 399 * @irq_set_wake: enable/disable power-management wake-on of an IRQ
+7 -2
kernel/irq/cpuhotplug.c
··· 95 95 affinity = cpu_online_mask; 96 96 brokeaff = true; 97 97 } 98 - 99 - err = irq_do_set_affinity(d, affinity, true); 98 + /* 99 + * Do not set the force argument of irq_do_set_affinity() as this 100 + * disables the masking of offline CPUs from the supplied affinity 101 + * mask and therefore might keep/reassign the irq to the outgoing 102 + * CPU. 103 + */ 104 + err = irq_do_set_affinity(d, affinity, false); 100 105 if (err) { 101 106 pr_warn_ratelimited("IRQ%u: set affinity failed(%d).\n", 102 107 d->irq, err);