Displaying 4 results from an estimated 4 matches for "wq_max_active".
2024 Feb 22
1
[PATCH] drm/nouveau: use dedicated wq for fence uevents work
Using the kernel global workqueue to signal fences can lead to
unexpected deadlocks. Some other work (e.g. from a different driver)
could directly or indirectly depend on this fence to be signaled.
However, if the WQ_MAX_ACTIVE limit is reached by waiters, this can
prevent the work signaling the fence from running.
While this seems fairly unlikely, it's potentially exploitable.
Fixes: 39126abc5e20 ("nouveau: offload fence uevents work to workqueue")
Signed-off-by: Danilo Krummrich <dakr at redhat.com>...
2024 Feb 23
1
[PATCH] drm/nouveau: use dedicated wq for fence uevents work
...h <dakr at redhat.com> wrote:
> >
> > Using the kernel global workqueue to signal fences can lead to
> > unexpected deadlocks. Some other work (e.g. from a different driver)
> > could directly or indirectly depend on this fence to be signaled.
> > However, if the WQ_MAX_ACTIVE limit is reached by waiters, this can
> > prevent the work signaling the fence from running.
> >
> > While this seems fairly unlikely, it's potentially exploitable.
>
> LGTM
>
> Reviewed-by: Dave Airlie <airlied at redhat.com>
>
> probably should go...
2024 Feb 16
1
[PATCH] nouveau: offload fence uevents work to workqueue
...t; > drivers / kernel code that, by chance, makes use of the kernel global wq as
> > > > > > > well.
> > > > > > >
> > > > > > > Admittedly, even if, it's gonna be extremely unlikely given that
> > > > > > > WQ_MAX_ACTIVE == 512. But maybe it'd be safer to use a dedicated wq.
> > > > > > >
> > > > > > > Also, do we need to CC stable?
> > > > > >
> > > > > > I pushed this to Linus at the end of last week, since the hangs in 6.7
> &...
2025 Jan 22
5
[PATCH] drm/sched: Use struct for drm_sched_init() params
...tity *entity = &sched->entity;
- const long timeout = msecs_to_jiffies(NOUVEAU_SCHED_JOB_TIMEOUT_MS);
+ struct drm_sched_init_params params;
int ret;
+ memset(¶ms, 0, sizeof(struct drm_sched_init_params));
+
if (!wq) {
wq = alloc_workqueue("nouveau_sched_wq_%d", 0, WQ_MAX_ACTIVE,
current->pid);
@@ -416,10 +418,18 @@ nouveau_sched_init(struct nouveau_sched *sched, struct nouveau_drm *drm,
sched->wq = wq;
}
- ret = drm_sched_init(drm_sched, &nouveau_sched_ops, wq,
- NOUVEAU_SCHED_PRIORITY_COUNT,
- credit_limit, 0, timeout,
- NU...