From d53ecb9f8468a56cdc3909bc769d0da2a91be384 Mon Sep 17 00:00:00 2001 From: jhb Date: Mon, 20 May 2002 17:54:48 +0000 Subject: In uma_zalloc_arg(), if we are performing a M_WAITOK allocation, ensure that td_intr_nesting_level is 0 (like malloc() does). Since malloc() calls uma we can probably remove the check in malloc() for this now. Also, perform an extra witness check in that case to make sure we don't hold any locks when performing a M_WAITOK allocation. --- sys/vm/uma_core.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index df79668..c6924b0 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -66,6 +66,7 @@ #include #include #include +#include #include #include @@ -1317,6 +1318,12 @@ uma_zalloc_arg(uma_zone_t zone, void *udata, int flags) printf("Allocating one item from %s(%p)\n", zone->uz_name, zone); #endif + if (!(flags & M_NOWAIT)) { + KASSERT(curthread->td_intr_nesting_level == 0, + ("malloc(M_WAITOK) in interrupt context")); + WITNESS_SLEEP(1, NULL); + } + zalloc_restart: cpu = PCPU_GET(cpuid); CPU_LOCK(zone, cpu); -- cgit v1.1