Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
a176973e
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
a176973e
编写于
3月 14, 2014
作者:
L
Linus Walleij
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'irq/for-gpio' of
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
into devel
上级
9e294427
c1bacbae
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
33 addition
and
1 deletion
+33
-1
include/linux/irq.h
include/linux/irq.h
+6
-0
kernel/irq/manage.c
kernel/irq/manage.c
+27
-1
未找到文件。
include/linux/irq.h
浏览文件 @
a176973e
...
...
@@ -303,6 +303,10 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)
* @irq_pm_shutdown: function called from core code on shutdown once per chip
* @irq_calc_mask: Optional function to set irq_data.mask for special cases
* @irq_print_chip: optional to print special chip info in show_interrupts
* @irq_request_resources: optional to request resources before calling
* any other callback related to this irq
* @irq_release_resources: optional to release resources acquired with
* irq_request_resources
* @flags: chip specific flags
*/
struct
irq_chip
{
...
...
@@ -336,6 +340,8 @@ struct irq_chip {
void
(
*
irq_calc_mask
)(
struct
irq_data
*
data
);
void
(
*
irq_print_chip
)(
struct
irq_data
*
data
,
struct
seq_file
*
p
);
int
(
*
irq_request_resources
)(
struct
irq_data
*
data
);
void
(
*
irq_release_resources
)(
struct
irq_data
*
data
);
unsigned
long
flags
;
};
...
...
kernel/irq/manage.c
浏览文件 @
a176973e
...
...
@@ -896,6 +896,23 @@ static void irq_setup_forced_threading(struct irqaction *new)
}
}
static
int
irq_request_resources
(
struct
irq_desc
*
desc
)
{
struct
irq_data
*
d
=
&
desc
->
irq_data
;
struct
irq_chip
*
c
=
d
->
chip
;
return
c
->
irq_request_resources
?
c
->
irq_request_resources
(
d
)
:
0
;
}
static
void
irq_release_resources
(
struct
irq_desc
*
desc
)
{
struct
irq_data
*
d
=
&
desc
->
irq_data
;
struct
irq_chip
*
c
=
d
->
chip
;
if
(
c
->
irq_release_resources
)
c
->
irq_release_resources
(
d
);
}
/*
* Internal function to register an irqaction - typically used to
* allocate special interrupts that are part of the architecture.
...
...
@@ -1091,6 +1108,13 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
}
if
(
!
shared
)
{
ret
=
irq_request_resources
(
desc
);
if
(
ret
)
{
pr_err
(
"Failed to request resources for %s (irq %d) on irqchip %s
\n
"
,
new
->
name
,
irq
,
desc
->
irq_data
.
chip
->
name
);
goto
out_mask
;
}
init_waitqueue_head
(
&
desc
->
wait_for_threads
);
/* Setup the type (level, edge polarity) if configured: */
...
...
@@ -1261,8 +1285,10 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id)
*
action_ptr
=
action
->
next
;
/* If this was the last handler, shut down the IRQ line: */
if
(
!
desc
->
action
)
if
(
!
desc
->
action
)
{
irq_shutdown
(
desc
);
irq_release_resources
(
desc
);
}
#ifdef CONFIG_SMP
/* make sure affinity_hint is cleaned up */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录