aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/objdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-09-14 17:28:32 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2014-09-14 17:28:32 -0700
commit9226b5b440f2b4fbb3b797f3cb74a9a627220660 (patch)
tree2b9ff475c498e19606031d5e7fde74cdba30dee8 /scripts/objdiff
parentMerge branch 'parisc-3.17-1' of git://git.kernel.org/pub/scm/linux/kernel/git... (diff)
downloadlinux-9226b5b440f2b4fbb3b797f3cb74a9a627220660.tar.gz
linux-9226b5b440f2b4fbb3b797f3cb74a9a627220660.zip
vfs: avoid non-forwarding large load after small store in path lookup
The performance regression that Josef Bacik reported in the pathname lookup (see commit 99d263d4c5b2 "vfs: fix bad hashing of dentries") made me look at performance stability of the dcache code, just to verify that the problem was actually fixed. That turned up a few other problems in this area. There are a few cases where we exit RCU lookup mode and go to the slow serializing case when we shouldn't, Al has fixed those and they'll come in with the next VFS pull. But my performance verification also shows that link_path_walk() turns out to have a very unfortunate 32-bit store of the length and hash of the name we look up, followed by a 64-bit read of the combined hash_len field. That screws up the processor store to load forwarding, causing an unnecessary hickup in this critical routine. It's caused by the ugly calling convention for the "hash_name()" function, and easily fixed by just making hash_name() fill in the whole 'struct qstr' rather than passing it a pointer to just the hash value. With that, the profile for this function looks much smoother. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'scripts/objdiff')
0 files changed, 0 insertions, 0 deletions
lass='deletions'>-0/+28 2011-05-26kernel/profile.c: remove some duplicate code from profile_hits()Rakib Mullick1-7/+9 2011-05-26drivers/char/ppdev.c: put gotten port valueJulia Lawall1-0/+1 2011-05-26edac,rcu: use synchronize_rcu() instead of call_rcu()+rcu_barrier()Lai Jiangshan4-55/+18 2011-05-26pid: fix typo in function descriptionSisir Koppaka1-1/+1 2011-05-26fs/partitions/efi.c: corrupted GUID partition tables can cause kernel oopsTimo Warns1-0/+9 2011-05-26drivers/char/mspec.c: use {k,v}zalloc to allocate memoryRakib Mullick1-3/+2 2011-05-26ipmi: convert to seq_file interfaceAlexey Dobriyan3-86/+142 2011-05-26fs/proc/vmcore.c: add hook to read_from_oldmem() to check for non-ram pagesOlaf Hering2-3/+54 2011-05-26proc: fix pagemap_read() error caseKOSAKI Motohiro1-10/+9 2011-05-26proc: put check_mem_permission after __get_free_page in mem_writeKOSAKI Motohiro1-7/+9 2011-05-26proc/stat: use defined macro KMALLOC_MAX_SIZEYuanhan Liu1-3/+3 2011-05-26proc: constify status arrayMike Frysinger1-2/+2 2011-05-26fs/proc: convert to kstrtoX()Alexey Dobriyan2-11/+13 2011-05-26coredump: add support for exe_file in core nameJiri Slaby2-1/+40 2011-05-26mm: extract exe_file handling from procfsJiri Slaby6-82/+53 2011-05-26kgdbts: unify/generalize gdb breakpoint adjustmentMike Frysinger4-18/+14 2011-05-26sh: convert to asm-generic ptrace.hMike Frysinger1-2/+4 2011-05-26x86: convert to asm-generic ptrace.hMike Frysinger1-13/+5 2011-05-26Blackfin: convert to asm-generic ptrace.hMike Frysinger1-3/+2