our 5.10 drm used (via a task) by changing from timeout_set() to
timeout_set_proc()
irq work is supposed to be in interrupt context but some path used on
inteldrm with gen 9 graphics sleeps.
Reported by Agnosto Dvonik on kaby lake and jcs@ and aja@ on comet lake.
For Agnosto Dvonik this occured when running firefox or mpv, for jcs@
when playing a video in firefox, for aja@ after 5 min of running gnome.
aja@ has run gnome for many hours with this change without problem.
-/* $OpenBSD: irq_work.h,v 1.6 2022/01/14 06:53:14 jsg Exp $ */
+/* $OpenBSD: irq_work.h,v 1.7 2022/01/17 12:42:30 jsg Exp $ */
/*
* Copyright (c) 2015 Mark Kettenis
*
static inline void
init_irq_work(struct irq_work *work, irq_work_func_t func)
{
- timeout_set(&work->to, (void (*)(void *))func, work);
+ /* process context as intel gen 9 sleeps in irq work */
+ timeout_set_proc(&work->to, (void (*)(void *))func, work);
}
static inline bool