git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Pull button into test branch
[pandora-kernel.git]
/
arch
/
sparc
/
kernel
/
irq.c
diff --git
a/arch/sparc/kernel/irq.c
b/arch/sparc/kernel/irq.c
index
cde7332
..
5b4841d
100644
(file)
--- a/
arch/sparc/kernel/irq.c
+++ b/
arch/sparc/kernel/irq.c
@@
-46,6
+46,7
@@
#include <asm/pgtable.h>
#include <asm/pcic.h>
#include <asm/cacheflush.h>
#include <asm/pgtable.h>
#include <asm/pcic.h>
#include <asm/cacheflush.h>
+#include <asm/irq_regs.h>
#ifdef CONFIG_SMP
#define SMP_NOP2 "nop; nop;\n\t"
#ifdef CONFIG_SMP
#define SMP_NOP2 "nop; nop;\n\t"
@@
-133,8
+134,8
@@
static void irq_panic(void)
prom_halt();
}
prom_halt();
}
-void (*sparc_init_timers)(irq
return_t (*)(int, void *,struct pt_regs *)
) =
- (void (*)(irq
return_t (*)(int, void *,struct pt_regs *)
)) irq_panic;
+void (*sparc_init_timers)(irq
_handler_t
) =
+ (void (*)(irq
_handler_t
)) irq_panic;
/*
* Dave Redman (djhr@tadpole.co.uk)
/*
* Dave Redman (djhr@tadpole.co.uk)
@@
-319,17
+320,19
@@
void unexpected_irq(int irq, void *dev_id, struct pt_regs * regs)
void handler_irq(int irq, struct pt_regs * regs)
{
void handler_irq(int irq, struct pt_regs * regs)
{
+ struct pt_regs *old_regs;
struct irqaction * action;
int cpu = smp_processor_id();
#ifdef CONFIG_SMP
extern void smp4m_irq_rotate(int cpu);
#endif
struct irqaction * action;
int cpu = smp_processor_id();
#ifdef CONFIG_SMP
extern void smp4m_irq_rotate(int cpu);
#endif
+ old_regs = set_irq_regs(regs);
irq_enter();
disable_pil_irq(irq);
#ifdef CONFIG_SMP
/* Only rotate on lower priority IRQ's (scsi, ethernet, etc.). */
irq_enter();
disable_pil_irq(irq);
#ifdef CONFIG_SMP
/* Only rotate on lower priority IRQ's (scsi, ethernet, etc.). */
- if(
irq < 10
)
+ if(
(sparc_cpu_model==sun4m) && (irq < 10)
)
smp4m_irq_rotate(cpu);
#endif
action = sparc_irq[irq].action;
smp4m_irq_rotate(cpu);
#endif
action = sparc_irq[irq].action;
@@
-338,27
+341,31
@@
void handler_irq(int irq, struct pt_regs * regs)
do {
if (!action || !action->handler)
unexpected_irq(irq, NULL, regs);
do {
if (!action || !action->handler)
unexpected_irq(irq, NULL, regs);
- action->handler(irq, action->dev_id
, regs
);
+ action->handler(irq, action->dev_id);
action = action->next;
} while (action);
sparc_irq[irq].flags &= ~SPARC_IRQ_INPROGRESS;
enable_pil_irq(irq);
irq_exit();
action = action->next;
} while (action);
sparc_irq[irq].flags &= ~SPARC_IRQ_INPROGRESS;
enable_pil_irq(irq);
irq_exit();
+ set_irq_regs(old_regs);
}
#ifdef CONFIG_BLK_DEV_FD
}
#ifdef CONFIG_BLK_DEV_FD
-extern void floppy_interrupt(int irq, void *dev_id
, struct pt_regs *regs
);
+extern void floppy_interrupt(int irq, void *dev_id);
void sparc_floppy_irq(int irq, void *dev_id, struct pt_regs *regs)
{
void sparc_floppy_irq(int irq, void *dev_id, struct pt_regs *regs)
{
+ struct pt_regs *old_regs;
int cpu = smp_processor_id();
int cpu = smp_processor_id();
+ old_regs = set_irq_regs(regs);
disable_pil_irq(irq);
irq_enter();
kstat_cpu(cpu).irqs[irq]++;
disable_pil_irq(irq);
irq_enter();
kstat_cpu(cpu).irqs[irq]++;
- floppy_interrupt(irq, dev_id
, regs
);
+ floppy_interrupt(irq, dev_id);
irq_exit();
enable_pil_irq(irq);
irq_exit();
enable_pil_irq(irq);
+ set_irq_regs(old_regs);
// XXX Eek, it's totally changed with preempt_count() and such
// if (softirq_pending(cpu))
// do_softirq();
// XXX Eek, it's totally changed with preempt_count() and such
// if (softirq_pending(cpu))
// do_softirq();
@@
-369,7
+376,7
@@
void sparc_floppy_irq(int irq, void *dev_id, struct pt_regs *regs)
* thus no sharing possible.
*/
int request_fast_irq(unsigned int irq,
* thus no sharing possible.
*/
int request_fast_irq(unsigned int irq,
- irq
return_t (*handler)(int, void *, struct pt_regs *)
,
+ irq
_handler_t handler
,
unsigned long irqflags, const char *devname)
{
struct irqaction *action;
unsigned long irqflags, const char *devname)
{
struct irqaction *action;
@@
-418,7
+425,7
@@
int request_fast_irq(unsigned int irq,
}
if (action == NULL)
}
if (action == NULL)
- action =
(struct irqaction *)
kmalloc(sizeof(struct irqaction),
+ action = kmalloc(sizeof(struct irqaction),
GFP_ATOMIC);
if (!action) {
GFP_ATOMIC);
if (!action) {
@@
-468,7
+475,7
@@
out:
}
int request_irq(unsigned int irq,
}
int request_irq(unsigned int irq,
- irq
return_t (*handler)(int, void *, struct pt_regs *)
,
+ irq
_handler_t handler
,
unsigned long irqflags, const char * devname, void *dev_id)
{
struct irqaction * action, **actionp;
unsigned long irqflags, const char * devname, void *dev_id)
{
struct irqaction * action, **actionp;
@@
-478,7
+485,7
@@
int request_irq(unsigned int irq,
if (sparc_cpu_model == sun4d) {
extern int sun4d_request_irq(unsigned int,
if (sparc_cpu_model == sun4d) {
extern int sun4d_request_irq(unsigned int,
- irq
return_t (*)(int, void *, struct pt_regs *)
,
+ irq
_handler_t
,
unsigned long, const char *, void *);
return sun4d_request_irq(irq, handler, irqflags, devname, dev_id);
}
unsigned long, const char *, void *);
return sun4d_request_irq(irq, handler, irqflags, devname, dev_id);
}
@@
-521,7
+528,7
@@
int request_irq(unsigned int irq,
}
if (action == NULL)
}
if (action == NULL)
- action =
(struct irqaction *)
kmalloc(sizeof(struct irqaction),
+ action = kmalloc(sizeof(struct irqaction),
GFP_ATOMIC);
if (!action) {
GFP_ATOMIC);
if (!action) {