Re: [PATCH] mm/debug: Use BUILD_BUG_ON_INVALID() for VIRTUAL_BUG_ON()

From: David Hildenbrand
Date: Sat Jun 07 2025 - 14:13:21 EST


On 07.06.25 18:21, Tal Zussman wrote:
On Sat, Jun 7, 2025 at 3:59 AM David Hildenbrand <david@xxxxxxxxxx> wrote:
On 07.06.25 09:09, Tal Zussman wrote:
This allows the compiler to validate the condition even with
CONFIG_DEBUG_VIRTUAL disabled, and aligns VIRTUAL_BUG_ON() with the
other macros in mmdebug.h.


In the light of recent discussions, I think we should get rid of
VIRTUAL_BUG_ON completely.

There are only a hand full of callers, and I am preety sure for most of
them VM_WARN_ON is a suitable replacement.

Makes sense. However, all of the callers (except for vmalloc) are already
gated by CONFIG_DEBUG_VIRTUAL, which doesn't depend on CONFIG_DEBUG_VM, so
using VM_WARN_ON_ONCE() would break DEBUG_VIRTUAL on its own.

It should either be folded or made dependent on DEBUG_VM


Perhaps it makes sense to convert the non-vmalloc callers to WARN_ON_ONCE()
instead so DEBUG_VIRTUAL still works.
> The vmalloc caller would then become>
if (IS_ENABLED(CONFIG_DEBUG_VIRTUAL))
WARN_ON_ONCE(...);

as opposed to VM_WARN_ON_ONCE(), in order to maintain the existing
DEBUG_VIRTUAL behavior.

From a quick glimpse, I am not even sure Fedora/RHEL enable it in the debug config (and if so, probably it's not enabled by mistake)

I think we can make it depend on DEBUG_VM.


Alternatively, DEBUG_VIRTUAL could be folded into DEBUG_VM, but that seems
like a slightly more invasive change...

I'd start with making it depend on DEBUG_VM.

If there is good reason to not fold it, then all VIRTUAL_BUG_ON should be renamed to VIRTUAL_WARN_ON and get defined as VM_WARN_ON.

If there is good reason to fold it, then all VIRTUAL_BUG_ON should be replaced by VM_WARN_ON.

The only question is what the performance overhead is. I mean, performance with DEBUG_VM is already bad (debug kernels), so not sure if we really care that much.

--
Cheers,

David / dhildenb