linux/arch/mips/kernel
Kevin Cernekee 5878fc936a MIPS: Fix CP0 COUNTER clockevent race
Consider the following test case:

write_c0_compare(read_c0_count());

Even if the counter doesn't increment during execution, this might not
generate an interrupt until the counter wraps around.  The CPU may
perform the comparison each time CP0 COUNT increments, not when CP0
COMPARE is written.

If mips_next_event() is called with a very small delta, and CP0 COUNT
increments during the calculation of "cnt += delta", it is possible
that CP0 COMPARE will be written with the current value of CP0 COUNT.
If this is detected, the function should return -ETIME, to indicate
that the interrupt might not have actually gotten scheduled.

Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/1836/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2010-12-16 18:10:58 +00:00
..
cpufreq MIPS: Use set_cpus_allowed_ptr 2010-05-21 21:31:14 +01:00
.gitignore [MIPS] Ignore vmlinux.lds generated files 2008-08-26 09:10:27 +01:00
8250-platform.c
asm-offsets.c MIPS: Remove unused task_struct.trap_no field. 2010-08-05 13:26:30 +01:00
binfmt_elfn32.c remove div_long_long_rem 2008-05-01 08:03:58 -07:00
binfmt_elfo32.c MIPS: 64-bit: Fix o32 core dump 2009-07-03 15:45:27 +01:00
branch.c MIPS: Sanitize restart logics 2010-10-18 16:59:02 +01:00
cevt-bcm1480.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
cevt-ds1287.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
cevt-gt641xx.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
cevt-r4k.c MIPS: Fix CP0 COUNTER clockevent race 2010-12-16 18:10:58 +00:00
cevt-sb1250.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
cevt-smtc.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
cevt-txx9.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
cpu-bugs64.c MIPS: uasm: Add option to export uasm API. 2010-08-05 13:26:21 +01:00
cpu-probe.c MIPS: Fix regression on BCM4710 processor detection 2010-12-16 18:10:58 +00:00
csrc-bcm1480.c clocksource: pass clocksource to read() callback 2009-04-21 13:41:47 -07:00
csrc-ioasic.c Update Yoichi Yuasa's e-mail address 2009-07-03 15:45:29 +01:00
csrc-powertv.c MIPS: PowerTV: Base files for Cisco PowerTV platform 2009-12-17 01:57:17 +00:00
csrc-r4k.c clocksource: pass clocksource to read() callback 2009-04-21 13:41:47 -07:00
csrc-sb1250.c clocksource: pass clocksource to read() callback 2009-04-21 13:41:47 -07:00
early_printk.c [MIPS] fix sparse warning about setup_early_printk() 2008-07-15 18:44:29 +01:00
entry.S [MIPS] SMTC: Close tiny holes in the SMTC IPI replay system. 2008-10-03 17:58:58 +01:00
ftrace.c MIPS: Tracing: Cleanup of address space checking 2010-07-05 17:17:30 +01:00
genex.S MIPS: Read watch registers with interrupts disabled. 2009-01-30 21:32:58 +00:00
gpio_txx9.c [MIPS] txx9: Make gpio_txx9 entirely spinlock-safe 2008-07-15 18:44:34 +01:00
head.S MIPS: Avoid potential hazard on Context register 2009-11-02 12:00:07 +01:00
i8253.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
i8259.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
init_task.c Use new __init_task_data macro in arch init_task.c files. 2009-09-21 06:27:08 +02:00
irq_cpu.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
irq_txx9.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
irq-gic.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
irq-gt641xx.c MIPS: GT641xx: Convert IRQ controller lock to raw spinlock. 2010-02-27 12:53:31 +01:00
irq-msc01.c MIPS: Enable GENERIC_HARDIRQS_NO__DO_IRQ for all platforms 2009-03-30 14:49:44 +02:00
irq-rm7000.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
irq-rm9000.c MIPS: Add missing #inclusions of <linux/irq.h> 2010-10-07 14:08:54 +01:00
irq.c MIPS: IRQ: Add stackoverflow detection 2010-10-29 19:08:27 +01:00
kgdb.c MIPS: Fix a typo. 2010-10-04 18:33:54 +01:00
kprobes.c MIPS: kprobe: Add support. 2010-08-05 13:26:29 +01:00
kspd.c MIPS: kspd: Adjust confusing if indentation 2010-10-04 18:33:54 +01:00
linux32.c MIPS: compat: Don't clobber personality bits in 32-bit sys_personality(). 2010-12-16 18:10:54 +00:00
machine_kexec.c
Makefile MIPS: add support for hardware performance events (skeleton) 2010-10-29 19:08:48 +01:00
mcount.S MIPS: tracing: Fix the indentation of mcount.S 2010-08-05 13:26:06 +01:00
mips_ksyms.c MIPS: Tracing: Add static function tracer support for MIPS 2009-12-17 01:57:21 +00:00
mips-mt-fpaff.c MIPS: MT: Fix build error iFPU affinity code 2010-10-25 08:12:27 -07:00
mips-mt.c MIPS: Remove useless zero initializations. 2009-09-17 20:07:51 +02:00
module.c MIPS: Module: Make error messages unique. 2009-08-03 17:52:48 +01:00
octeon_switch.S MIPS: Nuke trailing blank lines 2010-02-27 12:53:14 +01:00
perf_event_mipsxx.c MIPS: Add support for hardware performance events (mipsxx) 2010-10-29 19:08:49 +01:00
perf_event.c MIPS: Add support for hardware performance events (mipsxx) 2010-10-29 19:08:49 +01:00
proc.c MIPS: Eleminate filenames from comments 2009-08-03 17:52:40 +01:00
process.c MIPS: Don't stomp on caller's ->regs[2] in copy_thread() 2010-12-16 18:10:52 +00:00
prom.c of/mips: Add device tree support to MIPS 2010-10-21 11:10:10 -06:00
ptrace32.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
ptrace.c ptrace: cleanup arch_ptrace() on MIPS 2010-10-27 18:03:11 -07:00
r4k_fpu.S
r4k_switch.S MIPS: Consolidate all CONFIG_CPU_HAS_LLSC use in a single C file. 2009-09-17 20:07:49 +02:00
r2300_fpu.S
r2300_switch.S MIPS: Consolidate all CONFIG_CPU_HAS_LLSC use in a single C file. 2009-09-17 20:07:49 +02:00
r6000_fpu.S
relocate_kernel.S
reset.c
rtlx.c llseek: automatically add .llseek fop 2010-10-15 15:53:27 +02:00
scall32-o32.S Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/upstream-linus 2010-10-18 13:10:36 -07:00
scall64-64.S Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/upstream-linus 2010-10-18 13:10:36 -07:00
scall64-n32.S Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/upstream-linus 2010-10-20 13:18:21 -07:00
scall64-o32.S Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/upstream-linus 2010-10-20 13:18:21 -07:00
setup.c MIPS: Add a platform hook for swiotlb setup. 2010-10-29 19:08:32 +01:00
signal32.c MIPS: Move signal trampolines off of the stack. 2010-04-12 17:26:15 +01:00
signal_n32.c MIPS: do_sigaltstack() expects userland pointers 2010-10-18 16:59:03 +01:00
signal-common.h MIPS: Move signal trampolines off of the stack. 2010-04-12 17:26:15 +01:00
signal.c MIPS: do_sigaltstack() expects userland pointers 2010-10-18 16:59:03 +01:00
smp-cmp.c cpumask: Use accessors for cpu_*_mask: mips 2009-09-24 09:34:48 +09:30
smp-mt.c cpumask: Use accessors for cpu_*_mask: mips 2009-09-24 09:34:48 +09:30
smp-up.c cpumask: arch_send_call_function_ipi_mask: mips 2009-09-24 09:34:45 +09:30
smp.c MIPS: Export __cpu_number_map and __cpu_logical_map. 2010-08-05 13:26:21 +01:00
smtc-asm.S
smtc-proc.c
smtc.c Fix IRQ flag handling naming 2010-10-07 14:08:55 +01:00
spinlock_test.c MIPS: Crazy spinlock speed test. 2010-02-27 12:53:42 +01:00
spram.c MIPS: SPRAM: Clean up support code a little 2009-11-02 12:00:05 +01:00
stacktrace.c MIPS: Eleminate filenames from comments 2009-08-03 17:52:40 +01:00
sync-r4k.c MIPS: CMP: Update sync-r4k for current kernel 2009-07-03 15:45:27 +01:00
syscall.c Make do_execve() take a const filename pointer 2010-08-17 18:07:43 -07:00
time.c mips: Use generic mult/shift factor calculation for clocks 2009-11-13 20:46:24 +01:00
topology.c MIPS: Add arch generic CPU hotplug 2009-06-24 18:34:40 +01:00
traps.c MIPS: Send proper signal and siginfo on FP emulator faults. 2010-12-16 18:10:57 +00:00
unaligned.c MIPS: add support for software performance events 2010-10-29 19:08:48 +01:00
vdso.c MIPS: Make init_vdso a subsys_initcall. 2010-07-26 19:08:16 +01:00
vmlinux.lds.S MIPS: Tracing: Add IRQENTRY_EXIT section for MIPS 2009-12-17 01:57:24 +00:00
vpe.c MIPS: VPE loader: Check vmalloc return value in vpe_open 2010-12-16 18:10:54 +00:00
watch.c MIPS: Add HARDWARE_WATCHPOINTS definitions and support code. 2008-10-11 16:18:56 +01:00