linux/arch/sh/include/asm
Stuart Menefy d3ea9fa0a5 sh: Minor optimisations to FPU handling
A number of small optimisations to FPU handling, in particular:

 - move the task USEDFPU flag from the thread_info flags field (which
   is accessed asynchronously to the thread) to a new status field,
   which is only accessed by the thread itself. This allows locking to
   be removed in most cases, or can be reduced to a preempt_lock().
   This mimics the i386 behaviour.

 - move the modification of regs->sr and thread_info->status flags out
   of save_fpu() to __unlazy_fpu(). This gives the compiler a better
   chance to optimise things, as well as making save_fpu() symmetrical
   with restore_fpu() and init_fpu().

 - implement prepare_to_copy(), so that when creating a thread, we can
   unlazy the FPU prior to copying the thread data structures.

Also make sure that the FPU is disabled while in the kernel, in
particular while booting, and for newly created kernel threads,

In a very artificial benchmark, the execution time for 2500000
context switches was reduced from 50 to 45 seconds.

Signed-off-by: Stuart Menefy <stuart.menefy@st.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-11-24 17:45:38 +09:00
..
.gitignore
adc.h
addrspace.h sh: Prepare for dynamic PMB support 2009-10-10 21:51:12 +09:00
atomic-grb.h
atomic-irq.h sh: Make the atomic functions safe for irqsoff tracing 2009-06-15 00:31:17 +09:00
atomic-llsc.h sh: Fix sh4a llsc-based cmpxchg() 2009-06-11 09:31:55 +03:00
atomic.h sh: Fix up smp_mb__xxx() memory barriers for SH-4A SMP. 2009-10-18 15:36:02 +09:00
auxvec.h
bitops-grb.h sh: Convert to generic bitops for IRQ-toggling implementation. 2008-12-22 18:42:53 +09:00
bitops-llsc.h sh: Relax inline assembly constraints 2009-01-29 11:57:09 +09:00
bitops-op32.h sh: Provide optimized non-atomic bitops for SH-2A. 2008-12-22 18:42:54 +09:00
bitops.h sh: Fix up smp_mb__xxx() memory barriers for SH-4A SMP. 2009-10-18 15:36:02 +09:00
bitsperlong.h asm-generic: introduce asm/bitsperlong.h 2009-06-11 21:02:14 +02:00
bug.h sh64: dummy unwinder BUG wrappers. 2009-08-22 05:31:45 +09:00
bugs.h sh: Idle loop chainsawing for SMP-based light sleep. 2009-10-16 17:20:58 +09:00
byteorder.h byteorder: make swab.h include asm/swab.h like a regular header 2009-01-14 19:56:50 -08:00
cache.h
cachectl.h sh: fix sys_cacheflush error checking 2009-08-24 18:59:09 +09:00
cacheflush.h sh: Fix up and optimize the kmap_coherent() interface. 2009-09-03 17:21:10 +09:00
checksum.h sh: Convert sh64 to use the generic checksum code. 2009-06-15 00:00:42 +09:00
checksum_32.h
clock.h sh: add enable()/disable()/set_rate() to div6 code 2009-06-11 09:12:58 +03:00
cmpxchg-grb.h
cmpxchg-irq.h
cmpxchg-llsc.h sh: Fix sh4a llsc-based cmpxchg() 2009-06-11 09:31:55 +03:00
cpu-features.h sh: Support for extended ASIDs on PTEAEX-capable SH-X3 cores. 2009-03-17 17:49:49 +09:00
cputime.h
current.h sh: Convert to asm-generic/current.h. 2009-06-14 21:34:26 +09:00
delay.h
device.h sh: Runtime PM for SuperH Mobile platform bus devices 2009-08-23 18:03:17 +09:00
div64.h
dma-mapping.h sh: Fix up dma_is_consistent(). 2009-10-27 10:41:58 +09:00
dma-sh.h Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx into for-linus 2009-09-23 18:31:11 +10:00
dma.h sh: Convert to asm-generic/dma.h. 2009-06-14 21:45:06 +09:00
dmabrg.h
dwarf.h sh: Tidy up the dwarf module helpers. 2009-10-13 13:32:19 +09:00
elf.h Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6 2008-12-28 12:33:21 -08:00
emergency-restart.h
entry-macros.S sh: Remove implicit sign extension from assembler immediates 2009-08-24 17:09:53 +09:00
errno.h
fb.h
fcntl.h
fixmap.h sh: Improve performance of SH4 versions of copy/clear_user_highpage 2009-11-24 17:13:35 +09:00
flat.h flat: fix data sections alignment 2009-05-29 08:40:02 -07:00
fpu.h sh: Minor optimisations to FPU handling 2009-11-24 17:45:38 +09:00
freq.h
ftrace.h sh: Provide CALLER_ADDRx definitions even when ftrace is disabled. 2009-10-14 11:49:49 +09:00
futex-irq.h
futex.h
gpio.h sh: use gpiolib 2009-01-27 14:49:10 +09:00
hardirq.h sh: Count NMIs in irq_cpustat_t. 2009-10-14 16:42:28 +09:00
hd64461.h sh: mach-hp6xx: Fix up the hp6xx build for hd64461 changes. 2009-05-20 11:27:13 +09:00
heartbeat.h sh: Prevent heartbeat from scribbling over non-LED bits. 2009-08-18 21:16:29 +09:00
hugetlb.h
hw_irq.h sh: Move the shared INTC code out to drivers/sh/ 2008-10-01 16:13:54 +09:00
hwblk.h sh: Runtime PM for SuperH Mobile platform bus devices 2009-08-23 18:03:17 +09:00
i2c-sh7760.h
ilsel.h
io.h sh: Use the generic I/O port base for slowdown. 2009-11-12 16:36:26 +09:00
io_generic.h sh: More I/O routine overhauling. 2008-10-04 05:25:52 +09:00
io_trapped.h
ioctl.h
ioctls.h
ipcbuf.h sh: Convert ipc/shm bits to their asm-generic versions. 2009-06-14 23:20:27 +09:00
irq.h sh: Tidy up duplication in irq/swab/timex.h. 2009-06-14 23:21:54 +09:00
irq_regs.h
irqflags.h sh: Convert to asm-generic/irqflags.h. 2009-10-17 21:06:39 +09:00
Kbuild sh: Add sys_cacheflush() call for SH CPUs. 2009-08-24 18:16:56 +09:00
kdebug.h sh: nmi_debug support. 2009-09-01 17:38:32 +09:00
kexec.h kexec jump: rename KEXEC_CONTROL_CODE_SIZE to KEXEC_CONTROL_PAGE_SIZE 2008-08-15 08:35:42 -07:00
kgdb.h sh: Kill off kgdb's magical NMI debouncing. 2009-09-01 17:45:35 +09:00
kmap_types.h kmap_types: make most arches use generic header file 2009-06-16 19:47:51 -07:00
kprobes.h sh: Rename opcode_t to insn_size_t. 2009-05-09 16:02:08 +09:00
linkage.h
lmb.h sh: Use bootmem ontop of lmb 2009-07-03 16:16:54 +09:00
local.h
machvec.h sh: boot word / mode pin support V2 2009-06-01 15:44:49 +09:00
mc146818rtc.h
mman.h sh: Switch to asm-generic versions for identical headers. 2009-06-14 23:26:48 +09:00
mmu.h sh: Fold fixed-PMB support into dynamic PMB support 2009-10-10 21:52:34 +09:00
mmu_context.h sh: Use local TLB flush for get_mmu_context() ASID exhaustion. 2009-08-20 17:24:40 +09:00
mmu_context_32.h sh: Support for extended ASIDs on PTEAEX-capable SH-X3 cores. 2009-03-17 17:49:49 +09:00
mmu_context_64.h
mmzone.h sh: Fix up NUMA build error with se7722_defconfig. 2008-09-12 22:41:30 +09:00
module.h sh: Convert to asm-generic/module.h. 2009-06-14 23:24:14 +09:00
msgbuf.h sh: Convert ipc/shm bits to their asm-generic versions. 2009-06-14 23:20:27 +09:00
mutex-llsc.h sh: Fix up T-bit error handling in SH-4A mutex fastpath. 2009-01-29 11:56:03 +09:00
mutex.h sh: Add SH-4A optimized fastpath mutex implementation. 2008-12-22 18:42:55 +09:00
page.h sh: Convert cache disabled SH-5 over to new cache interface. 2009-08-16 00:53:56 +09:00
param.h sh: Switch to asm-generic versions for identical headers. 2009-06-14 23:26:48 +09:00
parport.h sh: Switch to asm-generic versions for identical headers. 2009-06-14 23:26:48 +09:00
pci.h sh: Revamp PCI DMA coherence Kconfig bits. 2009-10-27 10:35:02 +09:00
percpu.h
perf_event.h sh: perf events: Add preliminary support for SH-4A counters. 2009-10-28 17:57:54 +09:00
pgalloc.h mm: Remove duplicate definitions in MIPS and SH 2009-07-27 17:26:44 -07:00
pgtable.h sh: Shut up CONFIG_32BIT=n compiler warnings. 2009-10-10 22:24:55 +09:00
pgtable_32.h sh: Prepare for dynamic PMB support 2009-10-10 21:51:12 +09:00
pgtable_64.h sh: Fix up and optimize the kmap_coherent() interface. 2009-09-03 17:21:10 +09:00
poll.h
posix_types.h
posix_types_32.h sh: Convert to asm-generic/posix_types.h. 2009-06-14 23:16:27 +09:00
posix_types_64.h sh: Convert to asm-generic/posix_types.h. 2009-06-14 23:16:27 +09:00
processor.h Merge branch 'master' into sh/smp 2009-09-01 13:54:14 +09:00
processor_32.h sh: Minor optimisations to FPU handling 2009-11-24 17:45:38 +09:00
processor_64.h SH: fix start_thread and user_stack_pointer macros 2009-01-29 15:41:15 +09:00
ptrace.h sh: Add in some ptrace definitions from GDB. 2009-05-09 00:06:03 +09:00
push-switch.h
resource.h
romimage-macros.h sh: add romimage-macros.h 2009-09-11 13:19:16 +09:00
rtc.h sh: rtc-generic support. 2009-04-27 17:34:39 +09:00
rwsem.h sh: Replace old style lock initializer 2009-11-09 10:47:40 +09:00
scatterlist.h sh: Prepare for dynamic PMB support 2009-10-10 21:51:12 +09:00
seccomp.h sh: seccomp support. 2008-08-02 04:39:32 +09:00
sections.h sh: dwarf unwinder support. 2009-08-14 01:58:43 +09:00
segment.h
sembuf.h sh: Convert ipc/shm bits to their asm-generic versions. 2009-06-14 23:20:27 +09:00
serial.h sh: Switch to asm-generic versions for identical headers. 2009-06-14 23:26:48 +09:00
setup.h sh: Derive COMMAND_LINE_SIZE from asm-generic/setup.h. 2009-06-14 23:27:41 +09:00
sfp-machine.h
sh7760fb.h
sh_bios.h sh: Kill off sh_bios_in_gdb_mode(). 2008-12-22 18:44:44 +09:00
sh_eth.h net: sh_eth: add value of ether_link pin in platform_data 2009-08-29 00:19:35 -07:00
sh_keysc.h sh: add kycr2_delay for sh_keysc 2009-09-15 09:30:14 +09:00
shmbuf.h sh: Convert ipc/shm bits to their asm-generic versions. 2009-06-14 23:20:27 +09:00
shmparam.h
sigcontext.h
siginfo.h
signal.h sh: Convert to asm-generic/signal.h. 2009-06-14 23:25:57 +09:00
sizes.h sh: Add a few more definitions to asm/sizes.h. 2008-09-21 10:31:57 +09:00
smc37c93x.h
smp.h cpumask: remove arch_send_call_function_ipi 2009-09-24 09:34:47 +09:30
socket.h sh: Switch to asm-generic versions for identical headers. 2009-06-14 23:26:48 +09:00
sockios.h
sparsemem.h
spi.h
spinlock.h sh: Fix sh4a llsc-based cmpxchg() 2009-06-11 09:31:55 +03:00
spinlock_types.h
stacktrace.h sh: Use the generalized stacktrace ops 2009-08-13 11:50:08 +09:00
stat.h
statfs.h
string.h
string_32.h
string_64.h sh: Add SH-5 optimized memcpy()/memset()/strcpy()/strlen(). 2008-12-22 18:44:05 +09:00
suspend.h sh: Add R-standby sleep mode support 2009-10-30 14:38:45 +09:00
swab.h sh: Tidy up duplication in irq/swab/timex.h. 2009-06-14 23:21:54 +09:00
syscall.h sh: Provide the asm/syscall.h interface, needed by tracehook. 2008-09-12 22:13:13 +09:00
syscall_32.h sh: Add ftrace syscall tracing support 2009-07-06 20:16:33 +09:00
syscall_64.h sh: Fix up spurious syscall restarting. 2009-01-29 11:56:03 +09:00
syscalls.h sh: fixup many sparse errors. 2008-09-08 10:35:04 +09:00
syscalls_32.h [CVE-2009-0029] Remove __attribute__((weak)) from sys_pipe/sys_pipe2 2009-01-14 14:15:15 +01:00
syscalls_64.h sh: fixup many sparse errors. 2008-09-08 10:35:04 +09:00
system.h sh64: Fix up the CONFIG_GENERIC_BUG=n build. 2009-11-12 16:39:47 +09:00
system_32.h sh: Convert to asm-generic/irqflags.h. 2009-10-17 21:06:39 +09:00
system_64.h sh: Convert to asm-generic/irqflags.h. 2009-10-17 21:06:39 +09:00
termbits.h sh: Convert to asm-generic/termbits.h and termios.h. 2009-06-14 23:17:57 +09:00
termios.h sh: Convert to asm-generic/termbits.h and termios.h. 2009-06-14 23:17:57 +09:00
thread_info.h sh: Minor optimisations to FPU handling 2009-11-24 17:45:38 +09:00
timex.h sh: Tidy up duplication in irq/swab/timex.h. 2009-06-14 23:21:54 +09:00
tlb.h mm: Pass virtual address to [__]p{te,ud,md}_free_tlb() 2009-07-27 12:10:38 -07:00
tlb_64.h sh: Fix up broken kerneldoc comments. 2008-08-04 12:51:06 +09:00
tlbflush.h
topology.h sh: Support SCHED_MC for SH-X3 multi-cores. 2009-10-16 18:00:02 +09:00
types.h sh: Add register alignment helpers for shared flushers. 2009-08-15 01:57:36 +09:00
uaccess.h
uaccess_32.h
uaccess_64.h sh: sh_ksyms_64 needs __strncpy_from_user() definition. 2008-09-29 19:45:16 +09:00
ubc.h sh: Kill off legacy UBC wakeup cruft. 2009-10-16 18:20:42 +09:00
ucontext.h sh: Switch to asm-generic versions for identical headers. 2009-06-14 23:26:48 +09:00
unaligned-sh4a.h sh: 16-bit get_unaligned() sh4a fix 2009-06-04 20:20:24 +09:00
unaligned.h sh: Convert to asm-generic/unaligned.h. 2009-06-14 23:24:43 +09:00
unistd.h
unistd_32.h perf: Do the big rename: Performance Counters -> Performance Events 2009-09-21 14:28:04 +02:00
unistd_64.h perf: Do the big rename: Performance Counters -> Performance Events 2009-09-21 14:28:04 +02:00
unwinder.h sh: unwinder: Introduce UNWINDER_BUG() and UNWINDER_BUG_ON() 2009-08-21 13:02:44 +01:00
user.h
vga.h
vmlinux.lds.h sh: dwarf unwinder support. 2009-08-14 01:58:43 +09:00
watchdog.h sh: fix watchdog timer for sh7780/sh7785 2009-10-27 07:34:29 +09:00
xor.h