Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
0c6f8a8b
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看板
提交
0c6f8a8b
编写于
3月 28, 2011
作者:
T
Thomas Gleixner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
genirq: Remove compat code
Signed-off-by:
N
Thomas Gleixner
<
tglx@linutronix.de
>
上级
dced35ae
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
25 addition
and
452 deletion
+25
-452
include/linux/irq.h
include/linux/irq.h
+0
-117
include/linux/irqdesc.h
include/linux/irqdesc.h
+1
-59
kernel/irq/Kconfig
kernel/irq/Kconfig
+0
-4
kernel/irq/autoprobe.c
kernel/irq/autoprobe.c
+1
-3
kernel/irq/chip.c
kernel/irq/chip.c
+0
-129
kernel/irq/compat.h
kernel/irq/compat.h
+0
-72
kernel/irq/debug.h
kernel/irq/debug.h
+1
-1
kernel/irq/dummychip.c
kernel/irq/dummychip.c
+0
-9
kernel/irq/handle.c
kernel/irq/handle.c
+0
-3
kernel/irq/internals.h
kernel/irq/internals.h
+0
-10
kernel/irq/manage.c
kernel/irq/manage.c
+1
-9
kernel/irq/resend.c
kernel/irq/resend.c
+0
-1
kernel/irq/settings.h
kernel/irq/settings.h
+21
-34
kernel/irq/spurious.c
kernel/irq/spurious.c
+0
-1
未找到文件。
include/linux/irq.h
浏览文件 @
0c6f8a8b
...
...
@@ -92,18 +92,6 @@ enum {
IRQ_NO_BALANCING
=
(
1
<<
13
),
IRQ_MOVE_PCNTXT
=
(
1
<<
14
),
IRQ_NESTED_THREAD
=
(
1
<<
15
),
#ifndef CONFIG_GENERIC_HARDIRQS_NO_COMPAT
IRQ_INPROGRESS
=
(
1
<<
16
),
IRQ_REPLAY
=
(
1
<<
17
),
IRQ_WAITING
=
(
1
<<
18
),
IRQ_DISABLED
=
(
1
<<
19
),
IRQ_PENDING
=
(
1
<<
20
),
IRQ_MASKED
=
(
1
<<
21
),
IRQ_MOVE_PENDING
=
(
1
<<
22
),
IRQ_AFFINITY_SET
=
(
1
<<
23
),
IRQ_WAKEUP
=
(
1
<<
24
),
#endif
};
#define IRQF_MODIFY_MASK \
...
...
@@ -321,28 +309,6 @@ static inline void irqd_clr_chained_irq_inprogress(struct irq_data *d)
*/
struct
irq_chip
{
const
char
*
name
;
#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
unsigned
int
(
*
startup
)(
unsigned
int
irq
);
void
(
*
shutdown
)(
unsigned
int
irq
);
void
(
*
enable
)(
unsigned
int
irq
);
void
(
*
disable
)(
unsigned
int
irq
);
void
(
*
ack
)(
unsigned
int
irq
);
void
(
*
mask
)(
unsigned
int
irq
);
void
(
*
mask_ack
)(
unsigned
int
irq
);
void
(
*
unmask
)(
unsigned
int
irq
);
void
(
*
eoi
)(
unsigned
int
irq
);
void
(
*
end
)(
unsigned
int
irq
);
int
(
*
set_affinity
)(
unsigned
int
irq
,
const
struct
cpumask
*
dest
);
int
(
*
retrigger
)(
unsigned
int
irq
);
int
(
*
set_type
)(
unsigned
int
irq
,
unsigned
int
flow_type
);
int
(
*
set_wake
)(
unsigned
int
irq
,
unsigned
int
on
);
void
(
*
bus_lock
)(
unsigned
int
irq
);
void
(
*
bus_sync_unlock
)(
unsigned
int
irq
);
#endif
unsigned
int
(
*
irq_startup
)(
struct
irq_data
*
data
);
void
(
*
irq_shutdown
)(
struct
irq_data
*
data
);
void
(
*
irq_enable
)(
struct
irq_data
*
data
);
...
...
@@ -589,89 +555,6 @@ static inline struct msi_desc *irq_data_get_msi(struct irq_data *d)
return
d
->
msi_desc
;
}
#ifndef CONFIG_GENERIC_HARDIRQS_NO_COMPAT
/* Please do not use: Use the replacement functions instead */
static
inline
int
set_irq_chip
(
unsigned
int
irq
,
struct
irq_chip
*
chip
)
{
return
irq_set_chip
(
irq
,
chip
);
}
static
inline
int
set_irq_data
(
unsigned
int
irq
,
void
*
data
)
{
return
irq_set_handler_data
(
irq
,
data
);
}
static
inline
int
set_irq_chip_data
(
unsigned
int
irq
,
void
*
data
)
{
return
irq_set_chip_data
(
irq
,
data
);
}
static
inline
int
set_irq_type
(
unsigned
int
irq
,
unsigned
int
type
)
{
return
irq_set_irq_type
(
irq
,
type
);
}
static
inline
int
set_irq_msi
(
unsigned
int
irq
,
struct
msi_desc
*
entry
)
{
return
irq_set_msi_desc
(
irq
,
entry
);
}
static
inline
struct
irq_chip
*
get_irq_chip
(
unsigned
int
irq
)
{
return
irq_get_chip
(
irq
);
}
static
inline
void
*
get_irq_chip_data
(
unsigned
int
irq
)
{
return
irq_get_chip_data
(
irq
);
}
static
inline
void
*
get_irq_data
(
unsigned
int
irq
)
{
return
irq_get_handler_data
(
irq
);
}
static
inline
void
*
irq_data_get_irq_data
(
struct
irq_data
*
d
)
{
return
irq_data_get_irq_handler_data
(
d
);
}
static
inline
struct
msi_desc
*
get_irq_msi
(
unsigned
int
irq
)
{
return
irq_get_msi_desc
(
irq
);
}
static
inline
void
set_irq_noprobe
(
unsigned
int
irq
)
{
irq_set_noprobe
(
irq
);
}
static
inline
void
set_irq_probe
(
unsigned
int
irq
)
{
irq_set_probe
(
irq
);
}
static
inline
void
set_irq_nested_thread
(
unsigned
int
irq
,
int
nest
)
{
irq_set_nested_thread
(
irq
,
nest
);
}
static
inline
void
set_irq_chip_and_handler_name
(
unsigned
int
irq
,
struct
irq_chip
*
chip
,
irq_flow_handler_t
handle
,
const
char
*
name
)
{
irq_set_chip_and_handler_name
(
irq
,
chip
,
handle
,
name
);
}
static
inline
void
set_irq_chip_and_handler
(
unsigned
int
irq
,
struct
irq_chip
*
chip
,
irq_flow_handler_t
handle
)
{
irq_set_chip_and_handler
(
irq
,
chip
,
handle
);
}
static
inline
void
__set_irq_handler
(
unsigned
int
irq
,
irq_flow_handler_t
handle
,
int
is_chained
,
const
char
*
name
)
{
__irq_set_handler
(
irq
,
handle
,
is_chained
,
name
);
}
static
inline
void
set_irq_handler
(
unsigned
int
irq
,
irq_flow_handler_t
handle
)
{
irq_set_handler
(
irq
,
handle
);
}
static
inline
void
set_irq_chained_handler
(
unsigned
int
irq
,
irq_flow_handler_t
handle
)
{
irq_set_chained_handler
(
irq
,
handle
);
}
#endif
int
irq_alloc_descs
(
int
irq
,
unsigned
int
from
,
unsigned
int
cnt
,
int
node
);
void
irq_free_descs
(
unsigned
int
irq
,
unsigned
int
cnt
);
int
irq_reserve_irqs
(
unsigned
int
from
,
unsigned
int
cnt
);
...
...
include/linux/irqdesc.h
浏览文件 @
0c6f8a8b
...
...
@@ -35,32 +35,7 @@ struct timer_rand_state;
* @name: flow handler name for /proc/interrupts output
*/
struct
irq_desc
{
#ifdef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
struct
irq_data
irq_data
;
#else
/*
* This union will go away, once we fixed the direct access to
* irq_desc all over the place. The direct fields are a 1:1
* overlay of irq_data.
*/
union
{
struct
irq_data
irq_data
;
struct
{
unsigned
int
irq
;
unsigned
int
node
;
unsigned
int
pad_do_not_even_think_about_it
;
struct
irq_chip
*
chip
;
void
*
handler_data
;
void
*
chip_data
;
struct
msi_desc
*
msi_desc
;
#ifdef CONFIG_SMP
cpumask_var_t
affinity
;
#endif
};
};
#endif
struct
timer_rand_state
*
timer_rand_state
;
unsigned
int
__percpu
*
kstat_irqs
;
irq_flow_handler_t
handle_irq
;
...
...
@@ -68,11 +43,7 @@ struct irq_desc {
irq_preflow_handler_t
preflow_handler
;
#endif
struct
irqaction
*
action
;
/* IRQ action list */
#ifdef CONFIG_GENERIC_HARDIRQS_NO_COMPAT
unsigned
int
status_use_accessors
;
#else
unsigned
int
status
;
/* IRQ status */
#endif
unsigned
int
core_internal_state__do_not_mess_with_it
;
unsigned
int
depth
;
/* nested irq disables */
unsigned
int
wake_depth
;
/* nested wake enables */
...
...
@@ -127,27 +98,6 @@ static inline struct msi_desc *irq_desc_get_msi_desc(struct irq_desc *desc)
return
desc
->
irq_data
.
msi_desc
;
}
#ifndef CONFIG_GENERIC_HARDIRQS_NO_COMPAT
static
inline
struct
irq_chip
*
get_irq_desc_chip
(
struct
irq_desc
*
desc
)
{
return
irq_desc_get_chip
(
desc
);
}
static
inline
void
*
get_irq_desc_data
(
struct
irq_desc
*
desc
)
{
return
irq_desc_get_handler_data
(
desc
);
}
static
inline
void
*
get_irq_desc_chip_data
(
struct
irq_desc
*
desc
)
{
return
irq_desc_get_chip_data
(
desc
);
}
static
inline
struct
msi_desc
*
get_irq_desc_msi
(
struct
irq_desc
*
desc
)
{
return
irq_desc_get_msi_desc
(
desc
);
}
#endif
/*
* Architectures call this to let the generic IRQ layer
* handle an interrupt. If the descriptor is attached to an
...
...
@@ -194,21 +144,13 @@ __irq_set_chip_handler_name_locked(unsigned int irq, struct irq_chip *chip,
desc
->
name
=
name
;
}
#ifndef CONFIG_GENERIC_HARDIRQS_NO_COMPAT
static
inline
void
__set_irq_handler_unlocked
(
int
irq
,
irq_flow_handler_t
handler
)
{
__irq_set_handler_locked
(
irq
,
handler
);
}
static
inline
int
irq_balancing_disabled
(
unsigned
int
irq
)
{
struct
irq_desc
*
desc
;
desc
=
irq_to_desc
(
irq
);
return
desc
->
status
&
IRQ_NO_BALANCING_MASK
;
return
desc
->
status
_use_accessors
&
IRQ_NO_BALANCING_MASK
;
}
#endif
static
inline
void
irq_set_lockdep_class
(
unsigned
int
irq
,
struct
lock_class_key
*
class
)
...
...
kernel/irq/Kconfig
浏览文件 @
0c6f8a8b
...
...
@@ -10,10 +10,6 @@ menu "IRQ subsystem"
config GENERIC_HARDIRQS
def_bool y
# Select this to disable the deprecated stuff
config GENERIC_HARDIRQS_NO_DEPRECATED
bool
config GENERIC_HARDIRQS_NO_COMPAT
bool
...
...
kernel/irq/autoprobe.c
浏览文件 @
0c6f8a8b
...
...
@@ -70,10 +70,8 @@ unsigned long probe_irq_on(void)
raw_spin_lock_irq
(
&
desc
->
lock
);
if
(
!
desc
->
action
&&
irq_settings_can_probe
(
desc
))
{
desc
->
istate
|=
IRQS_AUTODETECT
|
IRQS_WAITING
;
if
(
irq_startup
(
desc
))
{
irq_compat_set_pending
(
desc
);
if
(
irq_startup
(
desc
))
desc
->
istate
|=
IRQS_PENDING
;
}
}
raw_spin_unlock_irq
(
&
desc
->
lock
);
}
...
...
kernel/irq/chip.c
浏览文件 @
0c6f8a8b
...
...
@@ -34,7 +34,6 @@ int irq_set_chip(unsigned int irq, struct irq_chip *chip)
if
(
!
chip
)
chip
=
&
no_irq_chip
;
irq_chip_set_defaults
(
chip
);
desc
->
irq_data
.
chip
=
chip
;
irq_put_desc_unlock
(
desc
,
flags
);
/*
...
...
@@ -141,25 +140,21 @@ EXPORT_SYMBOL_GPL(irq_get_irq_data);
static
void
irq_state_clr_disabled
(
struct
irq_desc
*
desc
)
{
irqd_clear
(
&
desc
->
irq_data
,
IRQD_IRQ_DISABLED
);
irq_compat_clr_disabled
(
desc
);
}
static
void
irq_state_set_disabled
(
struct
irq_desc
*
desc
)
{
irqd_set
(
&
desc
->
irq_data
,
IRQD_IRQ_DISABLED
);
irq_compat_set_disabled
(
desc
);
}
static
void
irq_state_clr_masked
(
struct
irq_desc
*
desc
)
{
irqd_clear
(
&
desc
->
irq_data
,
IRQD_IRQ_MASKED
);
irq_compat_clr_masked
(
desc
);
}
static
void
irq_state_set_masked
(
struct
irq_desc
*
desc
)
{
irqd_set
(
&
desc
->
irq_data
,
IRQD_IRQ_MASKED
);
irq_compat_set_masked
(
desc
);
}
int
irq_startup
(
struct
irq_desc
*
desc
)
...
...
@@ -209,126 +204,6 @@ void irq_disable(struct irq_desc *desc)
}
}
#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
/* Temporary migration helpers */
static
void
compat_irq_mask
(
struct
irq_data
*
data
)
{
data
->
chip
->
mask
(
data
->
irq
);
}
static
void
compat_irq_unmask
(
struct
irq_data
*
data
)
{
data
->
chip
->
unmask
(
data
->
irq
);
}
static
void
compat_irq_ack
(
struct
irq_data
*
data
)
{
data
->
chip
->
ack
(
data
->
irq
);
}
static
void
compat_irq_mask_ack
(
struct
irq_data
*
data
)
{
data
->
chip
->
mask_ack
(
data
->
irq
);
}
static
void
compat_irq_eoi
(
struct
irq_data
*
data
)
{
data
->
chip
->
eoi
(
data
->
irq
);
}
static
void
compat_irq_enable
(
struct
irq_data
*
data
)
{
data
->
chip
->
enable
(
data
->
irq
);
}
static
void
compat_irq_disable
(
struct
irq_data
*
data
)
{
data
->
chip
->
disable
(
data
->
irq
);
}
static
void
compat_irq_shutdown
(
struct
irq_data
*
data
)
{
data
->
chip
->
shutdown
(
data
->
irq
);
}
static
unsigned
int
compat_irq_startup
(
struct
irq_data
*
data
)
{
return
data
->
chip
->
startup
(
data
->
irq
);
}
static
int
compat_irq_set_affinity
(
struct
irq_data
*
data
,
const
struct
cpumask
*
dest
,
bool
force
)
{
return
data
->
chip
->
set_affinity
(
data
->
irq
,
dest
);
}
static
int
compat_irq_set_type
(
struct
irq_data
*
data
,
unsigned
int
type
)
{
return
data
->
chip
->
set_type
(
data
->
irq
,
type
);
}
static
int
compat_irq_set_wake
(
struct
irq_data
*
data
,
unsigned
int
on
)
{
return
data
->
chip
->
set_wake
(
data
->
irq
,
on
);
}
static
int
compat_irq_retrigger
(
struct
irq_data
*
data
)
{
return
data
->
chip
->
retrigger
(
data
->
irq
);
}
static
void
compat_bus_lock
(
struct
irq_data
*
data
)
{
data
->
chip
->
bus_lock
(
data
->
irq
);
}
static
void
compat_bus_sync_unlock
(
struct
irq_data
*
data
)
{
data
->
chip
->
bus_sync_unlock
(
data
->
irq
);
}
#endif
/*
* Fixup enable/disable function pointers
*/
void
irq_chip_set_defaults
(
struct
irq_chip
*
chip
)
{
#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
if
(
chip
->
enable
)
chip
->
irq_enable
=
compat_irq_enable
;
if
(
chip
->
disable
)
chip
->
irq_disable
=
compat_irq_disable
;
if
(
chip
->
shutdown
)
chip
->
irq_shutdown
=
compat_irq_shutdown
;
if
(
chip
->
startup
)
chip
->
irq_startup
=
compat_irq_startup
;
if
(
!
chip
->
end
)
chip
->
end
=
dummy_irq_chip
.
end
;
if
(
chip
->
bus_lock
)
chip
->
irq_bus_lock
=
compat_bus_lock
;
if
(
chip
->
bus_sync_unlock
)
chip
->
irq_bus_sync_unlock
=
compat_bus_sync_unlock
;
if
(
chip
->
mask
)
chip
->
irq_mask
=
compat_irq_mask
;
if
(
chip
->
unmask
)
chip
->
irq_unmask
=
compat_irq_unmask
;
if
(
chip
->
ack
)
chip
->
irq_ack
=
compat_irq_ack
;
if
(
chip
->
mask_ack
)
chip
->
irq_mask_ack
=
compat_irq_mask_ack
;
if
(
chip
->
eoi
)
chip
->
irq_eoi
=
compat_irq_eoi
;
if
(
chip
->
set_affinity
)
chip
->
irq_set_affinity
=
compat_irq_set_affinity
;
if
(
chip
->
set_type
)
chip
->
irq_set_type
=
compat_irq_set_type
;
if
(
chip
->
set_wake
)
chip
->
irq_set_wake
=
compat_irq_set_wake
;
if
(
chip
->
retrigger
)
chip
->
irq_retrigger
=
compat_irq_retrigger
;
#endif
}
static
inline
void
mask_ack_irq
(
struct
irq_desc
*
desc
)
{
if
(
desc
->
irq_data
.
chip
->
irq_mask_ack
)
...
...
@@ -381,7 +256,6 @@ void handle_nested_irq(unsigned int irq)
if
(
unlikely
(
!
action
||
irqd_irq_disabled
(
&
desc
->
irq_data
)))
goto
out_unlock
;
irq_compat_set_progress
(
desc
);
irqd_set
(
&
desc
->
irq_data
,
IRQD_IRQ_INPROGRESS
);
raw_spin_unlock_irq
(
&
desc
->
lock
);
...
...
@@ -391,7 +265,6 @@ void handle_nested_irq(unsigned int irq)
raw_spin_lock_irq
(
&
desc
->
lock
);
irqd_clear
(
&
desc
->
irq_data
,
IRQD_IRQ_INPROGRESS
);
irq_compat_clr_progress
(
desc
);
out_unlock:
raw_spin_unlock_irq
(
&
desc
->
lock
);
...
...
@@ -514,7 +387,6 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc)
* then mask it and get out of here:
*/
if
(
unlikely
(
!
desc
->
action
||
irqd_irq_disabled
(
&
desc
->
irq_data
)))
{
irq_compat_set_pending
(
desc
);
desc
->
istate
|=
IRQS_PENDING
;
mask_irq
(
desc
);
goto
out
;
...
...
@@ -567,7 +439,6 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc)
if
(
unlikely
(
irqd_irq_disabled
(
&
desc
->
irq_data
)
||
irqd_irq_inprogress
(
&
desc
->
irq_data
)
||
!
desc
->
action
))
{
if
(
!
irq_check_poll
(
desc
))
{
irq_compat_set_pending
(
desc
);
desc
->
istate
|=
IRQS_PENDING
;
mask_ack_irq
(
desc
);
goto
out_unlock
;
...
...
kernel/irq/compat.h
已删除
100644 → 0
浏览文件 @
dced35ae
/*
* Compat layer for transition period
*/
#ifndef CONFIG_GENERIC_HARDIRQS_NO_COMPAT
static
inline
void
irq_compat_set_progress
(
struct
irq_desc
*
desc
)
{
desc
->
status
|=
IRQ_INPROGRESS
;
}
static
inline
void
irq_compat_clr_progress
(
struct
irq_desc
*
desc
)
{
desc
->
status
&=
~
IRQ_INPROGRESS
;
}
static
inline
void
irq_compat_set_disabled
(
struct
irq_desc
*
desc
)
{
desc
->
status
|=
IRQ_DISABLED
;
}
static
inline
void
irq_compat_clr_disabled
(
struct
irq_desc
*
desc
)
{
desc
->
status
&=
~
IRQ_DISABLED
;
}
static
inline
void
irq_compat_set_pending
(
struct
irq_desc
*
desc
)
{
desc
->
status
|=
IRQ_PENDING
;
}
static
inline
void
irq_compat_clr_pending
(
struct
irq_desc
*
desc
)
{
desc
->
status
&=
~
IRQ_PENDING
;
}
static
inline
void
irq_compat_set_masked
(
struct
irq_desc
*
desc
)
{
desc
->
status
|=
IRQ_MASKED
;
}
static
inline
void
irq_compat_clr_masked
(
struct
irq_desc
*
desc
)
{
desc
->
status
&=
~
IRQ_MASKED
;
}
static
inline
void
irq_compat_set_move_pending
(
struct
irq_desc
*
desc
)
{
desc
->
status
|=
IRQ_MOVE_PENDING
;
}
static
inline
void
irq_compat_clr_move_pending
(
struct
irq_desc
*
desc
)
{
desc
->
status
&=
~
IRQ_MOVE_PENDING
;
}
static
inline
void
irq_compat_set_affinity
(
struct
irq_desc
*
desc
)
{
desc
->
status
|=
IRQ_AFFINITY_SET
;
}
static
inline
void
irq_compat_clr_affinity
(
struct
irq_desc
*
desc
)
{
desc
->
status
&=
~
IRQ_AFFINITY_SET
;
}
#else
static
inline
void
irq_compat_set_progress
(
struct
irq_desc
*
desc
)
{
}
static
inline
void
irq_compat_clr_progress
(
struct
irq_desc
*
desc
)
{
}
static
inline
void
irq_compat_set_disabled
(
struct
irq_desc
*
desc
)
{
}
static
inline
void
irq_compat_clr_disabled
(
struct
irq_desc
*
desc
)
{
}
static
inline
void
irq_compat_set_pending
(
struct
irq_desc
*
desc
)
{
}
static
inline
void
irq_compat_clr_pending
(
struct
irq_desc
*
desc
)
{
}
static
inline
void
irq_compat_set_masked
(
struct
irq_desc
*
desc
)
{
}
static
inline
void
irq_compat_clr_masked
(
struct
irq_desc
*
desc
)
{
}
static
inline
void
irq_compat_set_move_pending
(
struct
irq_desc
*
desc
)
{
}
static
inline
void
irq_compat_clr_move_pending
(
struct
irq_desc
*
desc
)
{
}
static
inline
void
irq_compat_set_affinity
(
struct
irq_desc
*
desc
)
{
}
static
inline
void
irq_compat_clr_affinity
(
struct
irq_desc
*
desc
)
{
}
#endif
kernel/irq/debug.h
浏览文件 @
0c6f8a8b
...
...
@@ -4,7 +4,7 @@
#include <linux/kallsyms.h>
#define P(f) if (desc->status & f) printk("%14s set\n", #f)
#define P(f) if (desc->status
_use_accessors
& f) printk("%14s set\n", #f)
#define PS(f) if (desc->istate & f) printk("%14s set\n", #f)
/* FIXME */
#define PD(f) do { } while (0)
...
...
kernel/irq/dummychip.c
浏览文件 @
0c6f8a8b
...
...
@@ -31,13 +31,6 @@ static unsigned int noop_ret(struct irq_data *data)
return
0
;
}
#ifndef CONFIG_GENERIC_HARDIRQS_NO_DEPRECATED
static
void
compat_noop
(
unsigned
int
irq
)
{
}
#define END_INIT .end = compat_noop
#else
#define END_INIT
#endif
/*
* Generic no controller implementation
*/
...
...
@@ -48,7 +41,6 @@ struct irq_chip no_irq_chip = {
.
irq_enable
=
noop
,
.
irq_disable
=
noop
,
.
irq_ack
=
ack_bad
,
END_INIT
};
/*
...
...
@@ -64,5 +56,4 @@ struct irq_chip dummy_irq_chip = {
.
irq_ack
=
noop
,
.
irq_mask
=
noop
,
.
irq_unmask
=
noop
,
END_INIT
};
kernel/irq/handle.c
浏览文件 @
0c6f8a8b
...
...
@@ -175,9 +175,7 @@ irqreturn_t handle_irq_event(struct irq_desc *desc)
struct
irqaction
*
action
=
desc
->
action
;
irqreturn_t
ret
;
irq_compat_clr_pending
(
desc
);
desc
->
istate
&=
~
IRQS_PENDING
;
irq_compat_set_progress
(
desc
);
irqd_set
(
&
desc
->
irq_data
,
IRQD_IRQ_INPROGRESS
);
raw_spin_unlock
(
&
desc
->
lock
);
...
...
@@ -185,6 +183,5 @@ irqreturn_t handle_irq_event(struct irq_desc *desc)
raw_spin_lock
(
&
desc
->
lock
);
irqd_clear
(
&
desc
->
irq_data
,
IRQD_IRQ_INPROGRESS
);
irq_compat_clr_progress
(
desc
);
return
ret
;
}
kernel/irq/internals.h
浏览文件 @
0c6f8a8b
...
...
@@ -15,10 +15,6 @@
#define istate core_internal_state__do_not_mess_with_it
#ifdef CONFIG_GENERIC_HARDIRQS_NO_COMPAT
# define status status_use_accessors
#endif
extern
int
noirqdebug
;
/*
...
...
@@ -61,15 +57,11 @@ enum {
IRQS_SUSPENDED
=
0x00000800
,
};
#include "compat.h"
#include "debug.h"
#include "settings.h"
#define irq_data_to_desc(data) container_of(data, struct irq_desc, irq_data)
/* Set default functions for irq_chip structures: */
extern
void
irq_chip_set_defaults
(
struct
irq_chip
*
chip
);
extern
int
__irq_set_trigger
(
struct
irq_desc
*
desc
,
unsigned
int
irq
,
unsigned
long
flags
);
extern
void
__disable_irq
(
struct
irq_desc
*
desc
,
unsigned
int
irq
,
bool
susp
);
...
...
@@ -156,13 +148,11 @@ irq_put_desc_unlock(struct irq_desc *desc, unsigned long flags)
static
inline
void
irqd_set_move_pending
(
struct
irq_data
*
d
)
{
d
->
state_use_accessors
|=
IRQD_SETAFFINITY_PENDING
;
irq_compat_set_move_pending
(
irq_data_to_desc
(
d
));
}
static
inline
void
irqd_clr_move_pending
(
struct
irq_data
*
d
)
{
d
->
state_use_accessors
&=
~
IRQD_SETAFFINITY_PENDING
;
irq_compat_clr_move_pending
(
irq_data_to_desc
(
d
));
}
static
inline
void
irqd_clear
(
struct
irq_data
*
d
,
unsigned
int
mask
)
...
...
kernel/irq/manage.c
浏览文件 @
0c6f8a8b
...
...
@@ -166,7 +166,6 @@ int __irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask)
kref_get
(
&
desc
->
affinity_notify
->
kref
);
schedule_work
(
&
desc
->
affinity_notify
->
work
);
}
irq_compat_set_affinity
(
desc
);
irqd_set
(
data
,
IRQD_AFFINITY_SET
);
return
ret
;
...
...
@@ -297,10 +296,8 @@ setup_affinity(unsigned int irq, struct irq_desc *desc, struct cpumask *mask)
if
(
cpumask_intersects
(
desc
->
irq_data
.
affinity
,
cpu_online_mask
))
set
=
desc
->
irq_data
.
affinity
;
else
{
irq_compat_clr_affinity
(
desc
);
else
irqd_clear
(
&
desc
->
irq_data
,
IRQD_AFFINITY_SET
);
}
}
cpumask_and
(
mask
,
cpu_online_mask
,
set
);
...
...
@@ -587,8 +584,6 @@ int __irq_set_trigger(struct irq_desc *desc, unsigned int irq,
irqd_set
(
&
desc
->
irq_data
,
IRQD_LEVEL
);
}
if
(
chip
!=
desc
->
irq_data
.
chip
)
irq_chip_set_defaults
(
desc
->
irq_data
.
chip
);
ret
=
0
;
break
;
default:
...
...
@@ -785,7 +780,6 @@ static int irq_thread(void *data)
* but AFAICT IRQS_PENDING should be fine as it
* retriggers the interrupt itself --- tglx
*/
irq_compat_set_pending
(
desc
);
desc
->
istate
|=
IRQS_PENDING
;
raw_spin_unlock_irq
(
&
desc
->
lock
);
}
else
{
...
...
@@ -981,8 +975,6 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
new
->
thread_mask
=
1
<<
ffz
(
thread_mask
);
if
(
!
shared
)
{
irq_chip_set_defaults
(
desc
->
irq_data
.
chip
);
init_waitqueue_head
(
&
desc
->
wait_for_threads
);
/* Setup the type (level, edge polarity) if configured: */
...
...
kernel/irq/resend.c
浏览文件 @
0c6f8a8b
...
...
@@ -65,7 +65,6 @@ void check_irq_resend(struct irq_desc *desc, unsigned int irq)
if
(
desc
->
istate
&
IRQS_REPLAY
)
return
;
if
(
desc
->
istate
&
IRQS_PENDING
)
{
irq_compat_clr_pending
(
desc
);
desc
->
istate
&=
~
IRQS_PENDING
;
desc
->
istate
|=
IRQS_REPLAY
;
...
...
kernel/irq/settings.h
浏览文件 @
0c6f8a8b
...
...
@@ -15,17 +15,8 @@ enum {
_IRQF_MODIFY_MASK
=
IRQF_MODIFY_MASK
,
};
#define IRQ_INPROGRESS GOT_YOU_MORON
#define IRQ_REPLAY GOT_YOU_MORON
#define IRQ_WAITING GOT_YOU_MORON
#define IRQ_DISABLED GOT_YOU_MORON
#define IRQ_PENDING GOT_YOU_MORON
#define IRQ_MASKED GOT_YOU_MORON
#define IRQ_WAKEUP GOT_YOU_MORON
#define IRQ_MOVE_PENDING GOT_YOU_MORON
#define IRQ_PER_CPU GOT_YOU_MORON
#define IRQ_NO_BALANCING GOT_YOU_MORON
#define IRQ_AFFINITY_SET GOT_YOU_MORON
#define IRQ_LEVEL GOT_YOU_MORON
#define IRQ_NOPROBE GOT_YOU_MORON
#define IRQ_NOREQUEST GOT_YOU_MORON
...
...
@@ -37,102 +28,98 @@ enum {
static
inline
void
irq_settings_clr_and_set
(
struct
irq_desc
*
desc
,
u32
clr
,
u32
set
)
{
desc
->
status
&=
~
(
clr
&
_IRQF_MODIFY_MASK
);
desc
->
status
|=
(
set
&
_IRQF_MODIFY_MASK
);
desc
->
status
_use_accessors
&=
~
(
clr
&
_IRQF_MODIFY_MASK
);
desc
->
status
_use_accessors
|=
(
set
&
_IRQF_MODIFY_MASK
);
}
static
inline
bool
irq_settings_is_per_cpu
(
struct
irq_desc
*
desc
)
{
return
desc
->
status
&
_IRQ_PER_CPU
;
return
desc
->
status
_use_accessors
&
_IRQ_PER_CPU
;
}
static
inline
void
irq_settings_set_per_cpu
(
struct
irq_desc
*
desc
)
{
desc
->
status
|=
_IRQ_PER_CPU
;
desc
->
status
_use_accessors
|=
_IRQ_PER_CPU
;
}
static
inline
void
irq_settings_set_no_balancing
(
struct
irq_desc
*
desc
)
{
desc
->
status
|=
_IRQ_NO_BALANCING
;
desc
->
status
_use_accessors
|=
_IRQ_NO_BALANCING
;
}
static
inline
bool
irq_settings_has_no_balance_set
(
struct
irq_desc
*
desc
)
{
return
desc
->
status
&
_IRQ_NO_BALANCING
;
return
desc
->
status
_use_accessors
&
_IRQ_NO_BALANCING
;
}
static
inline
u32
irq_settings_get_trigger_mask
(
struct
irq_desc
*
desc
)
{
return
desc
->
status
&
IRQ_TYPE_SENSE_MASK
;
return
desc
->
status
_use_accessors
&
IRQ_TYPE_SENSE_MASK
;
}
static
inline
void
irq_settings_set_trigger_mask
(
struct
irq_desc
*
desc
,
u32
mask
)
{
desc
->
status
&=
~
IRQ_TYPE_SENSE_MASK
;
desc
->
status
|=
mask
&
IRQ_TYPE_SENSE_MASK
;
desc
->
status
_use_accessors
&=
~
IRQ_TYPE_SENSE_MASK
;
desc
->
status
_use_accessors
|=
mask
&
IRQ_TYPE_SENSE_MASK
;
}
static
inline
bool
irq_settings_is_level
(
struct
irq_desc
*
desc
)
{
return
desc
->
status
&
_IRQ_LEVEL
;
return
desc
->
status
_use_accessors
&
_IRQ_LEVEL
;
}
static
inline
void
irq_settings_clr_level
(
struct
irq_desc
*
desc
)
{
desc
->
status
&=
~
_IRQ_LEVEL
;
desc
->
status
_use_accessors
&=
~
_IRQ_LEVEL
;
}
static
inline
void
irq_settings_set_level
(
struct
irq_desc
*
desc
)
{
desc
->
status
|=
_IRQ_LEVEL
;
desc
->
status
_use_accessors
|=
_IRQ_LEVEL
;
}
static
inline
bool
irq_settings_can_request
(
struct
irq_desc
*
desc
)
{
return
!
(
desc
->
status
&
_IRQ_NOREQUEST
);
return
!
(
desc
->
status
_use_accessors
&
_IRQ_NOREQUEST
);
}
static
inline
void
irq_settings_clr_norequest
(
struct
irq_desc
*
desc
)
{
desc
->
status
&=
~
_IRQ_NOREQUEST
;
desc
->
status
_use_accessors
&=
~
_IRQ_NOREQUEST
;
}
static
inline
void
irq_settings_set_norequest
(
struct
irq_desc
*
desc
)
{
desc
->
status
|=
_IRQ_NOREQUEST
;
desc
->
status
_use_accessors
|=
_IRQ_NOREQUEST
;
}
static
inline
bool
irq_settings_can_probe
(
struct
irq_desc
*
desc
)
{
return
!
(
desc
->
status
&
_IRQ_NOPROBE
);
return
!
(
desc
->
status
_use_accessors
&
_IRQ_NOPROBE
);
}
static
inline
void
irq_settings_clr_noprobe
(
struct
irq_desc
*
desc
)
{
desc
->
status
&=
~
_IRQ_NOPROBE
;
desc
->
status
_use_accessors
&=
~
_IRQ_NOPROBE
;
}
static
inline
void
irq_settings_set_noprobe
(
struct
irq_desc
*
desc
)
{
desc
->
status
|=
_IRQ_NOPROBE
;
desc
->
status
_use_accessors
|=
_IRQ_NOPROBE
;
}
static
inline
bool
irq_settings_can_move_pcntxt
(
struct
irq_desc
*
desc
)
{
return
desc
->
status
&
_IRQ_MOVE_PCNTXT
;
return
desc
->
status
_use_accessors
&
_IRQ_MOVE_PCNTXT
;
}
static
inline
bool
irq_settings_can_autoenable
(
struct
irq_desc
*
desc
)
{
return
!
(
desc
->
status
&
_IRQ_NOAUTOEN
);
return
!
(
desc
->
status
_use_accessors
&
_IRQ_NOAUTOEN
);
}
static
inline
bool
irq_settings_is_nested_thread
(
struct
irq_desc
*
desc
)
{
return
desc
->
status
&
_IRQ_NESTED_THREAD
;
return
desc
->
status
_use_accessors
&
_IRQ_NESTED_THREAD
;
}
/* Nothing should touch desc->status from now on */
#undef status
#define status USE_THE_PROPER_WRAPPERS_YOU_MORON
kernel/irq/spurious.c
浏览文件 @
0c6f8a8b
...
...
@@ -93,7 +93,6 @@ static int try_one_irq(int irq, struct irq_desc *desc, bool force)
* Already running: If it is shared get the other
* CPU to go looking for our mystery interrupt too
*/
irq_compat_set_pending
(
desc
);
desc
->
istate
|=
IRQS_PENDING
;
goto
out
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录