Re: [PATCH 2/3] mm: update core kernel code to use vm_flags_t consistently

From
Uladzislau Rezki <urezki@gmail.com>
Date
2025-08-05 16:14:03
Also in
kvm, linux-fsdevel, linux-mm, linuxppc-dev, lkml, nvdimm, sparclinux
Reply to
Mike Rapoport, 2025-08-05
On Tue, Aug 05, 2025 at 12:37:57PM +0300, Mike Rapoport wrote:
On Mon, Aug 04, 2025 at 12:54:21PM +0200, Uladzislau Rezki wrote:
quoted
Hello, Lorenzo!
quoted
So sorry Ulad, I meant to get back to you on this sooner!

On Tue, Jul 29, 2025 at 08:39:01PM +0200, Uladzislau Rezki wrote:
quoted
On Tue, Jul 29, 2025 at 06:25:39AM +0100, Lorenzo Stoakes wrote:
quoted
Andrew - FYI there's nothing to worry about here, the type remains
precisely the same, and I'll send a patch to fix this trivial issue so when
later this type changes vmalloc will be uaffected.

On Tue, Jul 29, 2025 at 09:15:51AM +0900, Harry Yoo wrote:
quoted
[Adding Uladzislau to Cc]
Ulad - could we PLEASE get rid of 'vm_flags' in vmalloc? It's the precise
same name and (currently) type as vma->vm_flags and is already the source
of confusion.
You mean all "vm_flags" variable names? "vm_struct" has flags as a
member. So you want:

urezki@pc638:~/data/backup/coding/linux-not-broken.git$ grep -rn vm_flags mm/execmem.c
29:                          pgprot_t pgprot, unsigned long vm_flags)
39:             vm_flags |= VM_DEFER_KMEMLEAK;
41:     if (vm_flags & VM_ALLOW_HUGE_VMAP)
45:                              pgprot, vm_flags, NUMA_NO_NODE,
51:                                      pgprot, vm_flags, NUMA_NO_NODE,
85:                          pgprot_t pgprot, unsigned long vm_flags)
259:    unsigned long vm_flags = VM_ALLOW_HUGE_VMAP;
266:    p = execmem_vmalloc(range, alloc_size, PAGE_KERNEL, vm_flags);
376:    unsigned long vm_flags = VM_FLUSH_RESET_PERMS;
385:            p = execmem_vmalloc(range, size, pgprot, vm_flags);
urezki@pc638:~/data/backup/coding/linux-not-broken.git$ grep -rn vm_flags mm/vmalloc.c
3853: * @vm_flags:                additional vm area flags (e.g. %VM_NO_GUARD)
3875:                   pgprot_t prot, unsigned long vm_flags, int node,
3894:   if (vmap_allow_huge && (vm_flags & VM_ALLOW_HUGE_VMAP)) {
3912:                             VM_UNINITIALIZED | vm_flags, start, end, node,
3977:   if (!(vm_flags & VM_DEFER_KMEMLEAK))
4621:   vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP);
urezki@pc638:~/data/backup/coding/linux-not-broken.git$ grep -rn vm_flags mm/execmem.c
29:                          pgprot_t pgprot, unsigned long vm_flags)
39:             vm_flags |= VM_DEFER_KMEMLEAK;
41:     if (vm_flags & VM_ALLOW_HUGE_VMAP)
45:                              pgprot, vm_flags, NUMA_NO_NODE,
51:                                      pgprot, vm_flags, NUMA_NO_NODE,
85:                          pgprot_t pgprot, unsigned long vm_flags)
259:    unsigned long vm_flags = VM_ALLOW_HUGE_VMAP;
266:    p = execmem_vmalloc(range, alloc_size, PAGE_KERNEL, vm_flags);
376:    unsigned long vm_flags = VM_FLUSH_RESET_PERMS;
385:            p = execmem_vmalloc(range, size, pgprot, vm_flags);
urezki@pc638:~/data/backup/coding/linux-not-broken.git$ grep -rn vm_flags ./include/linux/vmalloc.h
172:                    pgprot_t prot, unsigned long vm_flags, int node,
urezki@pc638:~/data/backup/coding/linux-not-broken.git$

to rename all those "vm_flags" to something, for example, like "flags"?
Yeah, sorry I know it's a churny pain, but I think it's such a silly source
of confusion _in general_, not only this series where I made a mistake (of
course entirely my fault but certainly more understandable given the
naming), but in the past I've certainly sat there thinking 'hmmm wait' :)

Really I think we should rename 'vm_struct' too, but if that causes _too
much_ churn fair enough.
Well, it's not that terrible :)

~/git/linux$ git grep -w vm_struct | wc -l
173
Indeed :)

quoted
quoted
I think even though it's long-winded, 'vmalloc_flags' would be good, both
in fields and local params as it makes things very very clear.

Equally 'vm_struct' -> 'vmalloc_struct' would be a good change.
Do we really need the _struct suffix?
How about vmalloc_area?
I think, we should not use vmalloc_ prefix here, because vmalloc
operates within its own range: VMALLOC_START:VMALLOC_END, therefore
it might be confusing also.

others can use another regions. vmap_mapping?
It also seems that struct vmap_area can be made private to mm/.
I agree. Also it can be even moved under vmalloc.c. There is only one
user which needs it globally, it is usercopy.c. It uses find_vmap_area()
which is wrong. See:

<snip>
	if (is_vmalloc_addr(ptr) && !pagefault_disabled()) {
		struct vmap_area *area = find_vmap_area(addr);

		if (!area)
			usercopy_abort("vmalloc", "no area", to_user, 0, n);

		if (n > area->va_end - addr) {
			offset = addr - area->va_start;
			usercopy_abort("vmalloc", NULL, to_user, offset, n);
		}
		return;
	}
<snip>

we can add a function which just assign va_start, va_end as input
parameters and use them in the usercopy.c. 

Thanks!

--
Uladzislau Rezki
Thread (48 messages) 48 messages, 16 authors, last reply 2025-08-27
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help