lockmgr: upgrade panic return checks
We short-circuit lockmgr functions in the face of a kernel panic. Other lock implementations do this with a SCHEDULER_STOPPED() check, which covers the additional case where the debugger is active but the system has not panicked. Update this code to match that behaviour. Reviewed by: mjg, kib, markj MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D38655
This commit is contained in:
parent
624de4eca5
commit
9a7f7c26c5
@ -603,7 +603,7 @@ lockmgr_slock_hard(struct lock *lk, u_int flags, struct lock_object *ilk,
|
|||||||
#endif
|
#endif
|
||||||
struct lock_delay_arg lda;
|
struct lock_delay_arg lda;
|
||||||
|
|
||||||
if (KERNEL_PANICKED())
|
if (SCHEDULER_STOPPED())
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
tid = (uintptr_t)curthread;
|
tid = (uintptr_t)curthread;
|
||||||
@ -789,7 +789,7 @@ lockmgr_xlock_hard(struct lock *lk, u_int flags, struct lock_object *ilk,
|
|||||||
#endif
|
#endif
|
||||||
struct lock_delay_arg lda;
|
struct lock_delay_arg lda;
|
||||||
|
|
||||||
if (KERNEL_PANICKED())
|
if (SCHEDULER_STOPPED())
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
tid = (uintptr_t)curthread;
|
tid = (uintptr_t)curthread;
|
||||||
@ -985,7 +985,7 @@ lockmgr_upgrade(struct lock *lk, u_int flags, struct lock_object *ilk,
|
|||||||
int error = 0;
|
int error = 0;
|
||||||
int op;
|
int op;
|
||||||
|
|
||||||
if (KERNEL_PANICKED())
|
if (SCHEDULER_STOPPED())
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
tid = (uintptr_t)curthread;
|
tid = (uintptr_t)curthread;
|
||||||
@ -1046,7 +1046,7 @@ lockmgr_lock_flags(struct lock *lk, u_int flags, struct lock_object *ilk,
|
|||||||
u_int op;
|
u_int op;
|
||||||
bool locked;
|
bool locked;
|
||||||
|
|
||||||
if (KERNEL_PANICKED())
|
if (SCHEDULER_STOPPED())
|
||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
op = flags & LK_TYPE_MASK;
|
op = flags & LK_TYPE_MASK;
|
||||||
@ -1109,7 +1109,7 @@ lockmgr_sunlock_hard(struct lock *lk, uintptr_t x, u_int flags, struct lock_obje
|
|||||||
{
|
{
|
||||||
int wakeup_swapper = 0;
|
int wakeup_swapper = 0;
|
||||||
|
|
||||||
if (KERNEL_PANICKED())
|
if (SCHEDULER_STOPPED())
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
wakeup_swapper = wakeupshlk(lk, file, line);
|
wakeup_swapper = wakeupshlk(lk, file, line);
|
||||||
@ -1128,7 +1128,7 @@ lockmgr_xunlock_hard(struct lock *lk, uintptr_t x, u_int flags, struct lock_obje
|
|||||||
u_int realexslp;
|
u_int realexslp;
|
||||||
int queue;
|
int queue;
|
||||||
|
|
||||||
if (KERNEL_PANICKED())
|
if (SCHEDULER_STOPPED())
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
tid = (uintptr_t)curthread;
|
tid = (uintptr_t)curthread;
|
||||||
@ -1320,7 +1320,7 @@ __lockmgr_args(struct lock *lk, u_int flags, struct lock_object *ilk,
|
|||||||
int contested = 0;
|
int contested = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (KERNEL_PANICKED())
|
if (SCHEDULER_STOPPED())
|
||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
error = 0;
|
error = 0;
|
||||||
@ -1729,7 +1729,7 @@ _lockmgr_assert(const struct lock *lk, int what, const char *file, int line)
|
|||||||
{
|
{
|
||||||
int slocked = 0;
|
int slocked = 0;
|
||||||
|
|
||||||
if (KERNEL_PANICKED())
|
if (SCHEDULER_STOPPED())
|
||||||
return;
|
return;
|
||||||
switch (what) {
|
switch (what) {
|
||||||
case KA_SLOCKED:
|
case KA_SLOCKED:
|
||||||
|
Loading…
Reference in New Issue
Block a user