Page MenuHomeFreeBSD

LinuxKPI: Allow wake_up to be executed within a critical section
ClosedPublic

Authored by wulf on Jan 13 2022, 11:49 PM.
Tags
None
Referenced Files
Unknown Object (File)
Oct 5 2024, 4:58 PM
Unknown Object (File)
Oct 5 2024, 7:52 AM
Unknown Object (File)
Oct 3 2024, 5:27 PM
Unknown Object (File)
Oct 3 2024, 5:24 PM
Unknown Object (File)
Oct 3 2024, 3:29 PM
Unknown Object (File)
Oct 2 2024, 8:48 PM
Unknown Object (File)
Oct 2 2024, 6:32 PM
Unknown Object (File)
Oct 2 2024, 2:08 PM

Details

Summary

by replaceing of spin_lock() call with spin_lock_irqsave()

This fixes following panic in drm-kmod:

panic: mi_switch: switch in a critical section
cpuid = 2
time = 1636939794
KDB: stack backtrace:
db_trace_self_wrapper() at db_trace_self_wrapper+0x2b
vpanic() at vpanic+0x187
panic() at panic+0x43
mi_switch() at mi_switch+0x198
mtx_lock_sleep() at mtx_lock_sleep+0x1c9
mtx_lock_flags() at mtx_lock_flags+0xa2
linux_wake_up() at linux_wake_up+0x38
active_retire() at active_retire+0xb7
dma_fence_signal() at dma_fence_signal+0x100
dma_resv_add_shared_fence() at dma_resv_add_shared_fence+0x96
i915_gem_do_execbuffer() at i915_gem_do_execbuffer+0x11d0
i915_gem_execbuffer2_ioctl() at i915_gem_execbuffer2_ioctl+0x19a
drm_ioctl_kernel() at drm_ioctl_kernel+0x72
drm_ioctl() at drm_ioctl+0x2c4
linux_file_ioctl() at linux_file_ioctl+0x297
kern_ioctl() at kern_ioctl+0x1dc
sys_ioctl() at sys_ioctl+0x124
amd64_syscall() at amd64_syscall+0x124
fast_syscall_common() at fast_syscall_common+0xf8

  • syscall (54, FreeBSD ELF64, sys_ioctl)

MFC after: 1 week

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 43916
Build 40804: arc lint + arc unit