linux/arch/mips/kernel
James Hogan 4a91d8fb61 MIPS: Allow shared IRQ for timer & perf counter
Before release 2 of the architecture there weren't separate interrupt
pending bits for the local CPU interrupts (timer & perf counter
overflow), so when they were connected to the same interrupt line the
timer handler had to call the performance counter handler before knowing
whether a timer interrupt was actually pending.

Now another CPU local interrupt, for the Fast Debug Channel (FDC), can
also be routed to an arbitrary interrupt line. It isn't scalable to keep
adding cross-calls between handlers for these cases of shared interrupt
lines, especially since the FDC could in theory share its interrupt line
with the performance counter, timer, or both.

Fortunately since release 2 of the architecture separate interrupt
pending bits do exist in the Cause register. This allows local
interrupts which share an interrupt line to have separate handlers using
IRQF_SHARED. Unfortunately they can't easily have their own irqchip as
there is no generic way to individually mask them.

Enable this sharing to happen by removing the special case for when the
perf count shares an IRQ with the timer. cp0_perfcount_irq and
cp0_compare_irq can then be set to the same value with shared interrupt
handlers registered for both of them.

Pre-R2 code should be unaffected. cp0_perfcount_irq will always be -1
and the timer handler will contnue to call into the perf counter
handler.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/9131/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2015-03-31 12:04:12 +02:00
..
.gitignore
8250-platform.c
asm-offsets.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2015-02-21 19:41:38 -08:00
binfmt_elfn32.c
binfmt_elfo32.c MIPS: Remove old core dump functions 2014-08-02 00:06:37 +02:00
bmips_vec.S MIPS: BMIPS: Fix ".previous without corresponding .section" warnings 2014-11-24 07:44:05 +01:00
branch.c MIPS: kernel: mips-r2-to-r6-emul: Add R2 emulator for MIPS R6 2015-02-17 15:37:37 +00:00
cevt-bcm1480.c
cevt-ds1287.c
cevt-gt641xx.c
cevt-r4k.c MIPS: cevt-r4k: Cleanup c0_compare_interrupt. 2015-03-31 12:04:12 +02:00
cevt-sb1250.c
cevt-txx9.c
cps-vec.S MIPS: kernel: cps-vec: Replace "addi" with "addiu" 2015-02-17 15:37:28 +00:00
cpu-bugs64.c MIPS: kernel: cpu-bugs64: Do not check R6 cores for existing 64-bit bugs 2015-02-17 15:37:24 +00:00
cpu-probe.c MIPS: Add set/clear CP0 macros for PageGrain register 2015-02-20 12:55:18 +01:00
crash.c mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00
crash_dump.c mips: Convert pr_warning to pr_warn 2014-11-24 07:44:51 +01:00
csrc-bcm1480.c
csrc-ioasic.c
csrc-r4k.c
csrc-sb1250.c
early_printk.c
early_printk_8250.c
elf.c MIPS: kernel: elf: Improve the overall ABI and FPU mode checks 2015-02-17 15:37:39 +00:00
entry.S MIPS: Make use of the ERETNC instruction on MIPS R6 2015-02-17 15:37:37 +00:00
ftrace.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-08-07 08:47:00 -07:00
genex.S MIPS: kernel: genex: Set correct ISA level 2015-02-17 15:37:28 +00:00
gpio_txx9.c
head.S MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
i8253.c
i8259.c MIPS: i8259: Use IRQ domains 2014-11-24 07:44:52 +01:00
idle.c MIPS: Add cases for CPU_QEMU_GENERIC 2015-02-16 10:01:24 +00:00
irq-gt641xx.c
irq-msc01.c MIPS: MSC: Prevent out-of-bounds writes to MIPS SC ioremap'd region 2014-06-26 10:48:23 +01:00
irq-rm7000.c
irq.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-06-09 18:10:34 -07:00
irq_cpu.c MIPS: IRQ: Fix disable_irq on CPU IRQs 2015-01-16 14:03:17 +01:00
irq_txx9.c
jump_label.c MIPS: jump_label.c: Handle the microMIPS J instruction encoding 2014-11-19 18:22:09 +01:00
kgdb.c MIPS: kernel: {ftrace,kgdb}: Set correct address limit for cache flushes 2014-03-26 23:09:18 +01:00
kprobes.c mips: Replace __get_cpu_var uses 2014-08-26 13:45:51 -04:00
linux32.c
machine_kexec.c MIPS: kdump: Set correct value to kexec_indirection_page variable 2014-08-25 16:33:44 +02:00
Makefile MIPS: kernel: mips-r2-to-r6-emul: Add R2 emulator for MIPS R6 2015-02-17 15:37:37 +00:00
mcount.S MIPS: mcount: Adjust stack pointer for static trace in MIPS32 2014-09-26 11:41:17 +02:00
mips-cm.c MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
mips-cpc.c MIPS: Replace use of phys_t with phys_addr_t. 2014-11-24 22:47:31 +01:00
mips-mt-fpaff.c MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
mips-mt.c MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
mips-r2-to-r6-emul.c MIPS: kernel: mips-r2-to-r6-emul: Add R2 emulator for MIPS R6 2015-02-17 15:37:37 +00:00
mips_ksyms.c Merge branch 'mipsr6-for-3.20' of git://git.linux-mips.org/pub/scm/mchandras/linux into mips-for-linux-next 2015-02-19 16:00:34 +01:00
mips_machine.c
module-rela.c
module.c mm: vmalloc: pass additional vm_flags to __vmalloc_node_range() 2015-02-13 21:21:42 -08:00
octeon_switch.S MIPS: OCTEON: Delete unused COP2 saving code 2015-02-20 15:30:23 +01:00
perf_event.c
perf_event_mipsxx.c MIPS: perf: Allow sharing IRQ with timer 2015-03-31 12:04:12 +02:00
pm-cps.c MIPS: {pm,smp}-cps: use cpu_vpe_id macro 2014-07-30 20:48:42 +02:00
pm.c MIPS: PM: Implement PM helper macros 2014-05-02 16:39:10 +01:00
proc.c MIPS: kernel: proc: Add MIPS R6 support to /proc/cpuinfo 2015-02-17 15:37:26 +00:00
process.c mips: copy_thread(): rename 'arg' argument to 'kthread_arg' 2015-03-24 15:15:34 +01:00
prom.c MIPS: Create a helper function for DT setup 2014-11-24 07:45:12 +01:00
ptrace.c MIPS: Fix syscall_get_nr for the syscall exit tracing. 2015-02-04 16:40:09 +01:00
ptrace32.c MIPS: Remove asm/user.h 2014-08-02 00:06:37 +02:00
r4k_fpu.S MIPS: kernel: r4k_fpu: Add support for MIPS R6 2015-02-17 15:37:27 +00:00
r4k_switch.S MIPS: kernel: r4k_switch: Add support for MIPS R6 2015-02-17 15:37:27 +00:00
r2300_fpu.S MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
r2300_switch.S MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
r6000_fpu.S MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
relocate_kernel.S
reset.c
rtlx-cmp.c MIPS: APRP: Fix an issue when device_create() fails. 2014-08-01 17:30:35 +02:00
rtlx-mt.c MIPS: APRP: Fix an issue when device_create() fails. 2014-08-01 17:30:35 +02:00
rtlx.c MIPS: rtlx: Remove KERN_DEBUG from pr_debug() arguments in rtlx.c 2014-11-24 07:44:04 +01:00
scall32-o32.S MIPS: Fix restart of indirect syscalls 2015-01-16 00:35:45 +01:00
scall64-64.S MIPS: Wire up execveat(2). 2015-01-13 15:53:09 +01:00
scall64-n32.S MIPS: Wire up execveat(2). 2015-01-13 15:53:09 +01:00
scall64-o32.S MIPS: Fix restart of indirect syscalls 2015-01-16 00:35:45 +01:00
segment.c
setup.c MIPS: Use phys_addr_t instead of phys_t 2014-12-12 15:36:13 -08:00
signal-common.h mips: Use get_signal() signal_setup_done() 2014-08-06 13:03:08 +02:00
signal.c all arches, signal: move restart_block to struct task_struct 2015-02-12 18:54:12 -08:00
signal32.c all arches, signal: move restart_block to struct task_struct 2015-02-12 18:54:12 -08:00
signal_n32.c mips: Use sigsp() 2014-08-06 13:04:30 +02:00
smp-bmips.c MIPS: BMIPS: Let each platform customize the CPU1 IRQ mask 2014-11-24 07:45:11 +01:00
smp-cmp.c MIPS: smp-mt,smp-cmp: Enable all HW IRQs on secondary CPUs 2015-01-16 13:02:40 +01:00
smp-cps.c MIPS: Move gic.h to include/linux/irqchip/mips-gic.h 2014-11-24 07:44:59 +01:00
smp-gic.c MIPS: Move gic.h to include/linux/irqchip/mips-gic.h 2014-11-24 07:44:59 +01:00
smp-mt.c MIPS: smp-mt,smp-cmp: Enable all HW IRQs on secondary CPUs 2015-01-16 13:02:40 +01:00
smp-up.c MIPS: SMP: Remove plat_smp_ops cpus_done method. 2014-05-27 11:06:42 +02:00
smp.c MIPS: Fix kernel lockup or crash after CPU offline/online 2015-01-29 23:54:07 +01:00
spinlock_test.c
spram.c MIPS: Add cases for CPU_QEMU_GENERIC 2015-02-16 10:01:24 +00:00
stacktrace.c
sync-r4k.c MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
syscall.c MIPS: kernel: syscall: Set the appropriate ISA level for MIPS R6 2015-02-17 15:37:29 +00:00
time.c MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
topology.c
traps.c MIPS: Allow shared IRQ for timer & perf counter 2015-03-31 12:04:12 +02:00
unaligned.c MIPS: kernel: unaligned: Add support for the MIPS R6 2015-02-17 15:37:28 +00:00
vdso.c MIPS: Enable VDSO randomization 2014-11-24 07:45:38 +01:00
vmlinux.lds.S
vpe-cmp.c
vpe-mt.c MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
vpe.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2014-01-30 17:20:32 -08:00
watch.c