Date: Tue, 15 Jul 2008 16:56:10 +0300 From: "Yony Yossef" <yonyossef.lists@gmail.com> To: "Kris Kennaway" <kris@freebsd.org> Cc: freebsd-questions@freebsd.org Subject: Re: options WITNESS and locks Message-ID: <20def4870807150656y761a8bcfo858b85b760d0f93f@mail.gmail.com> In-Reply-To: <487CA8DC.2090703@FreeBSD.org> References: <20def4870807140902y4e5aad69r649d577fb5f5ad84@mail.gmail.com> <487BE91E.1020202@FreeBSD.org> <20def4870807150605w6e3de82eq4a999360e9b49b6c@mail.gmail.com> <487CA8DC.2090703@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
> > > Something is still unclear. All my locks are MTX_DEF type, which means >> sleepable, including the one specified in the crash report (MTNIC state >> semaphore). >> This crash happens when I try to call bus_resource_alloc_any for a SYS_REQ >> which is trying to obtain the second lock (ACPI root bus). How come my >> MTX_DEF lock is being treated as as non-sleepable? >> > > MTX_DEF locks *are* non-sleepable :-) > > Kris > Good news :-) Yet the documentation is confusing me: man pages say: MTX_DEF Default mutexes will always allow the current thread to be suspended to avoid deadlock conditions against interrupt threads. The implementation of this lock type may spin for a while before suspending the current thread. and in mutex.h: /* * Mutex types and options passed to mtx_init(). MTX_QUIET and MTX_DUPOK * can also be passed in. */ #define MTX_DEF 0x00000000 /* DEFAULT (sleep) lock */ #define MTX_SPIN 0x00000001 /* Spin lock (disables interrupts) */ #define MTX_RECURSE 0x00000004 /* Option: lock allowed to recurse */ #define MTX_NOWITNESS 0x00000008 /* Don't do any witness checking. */ #define MTX_NOPROFILE 0x00000020 /* Don't profile this lock */ What does the "DEFAULT (sleep) lock" comment near MTX_DEF means? And which ones are sleepable?.. I guess I'm missing something here.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20def4870807150656y761a8bcfo858b85b760d0f93f>