linux/arch/sparc64/kernel
David S. Miller 227c331178 sparc64: Fix wedged irq regression.
Kernel bugzilla 10273

As reported by Jos van der Ende, ever since commit
5a606b72a4 ("[SPARC64]: Do not ACK an
INO if it is disabled or inprogress.") sun4u interrupts
can get stuck.

What this changset did was add the following conditional to
the various IRQ chip ->enable() handlers on sparc64:

	if (unlikely(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS)))
		return;

which is correct, however it means that special care is needed
in the ->enable() method.

Specifically we must put the interrupt into IDLE state during
an enable, or else it might never be sent out again.

Setting the INO interrupt state to IDLE resets the state machine,
the interrupt input to the INO is retested by the hardware, and
if an interrupt is being signalled by the device, the INO
moves back into TRANSMIT state, and an interrupt vector is sent
to the cpu.

The two sun4v IRQ chip handlers were already doing this properly,
only sun4u got it wrong.

Signed-off-by: David S. Miller <davem@davemloft.net>
2008-04-26 21:41:15 -07:00
..
Makefile [SPARC]: Remove SunOS and Solaris binary support. 2008-04-21 15:10:15 -07:00
asm-offsets.c
audit.c [PATCH] audit signal recipients 2007-05-11 05:38:25 -04:00
auxio.c [SPARC/64]: Move of_platform_driver initialisations: arch/sparc{,64}. 2007-10-13 21:53:12 -07:00
central.c [SPARC64]: __inline__ --> inline 2007-10-27 00:13:04 -07:00
chmc.c [SPARC64]: Fix memory controller register access when non-SMP. 2007-12-07 01:10:14 -08:00
compat_audit.c [PATCH] add SIGNAL syscall class (v3) 2007-05-11 05:38:25 -04:00
cpu.c [SPARC64]: Fix sparse warnings in arch/sparc64/kernel/{cpu,setup}.c 2008-03-25 21:51:40 -07:00
ds.c [SPARC64]: Use shorter list_splice_init() for brevity. 2008-03-23 22:48:29 -07:00
dtlb_miss.S
dtlb_prot.S
ebus.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
entry.S [SPARC64]: %l6 trap return handling no longer necessary. 2008-04-24 03:15:22 -07:00
entry.h [SPARC64]: %l6 trap return handling no longer necessary. 2008-04-24 03:15:22 -07:00
etrap.S [SPARC64]: Store magic cookie and trap type in pt_regs. 2008-04-23 23:32:20 -07:00
head.S [SPARC64]: Remove most limitations to kernel image size. 2008-03-21 17:01:38 -07:00
hvapi.c [SPARC64]: Report proper system soft state to the hypervisor. 2007-05-29 02:49:29 -07:00
hvtramp.S [SPARC64]: Fix cpu trampoline et al. mismatch warnings. 2008-02-20 22:22:16 -08:00
idprom.c
init_task.c Remove fs.h from mm.h 2007-07-29 17:09:29 -07:00
iommu.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
iommu_common.h sparc64: remove unused calc_npages() in iommu_common.h 2008-03-28 15:56:01 -07:00
irq.c sparc64: Fix wedged irq regression. 2008-04-26 21:41:15 -07:00
isa.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
itlb_miss.S [SPARC64]: Fix _PAGE_EXEC_4U check in sun4u I-TLB miss handler. 2007-05-29 02:50:15 -07:00
kprobes.c [SPARC64]: Fix sparse warnings wrt. __show_regs(). 2008-02-19 20:48:58 -08:00
ktlb.S [SPARC64]: Fix build with SPARSEMEM_VMEMMAP disabled. 2008-01-12 21:52:16 -08:00
ldc.c [SPARC64]: Missing mdesc_release() in ldc_init(). 2007-12-05 05:37:55 -08:00
mdesc.c [SPARC64]: Initialize MDESC earlier and use lmb_alloc() 2008-04-23 23:32:12 -07:00
module.c [SPARC]: Remove duplicate includes. 2007-11-06 21:23:11 -08:00
of_device.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_common.c [SPARC64]: Check of_get_property() return in pci_determine_mem_io_space(). 2007-10-17 16:25:10 -07:00
pci_fire.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_impl.h [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_msi.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_psycho.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_sabre.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_schizo.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_sun4v.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_sun4v.h [SPARC64]: Add PCI MSI support on Niagara. 2007-02-10 23:50:37 -08:00
pci_sun4v_asm.S [SPARC64]: Add PCI MSI support on Niagara. 2007-02-10 23:50:37 -08:00
power.c [SPARC64]: Fix sparse warnings wrt. machine_alt_power_off(). 2008-02-19 20:39:18 -08:00
process.c [SPARC64]: exec PT_DTRACE 2008-03-23 22:50:16 -07:00
prom.c [SPARC64]: Use lmb_alloc() for PROM device tree. 2008-04-23 23:32:11 -07:00
ptrace.c [SPARC]: Fix several regset and ptrace bugs. 2008-04-09 19:39:25 -07:00
rtrap.S [SPARC64]: %l6 trap return handling no longer necessary. 2008-04-24 03:15:22 -07:00
sbus.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
setup.c [SPARC64]: PROM debug console can be CON_ANYTIME. 2008-04-23 23:32:20 -07:00
signal.c [SPARC64]: %l6 trap return handling no longer necessary. 2008-04-24 03:15:22 -07:00
signal32.c [SPARC64]: Use trap type stored in pt_regs to handle syscall restart. 2008-04-24 03:01:48 -07:00
smp.c [SPARC64]: Wrap SMP IPIs with irq_enter()/irq_exit(). 2008-04-25 03:11:37 -07:00
sparc64_ksyms.c sparc64: cleanup after SunOS/Solaris binary emulation removal 2008-04-23 23:32:19 -07:00
sstate.c [SPARC64]: Report proper system soft state to the hypervisor. 2007-05-29 02:49:29 -07:00
stacktrace.c [SPARC64]: Detect trap frames in stack backtraces. 2008-04-24 03:28:52 -07:00
starfire.c
sun4v_ivec.S [SPARC64]: Use sun4v VIRQ interfaces as intended. 2007-10-13 21:53:16 -07:00
sun4v_tlb_miss.S [SPARC64]: %l6 trap return handling no longer necessary. 2008-04-24 03:15:22 -07:00
sys32.S [SPARC64]: Fix arg passing to compat_sys_ipc(). 2007-04-13 13:27:08 -07:00
sys_sparc.c [SPARC64]: Fix args to 64-bit sys_semctl() via sys_ipc(). 2008-04-25 02:12:05 -07:00
sys_sparc32.c arch: Remove unnecessary inclusions of asm/semaphore.h 2008-04-18 22:14:49 -04:00
sysfs.c [SPARC64]: Add NUMA support. 2008-04-23 23:32:17 -07:00
systbls.S [SPARC]: Remove SunOS and Solaris binary support. 2008-04-21 15:10:15 -07:00
systbls.h [SPARC]: Remove SunOS and Solaris binary support. 2008-04-21 15:10:15 -07:00
time.c [SPARC64]: Fix sparse warnings in arch/sparc64/kernel/time.c 2008-03-26 01:11:55 -07:00
trampoline.S [SPARC64]: Remove most limitations to kernel image size. 2008-03-21 17:01:38 -07:00
traps.c [SPARC64]: Detect trap frames in stack backtraces. 2008-04-24 03:28:52 -07:00
tsb.S [SPARC64]: %l6 trap return handling no longer necessary. 2008-04-24 03:15:22 -07:00
ttable.S [SPARC]: Remove SunOS and Solaris binary support. 2008-04-21 15:10:15 -07:00
una_asm.S
unaligned.c [SPARC64] arch/sparc64/kernel/unaligned.c: Use time_* macros 2008-02-17 23:24:10 -08:00
us2e_cpufreq.c [CPUFREQ] move policy's governor initialisation out of low-level drivers into cpufreq core 2007-10-04 18:40:57 -04:00
us3_cpufreq.c
vio.c [SPARC64]: Fix of section mismatch warnings. 2008-01-21 22:34:30 -08:00
viohs.c viohs: extern on function definition 2007-07-26 11:11:56 -07:00
visemul.c [SPARC64]: Call do_mathemu on illegal instruction traps too. 2006-12-10 02:39:32 -08:00
vmlinux.lds.S all archs: consolidate init and exit sections in vmlinux.lds.h 2008-01-28 23:21:17 +01:00
winfixup.S [SPARC64]: %l6 trap return handling no longer necessary. 2008-04-24 03:15:22 -07:00