mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
LinuxKPI: avoid userret: Returning with with pinned thread
Some code manually calls local_bh_disable() and spin_lock() but
then calls spin_unlock_bh() (or vice versa).
Our code then calls local_bh_disable() again from spin_lock()
which means we have the thread pin count increased twice and that
means we get out of synch and are still pinned when returning to
user space.
Avoid this by adding the explicit local_bh_{enable,disable}() to
the spin_[un]lock_bh() versions.
Sponsored by: The FreeBSD Foundation
Reviewed by: hselasky
Differential Revision: https://reviews.freebsd.org/D30711
(cherry picked from commit 46ae23a402)
This commit is contained in:
parent
d2c8c4d15a
commit
f9fa2908cf
1 changed files with 2 additions and 0 deletions
|
|
@ -66,6 +66,7 @@ typedef struct {
|
|||
|
||||
#define spin_lock_bh(_l) do { \
|
||||
spin_lock(_l); \
|
||||
local_bh_disable(); \
|
||||
} while (0)
|
||||
|
||||
#define spin_lock_irq(_l) do { \
|
||||
|
|
@ -80,6 +81,7 @@ typedef struct {
|
|||
} while (0)
|
||||
|
||||
#define spin_unlock_bh(_l) do { \
|
||||
local_bh_enable(); \
|
||||
spin_unlock(_l); \
|
||||
} while (0)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue