Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
8fac171f
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8fac171f
编写于
2月 04, 2011
作者:
T
Thomas Gleixner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ia64: Convert iosapic to new irq_chip functions
Signed-off-by:
N
Thomas Gleixner
<
tglx@linutronix.de
>
上级
5c217b60
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
38 addition
and
32 deletion
+38
-32
arch/ia64/kernel/iosapic.c
arch/ia64/kernel/iosapic.c
+38
-32
未找到文件。
arch/ia64/kernel/iosapic.c
浏览文件 @
8fac171f
...
...
@@ -257,7 +257,7 @@ set_rte (unsigned int gsi, unsigned int irq, unsigned int dest, int mask)
}
static
void
nop
(
unsigned
int
irq
)
nop
(
struct
irq_data
*
data
)
{
/* do nothing... */
}
...
...
@@ -287,8 +287,9 @@ kexec_disable_iosapic(void)
#endif
static
void
mask_irq
(
unsigned
int
irq
)
mask_irq
(
struct
irq_data
*
data
)
{
unsigned
int
irq
=
data
->
irq
;
u32
low32
;
int
rte_index
;
struct
iosapic_rte_info
*
rte
;
...
...
@@ -305,8 +306,9 @@ mask_irq (unsigned int irq)
}
static
void
unmask_irq
(
unsigned
int
irq
)
unmask_irq
(
struct
irq_data
*
data
)
{
unsigned
int
irq
=
data
->
irq
;
u32
low32
;
int
rte_index
;
struct
iosapic_rte_info
*
rte
;
...
...
@@ -323,9 +325,11 @@ unmask_irq (unsigned int irq)
static
int
iosapic_set_affinity
(
unsigned
int
irq
,
const
struct
cpumask
*
mask
)
iosapic_set_affinity
(
struct
irq_data
*
data
,
const
struct
cpumask
*
mask
,
bool
force
)
{
#ifdef CONFIG_SMP
unsigned
int
irq
=
data
->
irq
;
u32
high32
,
low32
;
int
cpu
,
dest
,
rte_index
;
int
redir
=
(
irq
&
IA64_IRQ_REDIRECTED
)
?
1
:
0
;
...
...
@@ -379,15 +383,16 @@ iosapic_set_affinity(unsigned int irq, const struct cpumask *mask)
*/
static
unsigned
int
iosapic_startup_level_irq
(
unsigned
int
irq
)
iosapic_startup_level_irq
(
struct
irq_data
*
data
)
{
unmask_irq
(
irq
);
unmask_irq
(
data
);
return
0
;
}
static
void
iosapic_unmask_level_irq
(
unsigned
int
irq
)
iosapic_unmask_level_irq
(
struct
irq_data
*
data
)
{
unsigned
int
irq
=
data
->
irq
;
ia64_vector
vec
=
irq_to_vector
(
irq
);
struct
iosapic_rte_info
*
rte
;
int
do_unmask_irq
=
0
;
...
...
@@ -395,16 +400,16 @@ iosapic_unmask_level_irq (unsigned int irq)
irq_complete_move
(
irq
);
if
(
unlikely
(
irq_desc
[
irq
].
status
&
IRQ_MOVE_PENDING
))
{
do_unmask_irq
=
1
;
mask_irq
(
irq
);
mask_irq
(
data
);
}
else
unmask_irq
(
irq
);
unmask_irq
(
data
);
list_for_each_entry
(
rte
,
&
iosapic_intr_info
[
irq
].
rtes
,
rte_list
)
iosapic_eoi
(
rte
->
iosapic
->
addr
,
vec
);
if
(
unlikely
(
do_unmask_irq
))
{
move_masked_irq
(
irq
);
unmask_irq
(
irq
);
unmask_irq
(
data
);
}
}
...
...
@@ -414,15 +419,15 @@ iosapic_unmask_level_irq (unsigned int irq)
#define iosapic_ack_level_irq nop
static
struct
irq_chip
irq_type_iosapic_level
=
{
.
name
=
"IO-SAPIC-level"
,
.
startup
=
iosapic_startup_level_irq
,
.
shutdown
=
iosapic_shutdown_level_irq
,
.
enable
=
iosapic_enable_level_irq
,
.
disable
=
iosapic_disable_level_irq
,
.
ack
=
iosapic_ack_level_irq
,
.
mask
=
mask_irq
,
.
unmask
=
iosapic_unmask_level_irq
,
.
set_affinity
=
iosapic_set_affinity
.
name
=
"IO-SAPIC-level"
,
.
irq_startup
=
iosapic_startup_level_irq
,
.
irq_shutdown
=
iosapic_shutdown_level_irq
,
.
irq_enable
=
iosapic_enable_level_irq
,
.
irq_disable
=
iosapic_disable_level_irq
,
.
irq_
ack
=
iosapic_ack_level_irq
,
.
irq_
mask
=
mask_irq
,
.
irq_unmask
=
iosapic_unmask_level_irq
,
.
irq_
set_affinity
=
iosapic_set_affinity
};
/*
...
...
@@ -430,9 +435,9 @@ static struct irq_chip irq_type_iosapic_level = {
*/
static
unsigned
int
iosapic_startup_edge_irq
(
unsigned
int
irq
)
iosapic_startup_edge_irq
(
struct
irq_data
*
data
)
{
unmask_irq
(
irq
);
unmask_irq
(
data
);
/*
* IOSAPIC simply drops interrupts pended while the
* corresponding pin was masked, so we can't know if an
...
...
@@ -442,8 +447,9 @@ iosapic_startup_edge_irq (unsigned int irq)
}
static
void
iosapic_ack_edge_irq
(
unsigned
int
irq
)
iosapic_ack_edge_irq
(
struct
irq_data
*
data
)
{
unsigned
int
irq
=
data
->
irq
;
struct
irq_desc
*
idesc
=
irq_desc
+
irq
;
irq_complete_move
(
irq
);
...
...
@@ -455,22 +461,22 @@ iosapic_ack_edge_irq (unsigned int irq)
*/
if
((
idesc
->
status
&
(
IRQ_PENDING
|
IRQ_DISABLED
))
==
(
IRQ_PENDING
|
IRQ_DISABLED
))
mask_irq
(
irq
);
mask_irq
(
data
);
}
#define iosapic_enable_edge_irq unmask_irq
#define iosapic_disable_edge_irq nop
static
struct
irq_chip
irq_type_iosapic_edge
=
{
.
name
=
"IO-SAPIC-edge"
,
.
startup
=
iosapic_startup_edge_irq
,
.
shutdown
=
iosapic_disable_edge_irq
,
.
enable
=
iosapic_enable_edge_irq
,
.
disable
=
iosapic_disable_edge_irq
,
.
ack
=
iosapic_ack_edge_irq
,
.
mask
=
mask_irq
,
.
unmask
=
unmask_irq
,
.
set_affinity
=
iosapic_set_affinity
.
name
=
"IO-SAPIC-edge"
,
.
irq_startup
=
iosapic_startup_edge_irq
,
.
irq_shutdown
=
iosapic_disable_edge_irq
,
.
irq_enable
=
iosapic_enable_edge_irq
,
.
irq_disable
=
iosapic_disable_edge_irq
,
.
irq_
ack
=
iosapic_ack_edge_irq
,
.
irq_
mask
=
mask_irq
,
.
irq_unmask
=
unmask_irq
,
.
irq_
set_affinity
=
iosapic_set_affinity
};
static
unsigned
int
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录