+6
-1
include/linux/irq.h
+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
+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);