Add a MUTEX_NODEBUG type that avoids allocating debugging resources for

the lock. To be used for e.g. struct vm_page until a better way is found.
This commit is contained in:
ad 2007-03-10 16:01:13 +00:00
parent 64e54fbb70
commit b1da576054
2 changed files with 15 additions and 5 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: kern_mutex.c,v 1.10 2007/03/09 14:08:26 ad Exp $ */ /* $NetBSD: kern_mutex.c,v 1.11 2007/03/10 16:01:13 ad Exp $ */
/*- /*-
* Copyright (c) 2002, 2006, 2007 The NetBSD Foundation, Inc. * Copyright (c) 2002, 2006, 2007 The NetBSD Foundation, Inc.
@ -49,7 +49,7 @@
#define __MUTEX_PRIVATE #define __MUTEX_PRIVATE
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.10 2007/03/09 14:08:26 ad Exp $"); __KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.11 2007/03/10 16:01:13 ad Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/proc.h> #include <sys/proc.h>
@ -313,6 +313,11 @@ mutex_init(kmutex_t *mtx, kmutex_type_t type, int ipl)
type = (ipl == IPL_NONE ? MUTEX_ADAPTIVE : MUTEX_SPIN); type = (ipl == IPL_NONE ? MUTEX_ADAPTIVE : MUTEX_SPIN);
switch (type) { switch (type) {
case MUTEX_NODEBUG:
KASSERT(ipl == IPL_NONE);
id = LOCKDEBUG_ALLOC(mtx, NULL);
MUTEX_INITIALIZE_ADAPTIVE(mtx, id);
break;
case MUTEX_ADAPTIVE: case MUTEX_ADAPTIVE:
case MUTEX_DEFAULT: case MUTEX_DEFAULT:
KASSERT(ipl == IPL_NONE); KASSERT(ipl == IPL_NONE);
@ -687,7 +692,7 @@ mutex_vector_exit(kmutex_t *mtx)
return; return;
} }
if (__predict_false(panicstr != NULL) || __predict_false(cold)) { if (__predict_false((uintptr_t)panicstr | cold)) {
MUTEX_UNLOCKED(mtx); MUTEX_UNLOCKED(mtx);
MUTEX_RELEASE(mtx); MUTEX_RELEASE(mtx);
return; return;

View File

@ -1,4 +1,4 @@
/* $NetBSD: mutex.h,v 1.8 2007/03/09 04:50:36 thorpej Exp $ */ /* $NetBSD: mutex.h,v 1.9 2007/03/10 16:01:13 ad Exp $ */
/*- /*-
* Copyright (c) 2002, 2006, 2007 The NetBSD Foundation, Inc. * Copyright (c) 2002, 2006, 2007 The NetBSD Foundation, Inc.
@ -152,11 +152,16 @@
#include <sys/inttypes.h> #include <sys/inttypes.h>
#endif #endif
/*
* MUTEX_NODEBUG disables most LOCKDEBUG checks for the lock. It should
* not be used.
*/
typedef enum kmutex_type_t { typedef enum kmutex_type_t {
MUTEX_SPIN = 0, MUTEX_SPIN = 0,
MUTEX_ADAPTIVE = 1, MUTEX_ADAPTIVE = 1,
MUTEX_DEFAULT = 2, MUTEX_DEFAULT = 2,
MUTEX_DRIVER = 3 MUTEX_DRIVER = 3,
MUTEX_NODEBUG = 4
} kmutex_type_t; } kmutex_type_t;
typedef struct kmutex kmutex_t; typedef struct kmutex kmutex_t;