Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+18 -12
+3 -1
arch/sh64/kernel/irq.c
··· 94 94 */ 95 95 asmlinkage int do_IRQ(unsigned long vector_num, struct pt_regs * regs) 96 96 { 97 + struct pt_regs *old_regs = set_irq_regs(regs); 97 98 int irq; 98 99 99 100 irq_enter(); ··· 102 101 irq = irq_demux(vector_num); 103 102 104 103 if (irq >= 0) { 105 - __do_IRQ(irq, regs); 104 + __do_IRQ(irq); 106 105 } else { 107 106 printk("unexpected IRQ trap at vector %03lx\n", vector_num); 108 107 } 109 108 110 109 irq_exit(); 111 110 111 + set_irq_regs(old_regs); 112 112 return 1; 113 113 } 114 114
+3 -2
arch/sh64/kernel/pci_sh5.c
··· 340 340 return result; 341 341 } 342 342 343 - irqreturn_t pcish5_err_irq(int irq, void *dev_id, struct pt_regs *regs) 343 + static irqreturn_t pcish5_err_irq(int irq, void *dev_id) 344 344 { 345 + struct pt_regs *regs = get_irq_regs(); 345 346 unsigned pci_int, pci_air, pci_cir, pci_aint; 346 347 347 348 pci_int = SH5PCI_READ(INT); ··· 369 368 return IRQ_HANDLED; 370 369 } 371 370 372 - irqreturn_t pcish5_serr_irq(int irq, void *dev_id, struct pt_regs *regs) 371 + static irqreturn_t pcish5_serr_irq(int irq, void *dev_id) 373 372 { 374 373 printk("SERR IRQ\n"); 375 374
+9 -7
arch/sh64/kernel/time.c
··· 282 282 * timer_interrupt() needs to keep up the real-time clock, 283 283 * as well as call the "do_timer()" routine every clocktick 284 284 */ 285 - static inline void do_timer_interrupt(int irq, struct pt_regs *regs) 285 + static inline void do_timer_interrupt(void) 286 286 { 287 287 unsigned long long current_ctc; 288 288 asm ("getcon cr62, %0" : "=r" (current_ctc)); ··· 290 290 291 291 do_timer(1); 292 292 #ifndef CONFIG_SMP 293 - update_process_times(user_mode(regs)); 293 + update_process_times(user_mode(get_irq_regs())); 294 294 #endif 295 - profile_tick(CPU_PROFILING, regs); 295 + if (current->pid) 296 + profile_tick(CPU_PROFILING); 296 297 297 298 #ifdef CONFIG_HEARTBEAT 298 299 { ··· 324 323 * Time Stamp Counter value at the time of the timer interrupt, so that 325 324 * we later on can estimate the time of day more exactly. 326 325 */ 327 - static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) 326 + static irqreturn_t timer_interrupt(int irq, void *dev_id) 328 327 { 329 328 unsigned long timer_status; 330 329 ··· 341 340 * locally disabled. -arca 342 341 */ 343 342 write_lock(&xtime_lock); 344 - do_timer_interrupt(irq, regs); 343 + do_timer_interrupt(); 345 344 write_unlock(&xtime_lock); 346 345 347 346 return IRQ_HANDLED; ··· 466 465 #endif 467 466 } 468 467 469 - static irqreturn_t sh64_rtc_interrupt(int irq, void *dev_id, 470 - struct pt_regs *regs) 468 + static irqreturn_t sh64_rtc_interrupt(int irq, void *dev_id) 471 469 { 470 + struct pt_regs *regs = get_irq_regs(); 471 + 472 472 ctrl_outb(0, RCR1); /* Disable Carry Interrupts */ 473 473 regs->regs[3] = 1; /* Using r3 */ 474 474
+2 -2
arch/sh64/mach-cayman/irq.c
··· 29 29 /* Note the SMSC SuperIO chip and SMSC LAN chip interrupts are all muxed onto 30 30 the same SH-5 interrupt */ 31 31 32 - static irqreturn_t cayman_interrupt_smsc(int irq, void *dev_id, struct pt_regs *regs) 32 + static irqreturn_t cayman_interrupt_smsc(int irq, void *dev_id) 33 33 { 34 34 printk(KERN_INFO "CAYMAN: spurious SMSC interrupt\n"); 35 35 return IRQ_NONE; 36 36 } 37 37 38 - static irqreturn_t cayman_interrupt_pci2(int irq, void *dev_id, struct pt_regs *regs) 38 + static irqreturn_t cayman_interrupt_pci2(int irq, void *dev_id) 39 39 { 40 40 printk(KERN_INFO "CAYMAN: spurious PCI interrupt, IRQ %d\n", irq); 41 41 return IRQ_NONE;
+1
include/asm-sh64/irq_regs.h
··· 1 + #include <asm-generic/irq_regs.h>