mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-07 03:18:31 +00:00
sh64: Fixups for the irq_regs changes.
A few interrupt handlers were never updated, fix them up. We were missing the irq_regs conversion also, so do that at the same time. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
6b5d1a0a2f
commit
a226d33abc
5 changed files with 18 additions and 12 deletions
|
@ -94,6 +94,7 @@ asmlinkage void do_NMI(unsigned long vector_num, struct pt_regs * regs)
|
||||||
*/
|
*/
|
||||||
asmlinkage int do_IRQ(unsigned long vector_num, struct pt_regs * regs)
|
asmlinkage int do_IRQ(unsigned long vector_num, struct pt_regs * regs)
|
||||||
{
|
{
|
||||||
|
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
irq_enter();
|
irq_enter();
|
||||||
|
@ -101,13 +102,14 @@ asmlinkage int do_IRQ(unsigned long vector_num, struct pt_regs * regs)
|
||||||
irq = irq_demux(vector_num);
|
irq = irq_demux(vector_num);
|
||||||
|
|
||||||
if (irq >= 0) {
|
if (irq >= 0) {
|
||||||
__do_IRQ(irq, regs);
|
__do_IRQ(irq);
|
||||||
} else {
|
} else {
|
||||||
printk("unexpected IRQ trap at vector %03lx\n", vector_num);
|
printk("unexpected IRQ trap at vector %03lx\n", vector_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
irq_exit();
|
irq_exit();
|
||||||
|
|
||||||
|
set_irq_regs(old_regs);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -340,8 +340,9 @@ static int __init map_cayman_irq(struct pci_dev *dev, u8 slot, u8 pin)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
irqreturn_t pcish5_err_irq(int irq, void *dev_id, struct pt_regs *regs)
|
static irqreturn_t pcish5_err_irq(int irq, void *dev_id)
|
||||||
{
|
{
|
||||||
|
struct pt_regs *regs = get_irq_regs();
|
||||||
unsigned pci_int, pci_air, pci_cir, pci_aint;
|
unsigned pci_int, pci_air, pci_cir, pci_aint;
|
||||||
|
|
||||||
pci_int = SH5PCI_READ(INT);
|
pci_int = SH5PCI_READ(INT);
|
||||||
|
@ -368,7 +369,7 @@ irqreturn_t pcish5_err_irq(int irq, void *dev_id, struct pt_regs *regs)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
irqreturn_t pcish5_serr_irq(int irq, void *dev_id, struct pt_regs *regs)
|
static irqreturn_t pcish5_serr_irq(int irq, void *dev_id)
|
||||||
{
|
{
|
||||||
printk("SERR IRQ\n");
|
printk("SERR IRQ\n");
|
||||||
|
|
||||||
|
|
|
@ -282,7 +282,7 @@ static long last_rtc_update = 0;
|
||||||
* timer_interrupt() needs to keep up the real-time clock,
|
* timer_interrupt() needs to keep up the real-time clock,
|
||||||
* as well as call the "do_timer()" routine every clocktick
|
* as well as call the "do_timer()" routine every clocktick
|
||||||
*/
|
*/
|
||||||
static inline void do_timer_interrupt(int irq, struct pt_regs *regs)
|
static inline void do_timer_interrupt(void)
|
||||||
{
|
{
|
||||||
unsigned long long current_ctc;
|
unsigned long long current_ctc;
|
||||||
asm ("getcon cr62, %0" : "=r" (current_ctc));
|
asm ("getcon cr62, %0" : "=r" (current_ctc));
|
||||||
|
@ -290,9 +290,10 @@ static inline void do_timer_interrupt(int irq, struct pt_regs *regs)
|
||||||
|
|
||||||
do_timer(1);
|
do_timer(1);
|
||||||
#ifndef CONFIG_SMP
|
#ifndef CONFIG_SMP
|
||||||
update_process_times(user_mode(regs));
|
update_process_times(user_mode(get_irq_regs()));
|
||||||
#endif
|
#endif
|
||||||
profile_tick(CPU_PROFILING, regs);
|
if (current->pid)
|
||||||
|
profile_tick(CPU_PROFILING);
|
||||||
|
|
||||||
#ifdef CONFIG_HEARTBEAT
|
#ifdef CONFIG_HEARTBEAT
|
||||||
{
|
{
|
||||||
|
@ -323,7 +324,7 @@ static inline void do_timer_interrupt(int irq, struct pt_regs *regs)
|
||||||
* Time Stamp Counter value at the time of the timer interrupt, so that
|
* Time Stamp Counter value at the time of the timer interrupt, so that
|
||||||
* we later on can estimate the time of day more exactly.
|
* we later on can estimate the time of day more exactly.
|
||||||
*/
|
*/
|
||||||
static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
static irqreturn_t timer_interrupt(int irq, void *dev_id)
|
||||||
{
|
{
|
||||||
unsigned long timer_status;
|
unsigned long timer_status;
|
||||||
|
|
||||||
|
@ -340,7 +341,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||||
* locally disabled. -arca
|
* locally disabled. -arca
|
||||||
*/
|
*/
|
||||||
write_lock(&xtime_lock);
|
write_lock(&xtime_lock);
|
||||||
do_timer_interrupt(irq, regs);
|
do_timer_interrupt();
|
||||||
write_unlock(&xtime_lock);
|
write_unlock(&xtime_lock);
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
|
@ -465,9 +466,10 @@ static __init unsigned int get_cpu_hz(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t sh64_rtc_interrupt(int irq, void *dev_id,
|
static irqreturn_t sh64_rtc_interrupt(int irq, void *dev_id)
|
||||||
struct pt_regs *regs)
|
|
||||||
{
|
{
|
||||||
|
struct pt_regs *regs = get_irq_regs();
|
||||||
|
|
||||||
ctrl_outb(0, RCR1); /* Disable Carry Interrupts */
|
ctrl_outb(0, RCR1); /* Disable Carry Interrupts */
|
||||||
regs->regs[3] = 1; /* Using r3 */
|
regs->regs[3] = 1; /* Using r3 */
|
||||||
|
|
||||||
|
|
|
@ -29,13 +29,13 @@ unsigned long epld_virt;
|
||||||
/* Note the SMSC SuperIO chip and SMSC LAN chip interrupts are all muxed onto
|
/* Note the SMSC SuperIO chip and SMSC LAN chip interrupts are all muxed onto
|
||||||
the same SH-5 interrupt */
|
the same SH-5 interrupt */
|
||||||
|
|
||||||
static irqreturn_t cayman_interrupt_smsc(int irq, void *dev_id, struct pt_regs *regs)
|
static irqreturn_t cayman_interrupt_smsc(int irq, void *dev_id)
|
||||||
{
|
{
|
||||||
printk(KERN_INFO "CAYMAN: spurious SMSC interrupt\n");
|
printk(KERN_INFO "CAYMAN: spurious SMSC interrupt\n");
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t cayman_interrupt_pci2(int irq, void *dev_id, struct pt_regs *regs)
|
static irqreturn_t cayman_interrupt_pci2(int irq, void *dev_id)
|
||||||
{
|
{
|
||||||
printk(KERN_INFO "CAYMAN: spurious PCI interrupt, IRQ %d\n", irq);
|
printk(KERN_INFO "CAYMAN: spurious PCI interrupt, IRQ %d\n", irq);
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
|
|
1
include/asm-sh64/irq_regs.h
Normal file
1
include/asm-sh64/irq_regs.h
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#include <asm-generic/irq_regs.h>
|
Loading…
Reference in a new issue