diff options
| author | Breno Leitao <leitao@debian.org> | 2026-06-16 05:09:35 -0700 |
|---|---|---|
| committer | Ard Biesheuvel <ardb@kernel.org> | 2026-08-20 14:45:04 +0300 |
| commit | ecbccdbdab5d31e1e465e3f789d57bb34e5452cd (patch) | |
| tree | 073a19c95934d300d29f09418c624e6425841f47 /drivers | |
| parent | 718ee46ba4d95d28d50d3f6437afbbe2be531175 (diff) | |
efi/runtime-wrappers: factor out efi_rts_park_worker()
x86's efi_crash_gracefully_on_page_fault() ends in an infinite
schedule() loop so the kworker that faulted in firmware never runs
efi_rts_wq again. A later change needs the same "park this worker
forever" primitive on the runtime service timeout path, so factor the
loop into a shared efi_rts_park_worker() and call it from the x86
page-fault handler.
No functional change.
Signed-off-by: Breno Leitao <leitao@debian.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/firmware/efi/runtime-wrappers.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c index da8d29621644..dc2e5c370edc 100644 --- a/drivers/firmware/efi/runtime-wrappers.c +++ b/drivers/firmware/efi/runtime-wrappers.c @@ -202,7 +202,7 @@ void efi_call_virt_check_flags(unsigned long flags, const void *caller) */ static DEFINE_SEMAPHORE(efi_runtime_lock, 1); -static struct task_struct *efi_runtime_lock_owner; +static struct task_struct *efi_runtime_lock_owner __used; /* * Expose the EFI runtime lock to the UV platform @@ -212,6 +212,19 @@ extern struct semaphore __efi_uv_runtime_lock __alias(efi_runtime_lock); #endif /* + * Park a worker that must never run efi_rts_wq again: EFI runtime services + * have been disabled and its efi_rts_work is abandoned. Loop in schedule() + * so a spurious wakeup cannot resume it. + */ +void __noreturn efi_rts_park_worker(void) +{ + for (;;) { + set_current_state(TASK_IDLE); + schedule(); + } +} + +/* * Calls the appropriate efi_runtime_service() with the appropriate * arguments. */ |
