linux/arch/powerpc/platforms/cell
Aneesh Kumar K.V aefa5688c0 powerpc/mm: don't do tlbie for updatepp request with NO HPTE fault
upatepp can get called for a nohpte fault when we find from the linux
page table that the translation was hashed before. In that case
we are sure that there is no existing translation, hence we could
avoid doing tlbie.

We could possibly race with a parallel fault filling the TLB. But
that should be ok because updatepp is only ever relaxing permissions.
We also look at linux pte permission bits when filling hash pte
permission bits. We also hold the linux pte busy bits while
inserting/updating a hashpte entry, hence a paralle update of
linux pte is not possible. On the other hand mprotect involves
ptep_modify_prot_start which cause a hpte invalidate and not updatepp.

Performance number:
We use randbox_access_bench written by Anton.

Kernel with THP disabled and smaller hash page table size.

    86.60%  random_access_b  [kernel.kallsyms]                [k] .native_hpte_updatepp
     2.10%  random_access_b  random_access_bench              [.] doit
     1.99%  random_access_b  [kernel.kallsyms]                [k] .do_raw_spin_lock
     1.85%  random_access_b  [kernel.kallsyms]                [k] .native_hpte_insert
     1.26%  random_access_b  [kernel.kallsyms]                [k] .native_flush_hash_range
     1.18%  random_access_b  [kernel.kallsyms]                [k] .__delay
     0.69%  random_access_b  [kernel.kallsyms]                [k] .native_hpte_remove
     0.37%  random_access_b  [kernel.kallsyms]                [k] .clear_user_page
     0.34%  random_access_b  [kernel.kallsyms]                [k] .__hash_page_64K
     0.32%  random_access_b  [kernel.kallsyms]                [k] fast_exception_return
     0.30%  random_access_b  [kernel.kallsyms]                [k] .hash_page_mm

With Fix:

    27.54%  random_access_b  random_access_bench              [.] doit
    22.90%  random_access_b  [kernel.kallsyms]                [k] .native_hpte_insert
     5.76%  random_access_b  [kernel.kallsyms]                [k] .native_hpte_remove
     5.20%  random_access_b  [kernel.kallsyms]                [k] fast_exception_return
     5.12%  random_access_b  [kernel.kallsyms]                [k] .__hash_page_64K
     4.80%  random_access_b  [kernel.kallsyms]                [k] .hash_page_mm
     3.31%  random_access_b  [kernel.kallsyms]                [k] data_access_common
     1.84%  random_access_b  [kernel.kallsyms]                [k] .trace_hardirqs_on_caller

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2014-12-05 16:26:15 +11:00
..
spufs powerpc/mm: don't do tlbie for updatepp request with NO HPTE fault 2014-12-05 16:26:15 +11:00
axon_msi.c PCI/MSI/PPC: Remove arch_msi_check_device() 2014-10-01 12:21:14 -06:00
beat_htab.c powerpc/mm: don't do tlbie for updatepp request with NO HPTE fault 2014-12-05 16:26:15 +11:00
beat_hvCall.S powerpc: Merge STK_REG/PARAM/FRAMESIZE 2012-07-10 19:18:03 +10:00
beat_interrupt.c irqdomain: Clean up aftermath of irq_domain refactoring 2013-06-10 11:52:09 +01:00
beat_interrupt.h powerpc: Remove stubbed beat smp support 2011-05-19 15:30:59 +10:00
beat_iommu.c powerpc/cell: Beat dma ops cleanup 2010-11-29 15:48:20 +11:00
beat_spu_priv1.c powerpc: remove non-required uses of include <linux/module.h> 2011-10-31 19:30:44 -04:00
beat_syscall.h
beat_udbg.c
beat_wrapper.h powerpc: cell/beat_wrapper.h is implicitly using memcpy functions 2011-10-31 19:30:40 -04:00
beat.c powerpc: Rework set_dabr so it can take a DABRX value as well 2012-09-10 09:59:10 +10:00
beat.h powerpc: Rework set_dabr so it can take a DABRX value as well 2012-09-10 09:59:10 +10:00
cbe_powerbutton.c powerpc: Fix up modules that should be including module.h 2011-10-31 19:30:38 -04:00
cbe_regs.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
cbe_thermal.c powerpc/cell: cbe_thermal.c: Cleaning up a variable is of the wrong type 2014-06-24 14:05:59 +10:00
celleb_pci.c powerpc: Remove more traces of bootmem 2014-11-19 21:41:51 +11:00
celleb_pci.h powerpc/pci: Move IO workarounds to the common kernel dir 2011-04-27 14:18:29 +10:00
celleb_scc_epci.c powerpc: Remove superfluous bootmem includes 2014-11-10 09:59:26 +11:00
celleb_scc_pciex.c powerpc: Remove superfluous bootmem includes 2014-11-10 09:59:26 +11:00
celleb_scc_sio.c of/irq: simplify args to irq_create_of_mapping 2013-10-24 11:42:57 +01:00
celleb_scc_uhc.c
celleb_scc.h
celleb_setup.c powerpc: Convert power off logic to pm_power_off 2014-11-03 12:12:51 +11:00
cpufreq_spudemand.c workqueue: make deferrable delayed_work initializer names consistent 2012-08-21 13:18:23 -07:00
interrupt.c powerpc: Replace __get_cpu_var uses 2014-11-03 12:12:32 +11:00
interrupt.h powerpc/cell: Rename ipi functions to match current abstractions 2011-05-26 13:38:58 +10:00
iommu.c powerpc/iommu: Add it_page_shift field to determine iommu page size 2013-12-30 14:17:13 +11:00
Kconfig powerpc/cell: Move spu_handle_mm_fault() out of cell platform 2014-10-08 20:14:54 +11:00
Makefile powerpc/cell: Move spu_handle_mm_fault() out of cell platform 2014-10-08 20:14:54 +11:00
pervasive.c powerpc: More fixes for lazy IRQ vs. idle 2012-07-10 19:16:07 +10:00
pervasive.h
pmu.c powerpc/cell: Only iterate over online nodes in cbe_init_pm_irq() 2013-04-24 14:22:30 +10:00
qpace_setup.c powerpc: Convert power off logic to pm_power_off 2014-11-03 12:12:51 +11:00
ras.c mm: fix GFP_THISNODE callers and clarify 2014-03-10 17:26:19 -07:00
ras.h
setup.c powerpc: Convert power off logic to pm_power_off 2014-11-03 12:12:51 +11:00
smp.c powerpc: Fix SMP issues with ppc64le ABIv2 2014-04-23 10:05:26 +10:00
spider-pci.c powerpc/pci: Move IO workarounds to the common kernel dir 2011-04-27 14:18:29 +10:00
spider-pic.c of/irq: Use irq_of_parse_and_map() 2013-10-24 11:50:35 +01:00
spu_base.c powerpc/mm: don't do tlbie for updatepp request with NO HPTE fault 2014-12-05 16:26:15 +11:00
spu_callbacks.c powerpc: Convert print_symbol to %pSR 2013-01-10 17:01:16 +11:00
spu_manage.c of/irq: simplify args to irq_create_of_mapping 2013-10-24 11:42:57 +01:00
spu_notify.c powerpc: fix implicit notifier use in converting to export.h 2011-10-31 19:30:41 -04:00
spu_priv1_mmio.c powerpc: remove non-required uses of include <linux/module.h> 2011-10-31 19:30:44 -04:00
spu_priv1_mmio.h
spu_syscalls.c powerpc/cell: Fix compilation with CONFIG_COREDUMP=n 2014-07-11 12:55:05 +10:00