linux-kernel-test/arch/sh/kernel
Giuseppe CAVALLARO a0458b07c1 sh: add sleazy FPU optimization
sh port of the sLeAZY-fpu feature currently implemented for some architectures
such us i386.

Right now the SH kernel has a 100% lazy fpu behaviour.
This is of course great for applications that have very sporadic or no FPU use.
However for very frequent FPU users...  you take an extra trap every context
switch.
The patch below adds a simple heuristic to this code: after 5 consecutive
context switches of FPU use, the lazy behavior is disabled and the context
gets restored every context switch.
After 256 switches, this is reset and the 100% lazy behavior is returned.

Tests with LMbench showed no regression.
I saw a little improvement due to the prefetching (~2%).

The tests below also show that, with this sLeazy patch, indeed,
the number of FPU exceptions is reduced.
To test this. I hacked the lat_ctx LMBench to use the FPU a little more.

   sLeasy implementation
   ===========================================
   switch_to calls            |  79326
   sleasy   calls             |  42577
   do_fpu_state_restore  calls|  59232
   restore_fpu   calls        |  59032

   Exceptions:  0x800 (FPU disabled  ): 16604

   100% Leazy (default implementation)
   ===========================================
   switch_to  calls            |  79690
   do_fpu_state_restore calls  |  53299
   restore_fpu  calls          |   53101

   Exceptions: 0x800 (FPU disabled  ):  53273

Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: Stuart Menefy <stuart.menefy@st.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-11-24 16:23:38 +09:00
..
cpu sh: add sleazy FPU optimization 2009-11-24 16:23:38 +09:00
vsyscall kbuild: rename ld-option to cc-ldoption 2009-09-20 12:27:42 +02:00
.gitignore sh: Add an arch/sh/kernel/.gitignore 2008-07-29 08:29:32 +09:00
asm-offsets.c sh: Provide diagnostic kernel stack checks 2009-07-11 10:07:58 +09:00
cpufreq.c sh: cpufreq: Include CPU id in info messages. 2009-09-15 09:26:04 +09:00
crash_dump.c kdump: make elfcorehdr_addr independent of CONFIG_PROC_VMCORE 2008-10-20 08:52:39 -07:00
debugtraps.S sh: unwinder: Use a special bug flag for unwinder traps. 2009-08-22 05:28:25 +09:00
disassemble.c sh: Add a simple code dumper for SUPERH32 show_regs(). 2008-12-22 18:43:49 +09:00
dumpstack.c sh: flag the default unwinder as reliable. 2009-08-15 01:09:03 +09:00
dwarf.c sh: unwinder: Fix up invalid PC refetch in dwarf unwinder. 2009-11-06 17:23:33 +09:00
early_printk.c sh: Fix up early printk build error. 2009-08-04 15:54:33 +09:00
entry-common.S sh: Fix a TRACE_IRQS_OFF typo. 2009-10-14 15:50:28 +09:00
ftrace.c sh: ftrace: Fix up syscall tracepoint support. 2009-10-13 12:42:48 +09:00
gpio.c sh: use gpiolib 2009-01-27 14:49:10 +09:00
head_32.S sh: convert to use __HEAD and HEAD_TEXT macros. 2009-04-26 09:20:39 -07:00
head_64.S sh: convert to use __HEAD and HEAD_TEXT macros. 2009-04-26 09:20:39 -07:00
idle.c sh: Provide cpu_idle_wait() to fix up cpuidle/SMP build. 2009-06-23 17:30:17 +09:00
init_task.c Use new __init_task_data macro in arch init_task.c files. 2009-09-21 06:27:08 +02:00
io_generic.c sh: Handle ioport_map() cases for >= P1SEG addresses. 2009-09-28 15:04:04 +09:00
io_trapped.c sh: Only shout about fixing up unexpected unaligned accesses 2009-08-29 20:31:44 +09:00
io.c sh: Optimise memcpy_to/fromio for SH4 2009-08-24 17:35:07 +09:00
irq.c sh: __irq_entry annotate do_IRQ(). 2009-10-26 09:58:31 +09:00
kgdb.c sh: Kill off kgdb's magical NMI debouncing. 2009-09-01 17:45:35 +09:00
kprobes.c sh: kprobes: kretprobe_trampoline needs to be global. 2008-09-09 08:13:28 +09:00
localtimer.c sh: Fix up clockevents broadcasting. 2009-08-19 18:00:03 +09:00
machine_kexec.c sh: disallow kexec virtual entry 2009-03-20 18:56:04 +09:00
machvec.c sh: Set the default I/O port base to P2SEG. 2009-09-28 15:05:41 +09:00
Makefile sh: nmi_debug support. 2009-09-01 17:38:32 +09:00
module.c module: cleanup FIXME comments about trimming exception table entries. 2009-06-12 21:47:05 +09:30
nmi_debug.c sh: nmi_debug support. 2009-09-01 17:38:32 +09:00
process_32.c sh: add sleazy FPU optimization 2009-11-24 16:23:38 +09:00
process_64.c sh: Tidy up NEFF-based sign extension for SH-5. 2009-08-04 17:14:39 +09:00
ptrace_32.c sh: Wire up HAVE_SYSCALL_TRACEPOINTS. 2009-09-16 14:30:34 +09:00
ptrace_64.c sh: Wire up HAVE_SYSCALL_TRACEPOINTS. 2009-09-16 14:30:34 +09:00
relocate_kernel.S sh: add kexec jump support 2009-03-18 18:57:43 +09:00
setup.c sh: Tidy up SMP cpuinfo. 2009-10-14 15:43:52 +09:00
sh_bios.c sh: Kill off sh_bios_in_gdb_mode(). 2008-12-22 18:44:44 +09:00
sh_ksyms_32.c sh: Build fix: define more __movmem* symbols 2009-10-26 10:00:26 +09:00
sh_ksyms_64.c sh: Fix up the SH-5 build with caches enabled. 2009-08-16 01:50:17 +09:00
signal_32.c sh: Optimize the setup_rt_frame() I-cache flush. 2009-10-14 15:49:45 +09:00
signal_64.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2009-09-16 13:48:32 +09:00
smp.c sh: Populate initial secondary CPU info from boot_cpu_data. 2009-10-14 15:44:12 +09:00
stacktrace.c sh: stacktrace: Properly terminate the trace entry buffer. 2009-08-15 01:11:37 +09:00
swsusp.c sh: hibernation support 2009-03-10 12:55:40 +09:00
sys_sh32.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00
sys_sh64.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00
sys_sh.c sh: fix sys_cacheflush error checking 2009-08-24 18:59:09 +09:00
syscalls_32.S perf: Do the big rename: Performance Counters -> Performance Events 2009-09-21 14:28:04 +02:00
syscalls_64.S perf: Do the big rename: Performance Counters -> Performance Events 2009-09-21 14:28:04 +02:00
time.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6 2009-09-18 09:43:09 -07:00
topology.c sh: replace remaining __FUNCTION__ occurrences 2008-03-06 11:18:22 +09:00
traps_32.c sh: update die() output. 2009-10-13 10:57:52 +09:00
traps_64.c sh: Always fixup unaligned userspace accesses on sh64. 2009-05-08 20:32:56 +09:00
traps.c sh: nmi_debug support. 2009-09-01 17:38:32 +09:00
unwinder.c sh: unwinder: Use a special bug flag for unwinder traps. 2009-08-22 05:28:25 +09:00
vmlinux.lds.S Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2009-09-16 13:48:32 +09:00