Pull up following revision(s) (requested by riastradh in ticket #1801):

sys/net/route.c: revision 1.236

route(4): Work around deadlock in rt_free wait path.
PR kern/56844
This commit is contained in:
martin 2023-02-22 18:55:06 +00:00
parent 9e910f00b2
commit b057c7015e
1 changed files with 12 additions and 3 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: route.c,v 1.194.6.15 2019/10/04 11:26:35 martin Exp $ */
/* $NetBSD: route.c,v 1.194.6.16 2023/02/22 18:55:06 martin Exp $ */
/*-
* Copyright (c) 1998, 2008 The NetBSD Foundation, Inc.
@ -97,7 +97,7 @@
#endif
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.194.6.15 2019/10/04 11:26:35 martin Exp $");
__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.194.6.16 2023/02/22 18:55:06 martin Exp $");
#include <sys/param.h>
#ifdef RTFLUSH_DEBUG
@ -644,8 +644,17 @@ static bool
rt_wait_ok(void)
{
/*
* This originally returned !cpu_softintr_p(), but that doesn't
* work: the caller may hold a lock (probably softnet lock)
* that a softint is waiting for, in which case waiting here
* would cause a deadlock. See https://gnats.netbsd.org/56844
* for details. For now, until the locking paths are sorted
* out, we just disable the waiting option altogether and
* always defer to workqueue.
*/
KASSERT(!cpu_intr_p());
return !cpu_softintr_p();
return false;
}
void