git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
arch
/
alpha
/
kernel
/
irq_alpha.c
diff --git
a/arch/alpha/kernel/irq_alpha.c
b/arch/alpha/kernel/irq_alpha.c
index
e6ded33
..
e16aeb6
100644
(file)
--- a/
arch/alpha/kernel/irq_alpha.c
+++ b/
arch/alpha/kernel/irq_alpha.c
@@
-2,11
+2,11
@@
* Alpha specific irq code.
*/
* Alpha specific irq code.
*/
-#include <linux/config.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/irq.h>
#include <linux/kernel_stat.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/irq.h>
#include <linux/kernel_stat.h>
+#include <linux/module.h>
#include <asm/machvec.h>
#include <asm/dma.h>
#include <asm/machvec.h>
#include <asm/dma.h>
@@
-17,6
+17,7
@@
/* Hack minimum IPL during interrupt processing for broken hardware. */
#ifdef CONFIG_ALPHA_BROKEN_IRQ_MASK
int __min_ipl;
/* Hack minimum IPL during interrupt processing for broken hardware. */
#ifdef CONFIG_ALPHA_BROKEN_IRQ_MASK
int __min_ipl;
+EXPORT_SYMBOL(__min_ipl);
#endif
/*
#endif
/*
@@
-31,6
+32,7
@@
dummy_perf(unsigned long vector, struct pt_regs *regs)
}
void (*perf_irq)(unsigned long, struct pt_regs *) = dummy_perf;
}
void (*perf_irq)(unsigned long, struct pt_regs *) = dummy_perf;
+EXPORT_SYMBOL(perf_irq);
/*
* The main interrupt entry point.
/*
* The main interrupt entry point.
@@
-40,6
+42,7
@@
asmlinkage void
do_entInt(unsigned long type, unsigned long vector,
unsigned long la_ptr, struct pt_regs *regs)
{
do_entInt(unsigned long type, unsigned long vector,
unsigned long la_ptr, struct pt_regs *regs)
{
+ struct pt_regs *old_regs;
switch (type) {
case 0:
#ifdef CONFIG_SMP
switch (type) {
case 0:
#ifdef CONFIG_SMP
@@
-52,26
+55,34
@@
do_entInt(unsigned long type, unsigned long vector,
#endif
break;
case 1:
#endif
break;
case 1:
+ old_regs = set_irq_regs(regs);
#ifdef CONFIG_SMP
{
long cpu;
#ifdef CONFIG_SMP
{
long cpu;
+
+ local_irq_disable();
smp_percpu_timer_interrupt(regs);
cpu = smp_processor_id();
if (cpu != boot_cpuid) {
kstat_cpu(cpu).irqs[RTC_IRQ]++;
} else {
smp_percpu_timer_interrupt(regs);
cpu = smp_processor_id();
if (cpu != boot_cpuid) {
kstat_cpu(cpu).irqs[RTC_IRQ]++;
} else {
- handle_irq(RTC_IRQ
, regs
);
+ handle_irq(RTC_IRQ);
}
}
#else
}
}
#else
- handle_irq(RTC_IRQ
, regs
);
+ handle_irq(RTC_IRQ);
#endif
#endif
+ set_irq_regs(old_regs);
return;
case 2:
return;
case 2:
- alpha_mv.machine_check(vector, la_ptr, regs);
+ old_regs = set_irq_regs(regs);
+ alpha_mv.machine_check(vector, la_ptr);
+ set_irq_regs(old_regs);
return;
case 3:
return;
case 3:
- alpha_mv.device_interrupt(vector, regs);
+ old_regs = set_irq_regs(regs);
+ alpha_mv.device_interrupt(vector);
+ set_irq_regs(old_regs);
return;
case 4:
perf_irq(la_ptr, regs);
return;
case 4:
perf_irq(la_ptr, regs);
@@
-119,8
+130,7
@@
struct mcheck_info __mcheck_info;
void
process_mcheck_info(unsigned long vector, unsigned long la_ptr,
void
process_mcheck_info(unsigned long vector, unsigned long la_ptr,
- struct pt_regs *regs, const char *machine,
- int expected)
+ const char *machine, int expected)
{
struct el_common *mchk_header;
const char *reason;
{
struct el_common *mchk_header;
const char *reason;
@@
-147,7
+157,7
@@
process_mcheck_info(unsigned long vector, unsigned long la_ptr,
mchk_header = (struct el_common *)la_ptr;
printk(KERN_CRIT "%s machine check: vector=0x%lx pc=0x%lx code=0x%x\n",
mchk_header = (struct el_common *)la_ptr;
printk(KERN_CRIT "%s machine check: vector=0x%lx pc=0x%lx code=0x%x\n",
- machine, vector,
regs
->pc, mchk_header->code);
+ machine, vector,
get_irq_regs()
->pc, mchk_header->code);
switch (mchk_header->code) {
/* Machine check reasons. Defined according to PALcode sources. */
switch (mchk_header->code) {
/* Machine check reasons. Defined according to PALcode sources. */
@@
-188,7
+198,7
@@
process_mcheck_info(unsigned long vector, unsigned long la_ptr,
printk(KERN_CRIT "machine check type: %s%s\n",
reason, mchk_header->retry ? " (retryable)" : "");
printk(KERN_CRIT "machine check type: %s%s\n",
reason, mchk_header->retry ? " (retryable)" : "");
- dik_show_regs(
regs
, NULL);
+ dik_show_regs(
get_irq_regs()
, NULL);
#ifdef CONFIG_VERBOSE_MCHECK
if (alpha_verbose_mcheck > 1) {
#ifdef CONFIG_VERBOSE_MCHECK
if (alpha_verbose_mcheck > 1) {
@@
-213,7
+223,7
@@
static unsigned int rtc_startup(unsigned int irq) { return 0; }
struct irqaction timer_irqaction = {
.handler = timer_interrupt,
struct irqaction timer_irqaction = {
.handler = timer_interrupt,
- .flags =
SA_INTERRUPT
,
+ .flags =
IRQF_DISABLED
,
.name = "timer",
};
.name = "timer",
};
@@
-231,7
+241,7
@@
void __init
init_rtc_irq(void)
{
irq_desc[RTC_IRQ].status = IRQ_DISABLED;
init_rtc_irq(void)
{
irq_desc[RTC_IRQ].status = IRQ_DISABLED;
- irq_desc[RTC_IRQ].
handler
= &rtc_irq_type;
+ irq_desc[RTC_IRQ].
chip
= &rtc_irq_type;
setup_irq(RTC_IRQ, &timer_irqaction);
}
setup_irq(RTC_IRQ, &timer_irqaction);
}