Skip to content

Commit 2d7a346

Browse files
committed
i915: Enable preemption for schedule_timeout call in intel_vblank_evade
Fixes following panic: panic: mi_switch: switch in a critical section cpuid = 0 time = 1755345737 KDB: stack backtrace: db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01121f4620 vpanic() at vpanic+0x136/frame 0xfffffe01121f4750 panic() at panic+0x43/frame 0xfffffe01121f47b0 mi_switch() at mi_switch+0x1b7/frame 0xfffffe01121f47d0 sleepq_switch() at sleepq_switch+0x109/frame 0xfffffe01121f4810 sleepq_timedwait() at sleepq_timedwait+0x4b/frame 0xfffffe01121f4850 linux_add_to_sleepqueue() at linux_add_to_sleepqueue+0xf1/frame 0xfffffe01121f48a0 linux_schedule_timeout() at linux_schedule_timeout+0x6a/frame 0xfffffe01121f48d0 intel_vblank_evade() at intel_vblank_evade+0x147/frame 0xfffffe01121f4940 intel_legacy_cursor_update() at intel_legacy_cursor_update+0x2d8/frame 0xfffffe01121f49e0 drm_mode_cursor_common() at drm_mode_cursor_common+0x38f/frame 0xfffffe01121f4b10 drm_mode_cursor_ioctl() at drm_mode_cursor_ioctl+0x36/frame 0xfffffe01121f4b50 drm_ioctl_kernel() at drm_ioctl_kernel+0xa3/frame 0xfffffe01121f4b90 drm_ioctl() at drm_ioctl+0x2de/frame 0xfffffe01121f4c80 linux_file_ioctl() at linux_file_ioctl+0x301/frame 0xfffffe01121f4ce0 kern_ioctl() at kern_ioctl+0x286/frame 0xfffffe01121f4d40 sys_ioctl() at sys_ioctl+0x12f/frame 0xfffffe01121f4e00 amd64_syscall() at amd64_syscall+0x169/frame 0xfffffe01121f4f30 fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01121f4f30
1 parent e057327 commit 2d7a346

1 file changed

Lines changed: 4 additions & 0 deletions

File tree

drivers/gpu/drm/i915/display/intel_vblank.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,12 +684,16 @@ int intel_vblank_evade(struct intel_vblank_evade_ctx *evade)
684684

685685
#ifdef __linux__
686686
local_irq_enable();
687+
#elif defined(__FreeBSD__)
688+
preempt_enable();
687689
#endif
688690

689691
timeout = schedule_timeout(timeout);
690692

691693
#ifdef __linux__
692694
local_irq_disable();
695+
#elif defined(__FreeBSD__)
696+
preempt_disable();
693697
#endif
694698
}
695699

0 commit comments

Comments
 (0)