linux-stable/arch/arm
Russell King 87067a935a ARM: Optimize multi-CPU tlb flushing a little more
The compiler does not conditionalize the assembly instructions for
the tlb operations, which leads to sub-optimal code being generated
when building a kernel for multiple CPUs.

We can tweak things fairly simply as the code fragment below shows:

    17f8:       e3120001        tst     r2, #1  ; 0x1
...
    1800:       0a000000        beq     1808 <handle_pte_fault+0x194>
    1804:       ee061f10        mcr     15, 0, r1, cr6, cr0, {0}
    1808:       e3120004        tst     r2, #4  ; 0x4
    180c:       0a000000        beq     1814 <handle_pte_fault+0x1a0>
    1810:       ee081f36        mcr     15, 0, r1, cr8, cr6, {1}
becomes:
    17f0:       e3120001        tst     r2, #1  ; 0x1
    17f4:       1e063f10        mcrne   15, 0, r3, cr6, cr0, {0}
    17f8:       e3120004        tst     r2, #4  ; 0x4
    17fc:       1e083f36        mcrne   15, 0, r3, cr8, cr6, {1}

Overall, for Realview with V6 and V7 CPUs configured:

   text    data     bss     dec     hex filename
4153998  207340 5371036 9732374  948116 ../build/realview/vmlinux.before
4153366  207332 5371036 9731734  947e96 ../build/realview/vmlinux.after

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2012-03-24 09:38:52 +00:00
..
boot ARM: 7001/2: Wire up support for the XZ decompressor 2012-03-24 09:38:52 +00:00
common Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
configs ARM: 7268/1: integrator: defconfig for both AP and CP 2012-01-19 23:59:39 +00:00
include/asm ARM: Optimize multi-CPU tlb flushing a little more 2012-03-24 09:38:52 +00:00
kernel ARM: 7294/1: vectors: use gate_vma for vectors user mapping 2012-03-24 09:38:51 +00:00
lib
mach-at91 Revert "atmel_lcdfb: Adjust HFP calculation so it matches the manual." 2012-01-11 22:29:30 +00:00
mach-bcmring Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core 2012-01-07 12:03:30 -08:00
mach-clps711x
mach-cns3xxx Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-davinci MTD pull for 3.3 2012-01-10 13:45:22 -08:00
mach-dove Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-ebsa110
mach-ep93xx Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-01-17 18:40:24 -08:00
mach-exynos ARM: move CP15 definitions to separate header file 2012-03-24 09:38:51 +00:00
mach-footbridge Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-gemini
mach-h720x
mach-highbank Merge branch 'fixes-for-arm-soc' of git://sources.calxeda.com/kernel/linux into fixes 2012-01-16 22:46:06 -08:00
mach-imx Merge branch 'fixes-for-arm-soc' of git://sources.calxeda.com/kernel/linux into fixes 2012-01-16 22:46:06 -08:00
mach-integrator ARM: 7310/1: integrator: implement sched_clock across all boards 2012-03-24 09:38:51 +00:00
mach-iop13xx Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-iop32x
mach-iop33x
mach-ixp4xx Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-ixp23xx Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-ixp2000 Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-kirkwood Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-ks8695 Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-l7200/include/mach
mach-lpc32xx Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core 2012-01-07 12:03:30 -08:00
mach-mmp Merge branch 'samsung/driver' into next/drivers 2012-01-09 16:16:29 +00:00
mach-msm Merge branch 'fixes-for-arm-soc' of git://sources.calxeda.com/kernel/linux into fixes 2012-01-16 22:46:06 -08:00
mach-mv78xx0 Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-mx5 power management changes for omap and imx 2012-01-09 14:39:59 -08:00
mach-mxs clock management changes for i.MX 2012-01-09 14:44:15 -08:00
mach-netx
mach-nomadik
mach-omap1 New feature development 2012-01-09 14:38:51 -08:00
mach-omap2 Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu 2012-01-16 17:47:27 -08:00
mach-orion5x Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-picoxcell Merge branch 'picoxcell-fixes' of git://github.com/jamieiles/linux-2.6-ji into fixes 2012-01-16 22:45:42 -08:00
mach-pnx4008
mach-prima2
mach-pxa Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound 2012-01-12 08:00:30 -08:00
mach-realview ARM: move CP15 definitions to separate header file 2012-03-24 09:38:51 +00:00
mach-rpc
mach-s3c64xx Merge branch 'samsung-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into fixes 2012-01-16 22:46:19 -08:00
mach-s3c2410 Device tree conversions for samsung and tegra 2012-01-09 14:28:38 -08:00
mach-s3c2412 Device tree conversions for samsung and tegra 2012-01-09 14:28:38 -08:00
mach-s3c2416 Cleanups for the Samsung platforms 2012-01-09 14:30:28 -08:00
mach-s3c2440 Board-level changes 2012-01-09 14:37:41 -08:00
mach-s3c2443 Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core 2012-01-07 12:03:30 -08:00
mach-s5p64x0 Driver specific changes 2012-01-09 14:39:22 -08:00
mach-s5pc100 Cleanups for the Samsung platforms 2012-01-09 14:30:28 -08:00
mach-s5pv210 Cleanups for the Samsung platforms 2012-01-09 14:30:28 -08:00
mach-sa1100 Merge branch 'fixes' of git://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-arm 2012-01-16 15:34:44 -08:00
mach-shark
mach-shmobile Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-01-17 18:40:24 -08:00
mach-spear3xx
mach-spear6xx
mach-tegra ARM: move CP15 definitions to separate header file 2012-03-24 09:38:51 +00:00
mach-u300 Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl 2012-01-10 10:19:57 -08:00
mach-ux500 Merge branch 'fixes-for-arm-soc' of git://sources.calxeda.com/kernel/linux into fixes 2012-01-16 22:46:06 -08:00
mach-versatile Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
mach-vexpress ARM: move CP15 definitions to separate header file 2012-03-24 09:38:51 +00:00
mach-vt8500
mach-w90x900 Merge branch 'master' into fixes 2012-01-13 15:00:22 +00:00
mach-zynq
mm ARM: 7312/1: only show modules in the memory layout for MODULES=y 2012-03-24 09:38:52 +00:00
nwfpe
oprofile
plat-iop Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-01-11 18:50:26 -08:00
plat-mxc Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-01-17 18:40:24 -08:00
plat-nomadik Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma 2012-01-17 18:40:24 -08:00
plat-omap ARM: Add arm_memblock_steal() to allocate memory away from the kernel 2012-01-13 15:02:35 +00:00
plat-orion New feature development 2012-01-09 14:38:51 -08:00
plat-pxa
plat-s3c24xx Merge branch 'master' into fixes 2012-01-13 15:00:22 +00:00
plat-s5p Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core 2012-01-07 12:03:30 -08:00
plat-samsung ARM: fixes for ARM platforms 2012-01-17 18:55:56 -08:00
plat-spear
plat-versatile ARM: 7310/1: integrator: implement sched_clock across all boards 2012-03-24 09:38:51 +00:00
tools
vfp ARM: move CP15 definitions to separate header file 2012-03-24 09:38:51 +00:00
Kconfig ARM: 7001/2: Wire up support for the XZ decompressor 2012-03-24 09:38:52 +00:00
Kconfig-nommu
Kconfig.debug
Makefile