From: Uladzislau Rezki <urezki@gmail.com>
To: Vlastimil Babka <vbabka@suse.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
Uladzislau Rezki <urezki@gmail.com>,
Harry Yoo <harry.yoo@oracle.com>, Hao Li <hao.li@linux.dev>,
Thomas Graf <tgraf@suug.ch>,
oe-lkp@lists.linux.dev, lkp@intel.com,
linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Michal Hocko <mhocko@suse.com>, Baoquan He <bhe@redhat.com>,
Alexander Potapenko <glider@google.com>,
Andrey Ryabinin <ryabinin.a.a@gmail.com>,
Marco Elver <elver@google.com>, Michal Hocko <mhocko@kernel.org>,
linux-mm@kvack.org
Subject: Re: [linus:master] [mm] c6307674ed: BUG:sleeping_function_called_from_invalid_context_at_mm/vmalloc.c
Date: Mon, 27 Apr 2026 16:17:57 +0200 [thread overview]
Message-ID: <ae9wFZp7dS8QF8br@milan> (raw)
In-Reply-To: <4e269fb1-cd6c-46ca-ac2a-168ce9fd06fe@suse.com>
On Mon, Apr 27, 2026 at 10:53:52AM +0200, Vlastimil Babka wrote:
> On 4/23/26 05:34, Herbert Xu wrote:
> > On Wed, Apr 22, 2026 at 10:32:16AM +0200, Uladzislau Rezki wrote:
> >>
> >> We have added non-sleeping flags for vmalloc() to extend kvmalloc()
> >> functionality as folk need those.
> >>
> >> Another option, would be: always use vfree_atomic() from the kvfree()
> >> path.
> >>
> >> Any thoughts?
> >
> > Perhaps add a kvfree_atomic that just calls vfree_atomic?
>
> kvfree()'s comment says
>
> " * Context: Either preemptible task context or not-NMI interrupt."
>
I am not sure the description clearly reflects the intended usage.
To me it sounds like all contexts but excluding NMI.
For example, calling this under spin_lock() will be invalid, as
the vfree() path may invoke cond_resched().
> so this is neither. It might be ok then to create kvfree_atomic(). Always
> using vfree_atomic() from kvfree() might be wasteful.
>
> > For rhashtable it really makes no difference either way. But it
> > would eliminate the unsightly call to is_vmalloc_addr in rhashtable.
> >
Seems atomic version makes sense here:
<snip>
diff --git a/include/linux/slab.h b/include/linux/slab.h
index 15a60b501b95..2b5ab488e96b 100644
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
@@ -1234,6 +1234,9 @@ void *kvrealloc_node_align_noprof(const void *p, size_t size, unsigned long alig
extern void kvfree(const void *addr);
DEFINE_FREE(kvfree, void *, if (!IS_ERR_OR_NULL(_T)) kvfree(_T))
+extern void kvfree_atomic(const void *addr);
+DEFINE_FREE(kvfree_atomic, void *, if (!IS_ERR_OR_NULL(_T)) kvfree_atomic(_T))
+
extern void kvfree_sensitive(const void *addr, size_t len);
unsigned int kmem_cache_size(struct kmem_cache *s);
diff --git a/mm/slub.c b/mm/slub.c
index 2b2d33cc735c..e25a0eab6ff7 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -6802,6 +6802,22 @@ void kvfree(const void *addr)
}
EXPORT_SYMBOL(kvfree);
+/**
+ * kvfree_atomic() - Free memory.
+ * @addr: Pointer to allocated memory.
+ *
+ * Same as kvfree(), but safe to use in atomic contexts.
+ * Must not be called from NMI context.
+ */
+void kvfree_atomic(const void *addr)
+{
+ if (is_vmalloc_addr(addr))
+ vfree_atomic(addr);
+ else
+ kfree(addr);
+}
+EXPORT_SYMBOL(kvfree_atomic);
+
/**
* kvfree_sensitive - Free a data object containing sensitive information.
* @addr: address of the data object to be freed.
<snip>
I can post it if no objections.
--
Uladzislau Rezki
next prev parent reply other threads:[~2026-04-27 14:18 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-21 7:45 [linus:master] [mm] c6307674ed: BUG:sleeping_function_called_from_invalid_context_at_mm/vmalloc.c kernel test robot
2026-04-21 12:36 ` Uladzislau Rezki
2026-04-22 5:32 ` Herbert Xu
2026-04-22 7:17 ` Uladzislau Rezki
2026-04-22 7:59 ` Herbert Xu
2026-04-22 8:18 ` [PATCH] rhashtable: Check for vmalloc in emergency rehash error path Herbert Xu
2026-04-22 8:32 ` [linus:master] [mm] c6307674ed: BUG:sleeping_function_called_from_invalid_context_at_mm/vmalloc.c Uladzislau Rezki
2026-04-23 3:34 ` Herbert Xu
2026-04-27 8:53 ` Vlastimil Babka
2026-04-27 14:17 ` Uladzislau Rezki [this message]
2026-04-27 14:37 ` Vlastimil Babka
2026-04-27 16:19 ` Uladzislau Rezki
2026-04-28 1:29 ` Herbert Xu
2026-04-28 12:04 ` Uladzislau Rezki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ae9wFZp7dS8QF8br@milan \
--to=urezki@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=bhe@redhat.com \
--cc=elver@google.com \
--cc=glider@google.com \
--cc=hao.li@linux.dev \
--cc=harry.yoo@oracle.com \
--cc=herbert@gondor.apana.org.au \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lkp@intel.com \
--cc=mhocko@kernel.org \
--cc=mhocko@suse.com \
--cc=oe-lkp@lists.linux.dev \
--cc=ryabinin.a.a@gmail.com \
--cc=tgraf@suug.ch \
--cc=vbabka@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.