irq_set_thread_affinity() calls set_cpus_allowed_ptr() which might sleep, but irq_set_thread_affinity() is called with desc->lock held and can be called from hard interrupt context as well. The code has another bug as it does not hold a ref on the task struct as required by set_cpus_allowed_ptr(). Just set the IRQTF_AFFINITY bit in action->thread_flags. The next time the thread runs it migrates itself. Solves all of the above problems nicely. Add kerneldoc to irq_set_thread_affinity() while at it. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> LKML-Reference: <new-submission> |
||
|---|---|---|
| .. | ||
| autoprobe.c | ||
| chip.c | ||
| devres.c | ||
| handle.c | ||
| internals.h | ||
| Makefile | ||
| manage.c | ||
| migration.c | ||
| numa_migrate.c | ||
| pm.c | ||
| proc.c | ||
| resend.c | ||
| spurious.c | ||