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

Reply via email to