android_kernel_xiaomi_sm8350/arch/arm
Lennert Buytenhek 39ec58f3fe [ARM] alternative copy_to_user/clear_user implementation
This implements {copy_to,clear}_user() by faulting in the userland
pages and then using the regular kernel mem{cpy,set}() to copy the
data (while holding the page table lock).  This is a win if the regular
mem{cpy,set}() implementations are faster than the user copy functions,
which is the case e.g. on Feroceon, where 8-word STMs (which memcpy()
uses under the right conditions) give significantly higher memory write
throughput than a sequence of individual 32bit stores.

Here are numbers for page sized buffers on some Feroceon cores:

 - copy_to_user on Orion5x goes from 51 MB/s to 83 MB/s
 - clear_user on Orion5x goes from 89MB/s to 314MB/s
 - copy_to_user on Kirkwood goes from 240 MB/s to 356 MB/s
 - clear_user on Kirkwood goes from 367 MB/s to 1108 MB/s
 - copy_to_user on Disco-Duo goes from 248 MB/s to 398 MB/s
 - clear_user on Disco-Duo goes from 328 MB/s to 1741 MB/s

Because the setup cost is non negligible, this is worthwhile only if
the amount of data to copy is large enough.  The operation falls back
to the standard implementation when the amount of data is below a certain
threshold. This threshold was determined empirically, however some targets
could benefit from a lower runtime determined value for optimal results
eventually.

In the copy_from_user() case, this technique does not provide any
worthwhile performance gain due to the fact that any kind of read access
allocates the cache and subsequent 32bit loads are just as fast as the
equivalent 8-word LDM.

Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Signed-off-by: Nicolas Pitre <nico@marvell.com>
Tested-by: Martin Michlmayr <tbm@cyrius.com>
2009-05-29 22:36:45 -04:00
..
boot
common [ARM] smp: fix cpumask usage in ARM SMP code 2009-05-17 16:22:46 +01:00
configs Merge branch 'for-rmk' of git://git.pengutronix.de/git/imx/linux-2.6 2009-05-05 09:22:26 +01:00
include/asm [ARM] allow for alternative __copy_to_user/__clear_user implementations 2009-05-29 22:34:45 -04:00
kernel [ARM] smp: fix cpumask usage in ARM SMP code 2009-05-17 16:22:46 +01:00
lib [ARM] alternative copy_to_user/clear_user implementation 2009-05-29 22:36:45 -04:00
mach-aaec2000
mach-at91 clocksource: pass clocksource to read() callback 2009-04-21 13:41:47 -07:00
mach-clps711x
mach-davinci Merge branch 'fix/asoc' into for-linus 2009-05-15 15:38:26 +02:00
mach-ebsa110
mach-ep93xx [ARM] 5509/1: ep93xx: clkdev enable UARTS 2009-05-16 19:55:56 +01:00
mach-footbridge
mach-gemini
mach-h720x
mach-imx Merge master.kernel.org:/home/rmk/linux-2.6-arm 2009-04-24 08:36:41 -07:00
mach-integrator [ARM] 5517/1: integrator: don't put clock lookups in __initdata 2009-05-18 17:43:16 +01:00
mach-iop13xx dma-mapping: replace all DMA_64BIT_MASK macro with DMA_BIT_MASK(64) 2009-04-07 08:31:10 -07:00
mach-iop32x
mach-iop33x
mach-ixp4xx Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2009-05-10 10:46:45 -07:00
mach-ixp23xx
mach-ixp2000
mach-kirkwood [ARM] 5460/1: Orion: reduce namespace pollution 2009-04-23 23:25:41 +01:00
mach-ks8695
mach-l7200 [ARM] mach-l7200: fix spelling of SYS_CLOCK_OFF 2009-05-18 11:25:08 +01:00
mach-lh7a40x
mach-loki [ARM] 5460/1: Orion: reduce namespace pollution 2009-04-23 23:25:41 +01:00
mach-mmp
mach-msm clocksource: pass clocksource to read() callback 2009-04-21 13:41:47 -07:00
mach-mv78xx0 [ARM] 5460/1: Orion: reduce namespace pollution 2009-04-23 23:25:41 +01:00
mach-mx1 MX1ADS: remove I2C ifdefs 2009-04-16 12:57:15 +02:00
mach-mx2 imx21: activate i2c 2009-04-16 12:57:13 +02:00
mach-mx3 mx31ads: Mark as having full regulatoion constraints with 1133-EV1 board 2009-04-16 13:03:56 +02:00
mach-netx clocksource: pass clocksource to read() callback 2009-04-21 13:41:47 -07:00
mach-ns9xxx clocksource: pass clocksource to read() callback 2009-04-21 13:41:47 -07:00
mach-omap1 Merge branch 'omap-clock-fixes' into omap-fixes 2009-04-24 09:56:16 -07:00
mach-omap2 ARM: OMAP2/3: Change omapfb to use clkdev for dispc and rfbi, v2 2009-05-16 08:28:17 -07:00
mach-orion5x [ARM] 5460/1: Orion: reduce namespace pollution 2009-04-23 23:25:41 +01:00
mach-pnx4008
mach-pxa [ARM] 5513/1: Eurotech VIPER SBC: fix compilation error 2009-05-16 19:55:56 +01:00
mach-realview [ARM] realview: fix broadcast tick support 2009-05-17 17:11:35 +01:00
mach-rpc
mach-s3c24a0/include/mach
mach-s3c2400
mach-s3c2410 [ARM] S3C2410: mach-bast.c registering i2c data too early 2009-05-15 15:13:25 +01:00
mach-s3c2412 [ARM] S3C2412: Add missing cache flush in suspend code 2009-05-01 12:28:16 +01:00
mach-s3c2440 [ARM] Osiris: Fix double initialisation in machine block 2009-04-17 12:42:24 +01:00
mach-s3c2442
mach-s3c2443
mach-s3c6400 [ARM] S3C64XX: Add S3C64XX_PA_IIS{0,1} to <mach/map.h> 2009-05-01 12:28:16 +01:00
mach-s3c6410 [ARM] SMDK6410: Request GPIOs for LCD power control 2009-04-15 14:46:03 +01:00
mach-sa1100 [ARM] lart: fix build error 2009-04-26 13:56:01 +01:00
mach-shark
mach-versatile [ARM] 5518/1: versatile: don't put clock lookups in __initdata 2009-05-18 17:43:06 +01:00
mach-w90x900
mm Merge master.kernel.org:/home/rmk/linux-2.6-arm 2009-05-02 16:40:20 -07:00
nwfpe [ARM] nwfpe: fix 'floatx80_is_nan' sparse warning 2009-05-15 12:49:14 +01:00
oprofile
plat-iop dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
plat-mxc mx27ads: move PBC mapping out of vmalloc space 2009-05-05 09:37:08 +02:00
plat-omap ARM: OMAP3: Fix number of GPIO lines for 34xx 2009-05-16 08:28:16 -07:00
plat-orion Merge master.kernel.org:/home/rmk/linux-2.6-arm 2009-04-24 08:36:41 -07:00
plat-pxa [ARM] pxa: fix issue of muxed GPIO irq_chip functions touching non-muxed GPIOs 2009-04-27 11:45:16 +08:00
plat-s3c [ARM] S3C: Do not set clk->owner field if unset 2009-05-15 15:21:57 +01:00
plat-s3c24xx [ARM] S3C24XX: Fix unused code warning in arch/arm/plat-s3c24xx/dma.c 2009-05-15 15:13:24 +01:00
plat-s3c64xx [ARM] S3C64XX: fix GPIO debug 2009-05-15 15:13:18 +01:00
tools
vfp
Kconfig [ARM] alternative copy_to_user/clear_user implementation 2009-05-29 22:36:45 -04:00
Kconfig-nommu
Kconfig.debug
Makefile