On mercoledì 20 luglio 2022 17:43:24 CEST Fabio M. De Francesco wrote: > kmap() is being deprecated in favor of kmap_local_page(). > > Two main problems with kmap(): (1) It comes with an overhead as mapping > space is restricted and protected by a global lock for synchronization and > (2) it also requires global TLB invalidation when the kmap’s pool wraps > and it might block when the mapping space is fully utilized until a slot > becomes available. > > With kmap_local_page() the mappings are per thread, CPU local, can take > page faults, and can be called from any context (including interrupts). > It is faster than kmap() in kernels with HIGHMEM enabled. Furthermore, > the tasks can be preempted and, when they are scheduled to run again, the > kernel virtual addresses are restored and still valid. > > Since its use in bnode.c is safe everywhere, it should be preferred. > > Therefore, replace kmap() with kmap_local_page() in bnode.c. Where > possible, use the suited standard helpers (memzero_page(), memcpy_page()) > instead of open coding kmap_local_page() plus memset() or memcpy(). > > Suggested-by: Ira Weiny <ira.weiny@xxxxxxxxx> > Signed-off-by: Fabio M. De Francesco <fmdefrancesco@xxxxxxxxx> > --- > fs/hfsplus/bnode.c | 105 +++++++++++++++++++++------------------------ > 1 file changed, 48 insertions(+), 57 deletions(-) Please drop this patch because I'll send it again in a series of three, one per file (bnode.c, bitmap.c, btree.c). Unfortunately, while working at the last patch (btree.c), I just noticed that I had missed one of the call sites of kmap() in bitmap.c. Therefore, I'd prefer to send that again in a patchset and find a way to test each of the three of them on a QEMU/KVM x86_32 VM, booting a kernel with HIGHMEM64GB enabled. Thanks, Fabio