Re: [patch 0/6] mm/vmalloc: Assorted fixes and improvements

Uladzislau Rezki
2023-05-23T16:24:25Z

On Tue, May 23, 2023 at 04:02:09PM +0200, Thomas Gleixner wrote:
> Following up to the discussion about excessive TLB flushes
>
> https://lore.kernel.org/all/87a5y5a6kj.ffs@tglx
>
> this series addresses the following issues:
>
>
> 1) Prevent the stale TLB problem related to fully utilized vmap blocks
>
>
> 2) Avoid the double per CPU list walk in _vm_unmap_aliases()
>
>
> 3) Avoid flushing dirty space over and over
>
>
> 4) Add a lockless quickcheck in vb_alloc() and add missing
> READ/WRITE_ONCE() annotations
>
> 5) Prevent overeager purging of usable vmap_blocks if
> not under memory/address space pressure.
>
> Thanks,
>
> tglx
Thank you for fixing it!

<snip>
urezki@pc638:~/data/raid0/coding/linux.git$ make -j64 bzImage
DESCEND objtool
INSTALL libsubcmd_headers
CALL scripts/checksyscalls.sh
CC mm/vmalloc.o
In file included from ./include/linux/list_lru.h:14,
from ./include/linux/fs.h:13,
from ./include/linux/huge_mm.h:8,
from ./include/linux/mm.h:855,
from mm/vmalloc.c:12:
mm/vmalloc.c: In function ‘_vm_unmap_aliases’:
mm/vmalloc.c:2220:19: error: ‘struct vmap_block_queue’ has no member named ‘vmap_blocks’
2220 | xa_for_each(&vbq->vmap_blocks, idx, vb) {
| ^~
./include/linux/xarray.h:449:23: note: in definition of macro ‘xa_for_each_range’
449 | entry = xa_find(xa, &index, last, XA_PRESENT); \
| ^~
./include/linux/xarray.h:501:2: note: in expansion of macro ‘xa_for_each_start’
501 | xa_for_each_start(xa, index, entry, 0)
| ^~~~~~~~~~~~~~~~~
mm/vmalloc.c:2220:3: note: in expansion of macro ‘xa_for_each’
2220 | xa_for_each(&vbq->vmap_blocks, idx, vb) {
| ^~~~~~~~~~~
mm/vmalloc.c:2220:19: error: ‘struct vmap_block_queue’ has no member named ‘vmap_blocks’
2220 | xa_for_each(&vbq->vmap_blocks, idx, vb) {
| ^~
./include/linux/xarray.h:451:29: note: in definition of macro ‘xa_for_each_range’
451 | entry = xa_find_after(xa, &index, last, XA_PRESENT))
| ^~
./include/linux/xarray.h:501:2: note: in expansion of macro ‘xa_for_each_start’
501 | xa_for_each_start(xa, index, entry, 0)
| ^~~~~~~~~~~~~~~~~
mm/vmalloc.c:2220:3: note: in expansion of macro ‘xa_for_each’
2220 | xa_for_each(&vbq->vmap_blocks, idx, vb) {
| ^~~~~~~~~~~
mm/vmalloc.c:2228:9: error: too few arguments to function ‘purge_fragmented_block’
2228 | if (!purge_fragmented_block(vb, vbq, &purge_list) &&
| ^~~~~~~~~~~~~~~~~~~~~~
mm/vmalloc.c:2047:13: note: declared here
2047 | static bool purge_fragmented_block(struct vmap_block *vb, struct vmap_block_queue *vbq,
| ^~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [scripts/Makefile.build:252: mm/vmalloc.o] Error 1
make[1]: *** [scripts/Makefile.build:494: mm] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:2025: .] Error 2
urezki@pc638:~/data/raid0/coding/linux.git$ ^C
<snip>

Could please fix it? :)

--
Uladzislau Rezki