Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
cris
kernel
irq.c
Go to the documentation of this file.
1
/*
2
*
3
* linux/arch/cris/kernel/irq.c
4
*
5
* Copyright (c) 2000,2007 Axis Communications AB
6
*
7
* Authors: Bjorn Wesen (
[email protected]
)
8
*
9
* This file contains the code used by various IRQ handling routines:
10
* asking for different IRQs should be done through these routines
11
* instead of just grabbing them. Thus setups with different IRQ numbers
12
* shouldn't result in any weird surprises, and installing new handlers
13
* should be easier.
14
*
15
*/
16
17
/*
18
* IRQs are in fact implemented a bit like signal handlers for the kernel.
19
* Naturally it's not a 1:1 relation, but there are similarities.
20
*/
21
22
#include <linux/module.h>
23
#include <linux/ptrace.h>
24
#include <
linux/irq.h
>
25
26
#include <
linux/kernel_stat.h
>
27
#include <linux/signal.h>
28
#include <linux/sched.h>
29
#include <
linux/ioport.h
>
30
#include <
linux/interrupt.h
>
31
#include <linux/timex.h>
32
#include <linux/random.h>
33
#include <
linux/init.h
>
34
#include <
linux/seq_file.h
>
35
#include <linux/errno.h>
36
#include <
linux/spinlock.h
>
37
38
#include <asm/io.h>
39
#include <arch/system.h>
40
41
/* called by the assembler IRQ entry functions defined in irq.h
42
* to dispatch the interrupts to registered handlers
43
* interrupts are disabled upon entry - depending on if the
44
* interrupt was registered with IRQF_DISABLED or not, interrupts
45
* are re-enabled or not.
46
*/
47
48
asmlinkage
void
do_IRQ
(
int
irq,
struct
pt_regs
*
regs
)
49
{
50
unsigned
long
sp
;
51
struct
pt_regs
*old_regs = set_irq_regs(regs);
52
irq_enter
();
53
sp = rdsp();
54
if
(
unlikely
((sp & (
PAGE_SIZE
- 1)) < (
PAGE_SIZE
/8))) {
55
printk
(
"do_IRQ: stack overflow: %lX\n"
, sp);
56
show_stack
(
NULL
, (
unsigned
long
*)sp);
57
}
58
generic_handle_irq
(irq);
59
irq_exit
();
60
set_irq_regs(old_regs);
61
}
62
63
void
weird_irq
(
void
)
64
{
65
local_irq_disable
();
66
printk
(
"weird irq\n"
);
67
while
(1);
68
}
69
Generated on Thu Jan 10 2013 12:51:26 for Linux Kernel by
1.8.2