git: 1ae20f7c70ea - main - kern: malloc: fix panic on M_WAITOK during THREAD_NO_SLEEPING()
Mateusz Guzik
mjguzik at gmail.com
Wed Mar 10 11:57:47 UTC 2021
There is something very wrong going on here.
Key thing to note is that malloc is ultimately a wrapper around
uma_zalloc. Whatever asserts you may want to add to malloc to catch
problems sooner, should also present in uma.
uma has the following:
if (flags & M_WAITOK) {
WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
"uma_zalloc_debug: zone \"%s\"", zone->uz_name);
}
This code used to execute prior to this commit and fail to catch the
problems which got reported already.
In other words:
- WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK is incomplete in terms of
internals its internals
- the above should be in malloc, perhaps after being abstracted into a
an assert-helper
- fixing witness deficiency will probably find a slew of new problems
- this should remain as a warning (maybe rate-limited) for the foreseable future
On 3/9/21, Kyle Evans <kevans at freebsd.org> wrote:
> The branch main has been updated by kevans:
>
> URL:
> https://cgit.FreeBSD.org/src/commit/?id=1ae20f7c70ea16fa8b702e409030e170df4f5c13
>
> commit 1ae20f7c70ea16fa8b702e409030e170df4f5c13
> Author: Kyle Evans <kevans at FreeBSD.org>
> AuthorDate: 2021-03-08 06:16:27 +0000
> Commit: Kyle Evans <kevans at FreeBSD.org>
> CommitDate: 2021-03-09 11:16:39 +0000
>
> kern: malloc: fix panic on M_WAITOK during THREAD_NO_SLEEPING()
>
> Simple condition flip; we wanted to panic here after
> epoch_trace_list().
>
> Reviewed by: glebius, markj
> MFC after: 3 days
> Differential Revision: https://reviews.freebsd.org/D29125
> ---
> sys/kern/kern_malloc.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
> index 48383358e3ad..0d6f9dcfcab7 100644
> --- a/sys/kern/kern_malloc.c
> +++ b/sys/kern/kern_malloc.c
> @@ -537,7 +537,7 @@ malloc_dbg(caddr_t *vap, size_t *sizep, struct
> malloc_type *mtp,
> #ifdef EPOCH_TRACE
> epoch_trace_list(curthread);
> #endif
> - KASSERT(1,
> + KASSERT(0,
> ("malloc(M_WAITOK) with sleeping prohibited"));
> }
> }
>
--
Mateusz Guzik <mjguzik gmail.com>
More information about the dev-commits-src-all
mailing list