Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
d3c60047
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d3c60047
编写于
10月 16, 2008
作者:
T
Thomas Gleixner
提交者:
Ingo Molnar
10月 16, 2008
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
genirq: cleanup the sparseirq modifications
Signed-off-by:
N
Thomas Gleixner
<
tglx@linutronix.de
>
上级
a1aca5de
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
48 addition
and
55 deletion
+48
-55
kernel/irq/chip.c
kernel/irq/chip.c
+13
-30
kernel/irq/handle.c
kernel/irq/handle.c
+1
-2
kernel/irq/manage.c
kernel/irq/manage.c
+23
-15
kernel/irq/proc.c
kernel/irq/proc.c
+1
-0
kernel/irq/spurious.c
kernel/irq/spurious.c
+10
-8
未找到文件。
kernel/irq/chip.c
浏览文件 @
d3c60047
...
...
@@ -24,11 +24,9 @@
*/
void
dynamic_irq_init
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
/* first time to use this irq_desc */
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
WARN
(
1
,
KERN_ERR
"Trying to initialize invalid IRQ%d
\n
"
,
irq
);
return
;
...
...
@@ -58,10 +56,9 @@ void dynamic_irq_init(unsigned int irq)
*/
void
dynamic_irq_cleanup
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
WARN
(
1
,
KERN_ERR
"Trying to cleanup invalid IRQ%d
\n
"
,
irq
);
return
;
...
...
@@ -90,10 +87,9 @@ void dynamic_irq_cleanup(unsigned int irq)
*/
int
set_irq_chip
(
unsigned
int
irq
,
struct
irq_chip
*
chip
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
WARN
(
1
,
KERN_ERR
"Trying to install chip for IRQ%d
\n
"
,
irq
);
return
-
EINVAL
;
...
...
@@ -118,11 +114,10 @@ EXPORT_SYMBOL(set_irq_chip);
*/
int
set_irq_type
(
unsigned
int
irq
,
unsigned
int
type
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
int
ret
=
-
ENXIO
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to set irq type for IRQ%d
\n
"
,
irq
);
return
-
ENODEV
;
...
...
@@ -147,10 +142,9 @@ EXPORT_SYMBOL(set_irq_type);
*/
int
set_irq_data
(
unsigned
int
irq
,
void
*
data
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to install controller data for IRQ%d
\n
"
,
irq
);
...
...
@@ -173,10 +167,9 @@ EXPORT_SYMBOL(set_irq_data);
*/
int
set_irq_msi
(
unsigned
int
irq
,
struct
msi_desc
*
entry
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to install msi data for IRQ%d
\n
"
,
irq
);
...
...
@@ -200,10 +193,9 @@ int set_irq_msi(unsigned int irq, struct msi_desc *entry)
*/
int
set_irq_chip_data
(
unsigned
int
irq
,
void
*
data
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to install chip data for IRQ%d
\n
"
,
irq
);
...
...
@@ -228,9 +220,8 @@ EXPORT_SYMBOL(set_irq_chip_data);
*/
static
void
default_enable
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
desc
=
irq_to_desc
(
irq
);
desc
->
chip
->
unmask
(
irq
);
desc
->
status
&=
~
IRQ_MASKED
;
}
...
...
@@ -247,11 +238,9 @@ static void default_disable(unsigned int irq)
*/
static
unsigned
int
default_startup
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
desc
=
irq_to_desc
(
irq
);
desc
->
chip
->
enable
(
irq
);
return
0
;
}
...
...
@@ -260,9 +249,8 @@ static unsigned int default_startup(unsigned int irq)
*/
static
void
default_shutdown
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
desc
=
irq_to_desc
(
irq
);
desc
->
chip
->
mask
(
irq
);
desc
->
status
|=
IRQ_MASKED
;
}
...
...
@@ -550,10 +538,9 @@ void
__set_irq_handler
(
unsigned
int
irq
,
irq_flow_handler_t
handle
,
int
is_chained
,
const
char
*
name
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to install type control for IRQ%d
\n
"
,
irq
);
...
...
@@ -614,13 +601,11 @@ set_irq_chip_and_handler_name(unsigned int irq, struct irq_chip *chip,
void
__init
set_irq_noprobe
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to mark IRQ%d non-probeable
\n
"
,
irq
);
return
;
}
...
...
@@ -631,13 +616,11 @@ void __init set_irq_noprobe(unsigned int irq)
void
__init
set_irq_probe
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
{
printk
(
KERN_ERR
"Trying to mark IRQ%d probeable
\n
"
,
irq
);
return
;
}
...
...
kernel/irq/handle.c
浏览文件 @
d3c60047
...
...
@@ -68,9 +68,8 @@ struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = {
*/
static
void
ack_bad
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
desc
=
irq_to_desc
(
irq
);
print_irq_desc
(
irq
,
desc
);
ack_bad_irq
(
irq
);
}
...
...
kernel/irq/manage.c
浏览文件 @
d3c60047
...
...
@@ -140,10 +140,9 @@ int irq_select_affinity(unsigned int irq)
*/
void
disable_irq_nosync
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
;
...
...
@@ -170,9 +169,8 @@ EXPORT_SYMBOL(disable_irq_nosync);
*/
void
disable_irq
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
;
...
...
@@ -213,10 +211,9 @@ static void __enable_irq(struct irq_desc *desc, unsigned int irq)
*/
void
enable_irq
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
unsigned
long
flags
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
;
...
...
@@ -291,10 +288,9 @@ EXPORT_SYMBOL(set_irq_wake);
*/
int
can_request_irq
(
unsigned
int
irq
,
unsigned
long
irqflags
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
struct
irqaction
*
action
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
0
;
...
...
@@ -355,16 +351,15 @@ int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
* Internal function to register an irqaction - typically used to
* allocate special interrupts that are part of the architecture.
*/
int
setup_irq
(
unsigned
int
irq
,
struct
irqaction
*
new
)
static
int
__setup_irq
(
unsigned
int
irq
,
struct
irq_desc
*
desc
,
struct
irqaction
*
new
)
{
struct
irq_desc
*
desc
;
struct
irqaction
*
old
,
**
p
;
const
char
*
old_name
=
NULL
;
unsigned
long
flags
;
int
shared
=
0
;
int
ret
;
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
-
EINVAL
;
...
...
@@ -503,6 +498,20 @@ int setup_irq(unsigned int irq, struct irqaction *new)
return
-
EBUSY
;
}
/**
* setup_irq - setup an interrupt
* @irq: Interrupt line to setup
* @act: irqaction for the interrupt
*
* Used to statically setup interrupts in the early boot process.
*/
int
setup_irq
(
unsigned
int
irq
,
struct
irqaction
*
act
)
{
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
);
return
__setup_irq
(
irq
,
desc
,
act
);
}
/**
* free_irq - free an interrupt
* @irq: Interrupt line to free
...
...
@@ -519,13 +528,12 @@ int setup_irq(unsigned int irq, struct irqaction *new)
*/
void
free_irq
(
unsigned
int
irq
,
void
*
dev_id
)
{
struct
irq_desc
*
desc
;
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
)
;
struct
irqaction
**
p
;
unsigned
long
flags
;
WARN_ON
(
in_interrupt
());
desc
=
irq_to_desc
(
irq
);
if
(
!
desc
)
return
;
...
...
@@ -624,8 +632,8 @@ int request_irq(unsigned int irq, irq_handler_t handler,
unsigned
long
irqflags
,
const
char
*
devname
,
void
*
dev_id
)
{
struct
irqaction
*
action
;
int
retval
;
struct
irq_desc
*
desc
;
int
retval
;
#ifdef CONFIG_LOCKDEP
/*
...
...
@@ -662,7 +670,7 @@ int request_irq(unsigned int irq, irq_handler_t handler,
action
->
next
=
NULL
;
action
->
dev_id
=
dev_id
;
retval
=
setup_irq
(
irq
,
action
);
retval
=
__setup_irq
(
irq
,
desc
,
action
);
if
(
retval
)
kfree
(
action
);
...
...
kernel/irq/proc.c
浏览文件 @
d3c60047
...
...
@@ -215,6 +215,7 @@ void unregister_handler_proc(unsigned int irq, struct irqaction *action)
{
if
(
action
->
dir
)
{
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
);
remove_proc_entry
(
action
->
dir
->
name
,
desc
->
dir
);
}
}
...
...
kernel/irq/spurious.c
浏览文件 @
d3c60047
...
...
@@ -26,8 +26,7 @@ static DEFINE_TIMER(poll_spurious_irq_timer, poll_spurious_irqs, 0, 0);
static
int
try_one_irq
(
int
irq
,
struct
irq_desc
*
desc
)
{
struct
irqaction
*
action
;
int
ok
=
0
;
int
work
=
0
;
/* Did we do work for a real IRQ */
int
ok
=
0
,
work
=
0
;
spin_lock
(
&
desc
->
lock
);
/* Already running on another processor */
...
...
@@ -88,9 +87,8 @@ static int try_one_irq(int irq, struct irq_desc *desc)
static
int
misrouted_irq
(
int
irq
)
{
int
i
;
int
ok
=
0
;
struct
irq_desc
*
desc
;
int
i
,
ok
=
0
;
for_each_irq_desc
(
i
,
desc
)
{
if
(
!
i
)
...
...
@@ -108,8 +106,8 @@ static int misrouted_irq(int irq)
static
void
poll_spurious_irqs
(
unsigned
long
dummy
)
{
int
i
;
struct
irq_desc
*
desc
;
int
i
;
for_each_irq_desc
(
i
,
desc
)
{
unsigned
int
status
;
...
...
@@ -126,7 +124,8 @@ static void poll_spurious_irqs(unsigned long dummy)
try_one_irq
(
i
,
desc
);
}
mod_timer
(
&
poll_spurious_irq_timer
,
jiffies
+
POLL_SPURIOUS_IRQ_INTERVAL
);
mod_timer
(
&
poll_spurious_irq_timer
,
jiffies
+
POLL_SPURIOUS_IRQ_INTERVAL
);
}
/*
...
...
@@ -177,7 +176,9 @@ report_bad_irq(unsigned int irq, struct irq_desc *desc, irqreturn_t action_ret)
}
}
static
inline
int
try_misrouted_irq
(
unsigned
int
irq
,
struct
irq_desc
*
desc
,
irqreturn_t
action_ret
)
static
inline
int
try_misrouted_irq
(
unsigned
int
irq
,
struct
irq_desc
*
desc
,
irqreturn_t
action_ret
)
{
struct
irqaction
*
action
;
...
...
@@ -253,7 +254,8 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc,
desc
->
depth
++
;
desc
->
chip
->
disable
(
irq
);
mod_timer
(
&
poll_spurious_irq_timer
,
jiffies
+
POLL_SPURIOUS_IRQ_INTERVAL
);
mod_timer
(
&
poll_spurious_irq_timer
,
jiffies
+
POLL_SPURIOUS_IRQ_INTERVAL
);
}
desc
->
irqs_unhandled
=
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录