On Mon, May 20, 2019 at 4:39 PM Rick Edgecombe <rick.p.edgecombe@xxxxxxxxx> wrote: > > From: Rick Edgecombe <redgecombe.lkml@xxxxxxxxx> > > Calling vm_unmap_alias() in vm_remove_mappings() could potentially be a > lot of work to do on a free operation. Simply flushing the TLB instead of > the whole vm_unmap_alias() operation makes the frees faster and pushes > the heavy work to happen on allocation where it would be more expected. > In addition to the extra work, vm_unmap_alias() takes some locks including > a long hold of vmap_purge_lock, which will make all other > VM_FLUSH_RESET_PERMS vfrees wait while the purge operation happens. > > Lastly, page_address() can involve locking and lookups on some > configurations, so skip calling this by exiting out early when > !CONFIG_ARCH_HAS_SET_DIRECT_MAP. Hmm. I would have expected that the major cost of vm_unmap_aliases() would be the flush, and at least informing the code that the flush happened seems valuable. So would guess that this patch is actually a loss in throughput. --Andy