svn commit: r364310 - in head/sys: kern vm
Gleb Smirnoff
glebius at FreeBSD.org
Mon Aug 17 15:37:09 UTC 2020
Author: glebius
Date: Mon Aug 17 15:37:08 2020
New Revision: 364310
URL: https://svnweb.freebsd.org/changeset/base/364310
Log:
With INVARIANTS panic immediately if M_WAITOK is requested in a
non-sleepable context. Previously only _sleep() would panic.
This will catch misuse of M_WAITOK at development stage rather
than at stress load stage.
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D26027
Modified:
head/sys/kern/kern_malloc.c
head/sys/vm/uma_core.c
Modified: head/sys/kern/kern_malloc.c
==============================================================================
--- head/sys/kern/kern_malloc.c Mon Aug 17 15:11:46 2020 (r364309)
+++ head/sys/kern/kern_malloc.c Mon Aug 17 15:37:08 2020 (r364310)
@@ -618,6 +618,9 @@ void *
unsigned long osize = size;
#endif
+ KASSERT((flags & M_WAITOK) == 0 || THREAD_CAN_SLEEP(),
+ ("malloc(M_WAITOK) in non-sleepable context"));
+
#ifdef MALLOC_DEBUG
va = NULL;
if (malloc_dbg(&va, &size, mtp, flags) != 0)
Modified: head/sys/vm/uma_core.c
==============================================================================
--- head/sys/vm/uma_core.c Mon Aug 17 15:11:46 2020 (r364309)
+++ head/sys/vm/uma_core.c Mon Aug 17 15:37:08 2020 (r364310)
@@ -3328,6 +3328,9 @@ uma_zalloc_smr(uma_zone_t zone, int flags)
uma_cache_bucket_t bucket;
uma_cache_t cache;
+ KASSERT((flags & M_WAITOK) == 0 || THREAD_CAN_SLEEP(),
+ ("uma_zalloc_smr(M_WAITOK) in non-sleepable context"));
+
#ifdef UMA_ZALLOC_DEBUG
void *item;
@@ -3351,6 +3354,9 @@ uma_zalloc_arg(uma_zone_t zone, void *udata, int flags
{
uma_cache_bucket_t bucket;
uma_cache_t cache;
+
+ KASSERT((flags & M_WAITOK) == 0 || THREAD_CAN_SLEEP(),
+ ("uma_zalloc(M_WAITOK) in non-sleepable context"));
/* Enable entropy collection for RANDOM_ENABLE_UMA kernel option */
random_harvest_fast_uma(&zone, sizeof(zone), RANDOM_UMA);
More information about the svn-src-all
mailing list