[PATCH] minimal alpha pt_regs fixes
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Acked-by: Jeff Garzik <jeff@garzik.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
2850bc2737
commit
8774cb815f
5 changed files with 14 additions and 6 deletions
|
@ -129,6 +129,7 @@ show_interrupts(struct seq_file *p, void *v)
|
|||
void
|
||||
handle_irq(int irq, struct pt_regs * regs)
|
||||
{
|
||||
struct pt_regs *old_regs;
|
||||
/*
|
||||
* We ack quickly, we don't want the irq controller
|
||||
* thinking we're snobs just because some other CPU has
|
||||
|
@ -149,6 +150,7 @@ handle_irq(int irq, struct pt_regs * regs)
|
|||
return;
|
||||
}
|
||||
|
||||
old_regs = set_irq_regs(regs);
|
||||
irq_enter();
|
||||
/*
|
||||
* __do_IRQ() must be called with IPL_MAX. Note that we do not
|
||||
|
@ -157,6 +159,7 @@ handle_irq(int irq, struct pt_regs * regs)
|
|||
* at IPL 0.
|
||||
*/
|
||||
local_irq_disable();
|
||||
__do_IRQ(irq, regs);
|
||||
__do_IRQ(irq);
|
||||
irq_exit();
|
||||
set_irq_regs(old_regs);
|
||||
}
|
||||
|
|
|
@ -133,7 +133,7 @@ extern void smp_percpu_timer_interrupt(struct pt_regs *);
|
|||
/* extern void reset_for_srm(void); */
|
||||
|
||||
/* time.c */
|
||||
extern irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs);
|
||||
extern irqreturn_t timer_interrupt(int irq, void *dev);
|
||||
extern void common_init_rtc(void);
|
||||
extern unsigned long est_cycle_freq;
|
||||
|
||||
|
|
|
@ -515,12 +515,15 @@ smp_cpus_done(unsigned int max_cpus)
|
|||
void
|
||||
smp_percpu_timer_interrupt(struct pt_regs *regs)
|
||||
{
|
||||
struct pt_regs *old_regs;
|
||||
int cpu = smp_processor_id();
|
||||
unsigned long user = user_mode(regs);
|
||||
struct cpuinfo_alpha *data = &cpu_data[cpu];
|
||||
|
||||
old_regs = set_irq_regs(regs);
|
||||
|
||||
/* Record kernel PC. */
|
||||
profile_tick(CPU_PROFILING, regs);
|
||||
profile_tick(CPU_PROFILING);
|
||||
|
||||
if (!--data->prof_counter) {
|
||||
/* We need to make like a normal interrupt -- otherwise
|
||||
|
@ -534,6 +537,7 @@ smp_percpu_timer_interrupt(struct pt_regs *regs)
|
|||
|
||||
irq_exit();
|
||||
}
|
||||
set_irq_regs(old_regs);
|
||||
}
|
||||
|
||||
int __init
|
||||
|
|
|
@ -104,7 +104,7 @@ unsigned long long sched_clock(void)
|
|||
* timer_interrupt() needs to keep up the real-time clock,
|
||||
* as well as call the "do_timer()" routine every clocktick
|
||||
*/
|
||||
irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs)
|
||||
irqreturn_t timer_interrupt(int irq, void *dev)
|
||||
{
|
||||
unsigned long delta;
|
||||
__u32 now;
|
||||
|
@ -112,7 +112,7 @@ irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs)
|
|||
|
||||
#ifndef CONFIG_SMP
|
||||
/* Not SMP, do kernel PC profiling here. */
|
||||
profile_tick(CPU_PROFILING, regs);
|
||||
profile_tick(CPU_PROFILING);
|
||||
#endif
|
||||
|
||||
write_seqlock(&xtime_lock);
|
||||
|
@ -132,7 +132,7 @@ irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs)
|
|||
while (nticks > 0) {
|
||||
do_timer(1);
|
||||
#ifndef CONFIG_SMP
|
||||
update_process_times(user_mode(regs));
|
||||
update_process_times(user_mode(get_irq_regs()));
|
||||
#endif
|
||||
nticks--;
|
||||
}
|
||||
|
|
1
include/asm-alpha/irq_regs.h
Normal file
1
include/asm-alpha/irq_regs.h
Normal file
|
@ -0,0 +1 @@
|
|||
#include <asm-generic/irq_regs.h>
|
Loading…
Reference in a new issue