Kernel oops for final intel_wakeref_put from inside worker
I just got the following kernel oops on a 5.4 kernel while doing nothing interesting:
BUG: unable to handle page fault for address: ffffffff84abf450
#PF: supervisor instruction fetch in kernel mode
#PF: error_code(0x0010) - not-present page
PGD 4d420e067 P4D 4d420e067 PUD 4d420f063 PMD 0
Oops: 0010 [#1] SMP
CPU: 11 PID: 1114 Comm: kworker/11:3 Tainted: P U O 5.4.0-18-generic #22
Hardware name: Dell Inc. Precision 5540/0FMYX6, BIOS 1.5.0 12/25/2019
Workqueue: events __intel_wakeref_put_work [i915]
RIP: 0010:0xffffffff84abf450
Code: Bad RIP value.
RSP: 0018:ffffad7380757cc0 EFLAGS: 00010246
RAX: 0000000000000000 RBX: ffff89ebc46a6d98 RCX: 0000000000000000
RDX: 0000000000000001 RSI: 0000000000000001 RDI: ffff89ebc46a6d98
RBP: ffffad7380757d40 R08: ffff89ebd88eeb58 R09: ffff89ebd88eec28
R10: 0000000000000000 R11: ffffffffac065868 R12: ffff89ebc46a6d98
R13: 0000000000000000 R14: 0000000000000001 R15: ffff89ebd00283c0
FS: 0000000000000000(0000) GS:ffff89ebdc2c0000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: ffffffff84abf426 CR3: 00000004d420a002 CR4: 00000000003606e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
? __flush_work+0x51/0x1d0
? wake_up_process+0x15/0x20
__cancel_work_timer+0x10e/0x190
? _cond_resched+0x19/0x30
? synchronize_irq+0x3e/0xb0
cancel_work_sync+0x10/0x20
gen6_disable_rps_interrupts+0xa0/0xd0 [i915]
gen6_rps_idle+0x1f/0xf0 [i915]
__gt_park+0x93/0xa0 [i915]
____intel_wakeref_put_last+0x1f/0x50 [i915]
__intel_wakeref_put_work+0x37/0x40 [i915]
process_one_work+0x1eb/0x3b0
worker_thread+0x4d/0x400
kthread+0x104/0x140
? process_one_work+0x3b0/0x3b0
? kthread_park+0x90/0x90
ret_from_fork+0x1f/0x40