On 2020-10-26 20:15:23 [+0100], Mike Galbraith wrote: > --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c > +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c > @@ -116,7 +116,17 @@ nvkm_pci_oneinit(struct nvkm_subdev *sub > return ret; > } > > + /* > + * Scheduler code taking cpuset_rwsem during irq thread initialization sets > + * up a cpuset_rwsem vs mm->mmap_lock circular dependency gripe upon later > + * cpuset usage. It's harmless, tell lockdep there's nothing to see here. > + */ > + if (force_irqthreads) > + lockdep_off(); > ret = request_irq(pdev->irq, nvkm_pci_intr, IRQF_SHARED, "nvkm", pci); > + if (force_irqthreads) > + lockdep_on(); > + > if (ret) > return ret; > Could you try this, please? --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -1155,6 +1155,8 @@ static int irq_thread(void *data) irqreturn_t (*handler_fn)(struct irq_desc *desc, struct irqaction *action); + sched_set_fifo(current); + if (force_irqthreads && test_bit(IRQTF_FORCED_THREAD, &action->thread_flags)) handler_fn = irq_forced_thread_fn; @@ -1320,8 +1322,6 @@ setup_irq_thread(struct irqaction *new, if (IS_ERR(t)) return PTR_ERR(t); - sched_set_fifo(t); - /* * We keep the reference to the task struct even if * the thread dies to avoid that the interrupt code Sebastian