linux/arch/mips/kernel
Ralf Baechle 4b3e975e4a [MIPS] Fix scheduling latency issue on 24K, 34K and 74K cores
The idle loop goes to sleep using the WAIT instruction if !need_resched().
This has is suffering from from a race condition that if if just after
need_resched has returned 0 an interrupt might set TIF_NEED_RESCHED but
we've just completed the test so go to sleep anyway.  This would be
trivial to fix by just disabling interrupts during that sequence as in:

        local_irq_disable();
        if (!need_resched())
                __asm__("wait");
        local_irq_enable();

but the processor architecture leaves it undefined if a processor calling
WAIT with interrupts disabled will ever restart its pipeline and indeed
some processors have made use of the freedom provided by the architecture
definition.  This has been resolved and the Config7.WII bit indicates that
the use of WAIT is safe on 24K, 24KE and 34K cores.  It also is safe on
74K starting revision 2.1.0 so enable the use of WAIT with interrupts
disabled for 74K based on a c0_prid of at least that.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2007-07-06 16:17:11 +01:00
..
Makefile [MIPS] Fix and cleanup the mess that a dozen prom_printf variants are. 2007-03-04 19:02:37 +00:00
asm-offsets.c rename thread_info to stack 2007-05-09 12:30:56 -07:00
binfmt_elfn32.c [PATCH] elf: Always define elf_addr_t in linux/elf.h 2006-12-07 08:39:38 -08:00
binfmt_elfo32.c [PATCH] elf: Always define elf_addr_t in linux/elf.h 2006-12-07 08:39:38 -08:00
branch.c [MIPS] Unify mips_fpu_soft_struct and mips_fpu_hard_structs. 2006-06-19 17:39:18 +01:00
cpu-bugs64.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
cpu-probe.c [MIPS] Fix scheduling latency issue on 24K, 34K and 74K cores 2007-07-06 16:17:11 +01:00
early_printk.c [MIPS] early_printk: allow the early console to run earlier 2007-05-11 14:28:30 +01:00
entry.S [MIPS] lockdep: Handle interrupts in R3000 style c0_status register. 2007-03-29 23:46:35 +01:00
gdb-low.S [MIPS] TRACE_IRQFLAGS_SUPPORT support. 2006-07-13 21:26:09 +01:00
gdb-stub.c [MIPS] Whitespace cleanups. 2007-02-06 16:53:19 +00:00
genex.S [MIPS] lockdep: Deal with interrupt disable hazard in TRACE_IRQFLAGS 2007-03-29 23:46:35 +01:00
head.S [MIPS] Move some kernel globals from asm file to C file. 2007-02-06 16:53:16 +00:00
i8253.c Input: pcspkr - separate device and driver registration 2006-03-14 00:11:50 -05:00
i8259.c [MIPS] Register PCI host bridge resource earlier 2007-04-27 16:20:25 +01:00
init_task.c [PATCH] nsproxy: move init_nsproxy into kernel/nsproxy.c 2006-10-02 07:57:20 -07:00
irix5sys.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
irixelf.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
irixinv.c Sparseify MIPS. 2005-10-29 19:30:50 +01:00
irixioctl.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
irixsig.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
irq-msc01.c [MIPS] MT: Reenable EIC support and add support for SOCit SC. 2007-05-11 14:28:31 +01:00
irq-mv6434x.c [MIPS] Whitespace cleanups. 2007-02-06 16:53:19 +00:00
irq-rm7000.c [MIPS] use name instead of typename for each irq_chip 2007-02-06 16:53:14 +00:00
irq-rm9000.c [MIPS] use name instead of typename for each irq_chip 2007-02-06 16:53:14 +00:00
irq.c [MIPS] Drop __devinit tag from allocate_irqno() and free_irqno() 2007-05-11 14:28:31 +01:00
irq_cpu.c [MIPS] use name instead of typename for each irq_chip 2007-02-06 16:53:14 +00:00
kspd.c [MIPS] Fix AP/SP to work in the reality of modern kernels. 2007-04-27 16:20:23 +01:00
linux32.c [MIPS] Fix some system calls with long long arguments 2007-06-06 19:34:32 +01:00
machine_kexec.c Storage class should be before const qualifier 2007-02-17 20:11:19 +01:00
mips-mt.c [MIPS] VPE: Sprinkle device model code into code to make udev happier. 2007-02-10 22:38:42 +00:00
mips_ksyms.c [MIPS] Export __copy_user_inatomic. 2007-03-07 00:07:17 +00:00
module.c [MIPS] Load modules to CKSEG0 if CONFIG_BUILD_ELF64=n 2006-11-30 01:14:44 +00:00
proc.c [MIPS] Whitespace cleanups. 2007-02-06 16:53:19 +00:00
process.c [MIPS] Make SMTC_IDLE_HOOK_DEBUG a proper option in Kconfig.debug. 2007-02-26 23:06:06 +00:00
ptrace.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
ptrace32.c [MIPS] Make sure cpu_has_fpu is used only in atomic context 2006-10-09 23:20:48 +01:00
r4k_fpu.S [MIPS] Check FCSR for pending interrupts, alternative version 2007-03-17 01:03:25 +00:00
r4k_switch.S [MIPS] Remove duplicate fpu enable hazard code. 2007-06-06 19:34:31 +01:00
r2300_fpu.S kbuild: mips use generic asm-offsets.h support 2005-09-09 22:32:31 +02:00
r2300_switch.S [MIPS] Disallow CpU exception in kernel again. 2007-04-20 14:58:37 +01:00
r6000_fpu.S kbuild: mips use generic asm-offsets.h support 2005-09-09 22:32:31 +02:00
relocate_kernel.S [MIPS] Add support for kexec 2006-11-30 01:14:44 +00:00
reset.c [MIPS] Export pm_power_off 2006-12-10 21:52:11 +00:00
rtlx.c [MIPS] Fix AP/SP to work in the reality of modern kernels. 2007-04-27 16:20:23 +01:00
scall32-o32.S [MIPS] Wire up utimensat, signalfd, timerfd, eventfd 2007-06-11 18:20:53 +01:00
scall64-64.S [MIPS] Wire up utimensat, signalfd, timerfd, eventfd 2007-06-11 18:20:53 +01:00
scall64-n32.S [MIPS] Wire up utimensat, signalfd, timerfd, eventfd 2007-06-11 18:20:53 +01:00
scall64-o32.S [MIPS] Wire up utimensat, signalfd, timerfd, eventfd 2007-06-11 18:20:53 +01:00
semaphore.c Always use ".set mips3" rather than select between "mips2" or "mips3" 2005-10-29 19:31:31 +01:00
setup.c [MIPS] Fix and cleanup the mess that a dozen prom_printf variants are. 2007-03-04 19:02:37 +00:00
signal-common.h [MIPS] Retry {save,restore}_fp_context if failed in atomic context. 2007-04-20 14:58:37 +01:00
signal.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
signal32.c [MIPS] use compat_siginfo in rt_sigframe_n32 2007-06-26 19:57:33 +02:00
signal_n32.c [MIPS] use compat_siginfo in rt_sigframe_n32 2007-06-26 19:57:33 +02:00
smp-mt.c [MIPS] VSMP: Fix initialization ordering bug. 2007-07-04 15:53:16 +01:00
smp.c [MIPS] Fix modpost warnings by making start_secondary __cpuinit 2007-06-11 18:20:54 +01:00
smtc-asm.S [MIPS] SMTC: Don't set and restore irqregs ptr from self_ipi. 2007-06-11 18:20:53 +01:00
smtc-proc.c [MIPS] MT: Improved multithreading support. 2006-04-19 04:14:28 +02:00
smtc.c [MIPS] Count timer interrupts correctly. 2007-06-26 19:57:34 +02:00
stacktrace.c simplify the stacktrace code 2007-05-08 11:14:58 -07:00
syscall.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
sysirix.c [MIPS] Whitespace cleanups. 2007-02-06 16:53:19 +00:00
time.c [MIPS] Don't drag a platform specific header into generic arch code. 2007-06-20 22:27:10 +01:00
topology.c [MIPS] Do topology_init even on uniprocessor kernels. 2006-11-29 16:21:34 +00:00
traps.c [MIPS] Fix timer/performance interrupt detection 2007-07-06 16:17:11 +01:00
unaligned.c Detach sched.h from mm.h 2007-05-21 09:18:19 -07:00
vmlinux.lds.S all-archs: consolidate .data section definition in asm-generic 2007-05-19 09:11:57 +02:00
vpe.c [MIPS] AP/SP: Avoid triggering the 34K E125 performance issue 2007-07-06 16:17:10 +01:00