Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
d172ad18
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d172ad18
编写于
16年前
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
sparc64: Convert to generic helpers for IPI function calls.
Signed-off-by:
N
David S. Miller
<
davem@davemloft.net
>
上级
4fe3ebec
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
33 addition
and
73 deletion
+33
-73
arch/sparc64/Kconfig
arch/sparc64/Kconfig
+1
-0
arch/sparc64/kernel/smp.c
arch/sparc64/kernel/smp.c
+17
-70
arch/sparc64/kernel/sparc64_ksyms.c
arch/sparc64/kernel/sparc64_ksyms.c
+0
-2
arch/sparc64/kernel/ttable.S
arch/sparc64/kernel/ttable.S
+6
-1
arch/sparc64/mm/ultra.S
arch/sparc64/mm/ultra.S
+5
-0
include/asm-sparc/pil.h
include/asm-sparc/pil.h
+1
-0
include/asm-sparc/smp_64.h
include/asm-sparc/smp_64.h
+3
-0
未找到文件。
arch/sparc64/Kconfig
浏览文件 @
d172ad18
...
...
@@ -16,6 +16,7 @@ config SPARC64
select HAVE_IDE
select HAVE_LMB
select HAVE_ARCH_KGDB
select USE_GENERIC_SMP_HELPERS if SMP
config GENERIC_TIME
bool
...
...
This diff is collapsed.
Click to expand it.
arch/sparc64/kernel/smp.c
浏览文件 @
d172ad18
...
...
@@ -788,89 +788,36 @@ static void smp_start_sync_tick_client(int cpu)
0
,
0
,
0
,
mask
);
}
/* Send cross call to all processors except self. */
#define smp_cross_call(func, ctx, data1, data2) \
smp_cross_call_masked(func, ctx, data1, data2, cpu_online_map)
struct
call_data_struct
{
void
(
*
func
)
(
void
*
info
);
void
*
info
;
atomic_t
finished
;
int
wait
;
};
static
struct
call_data_struct
*
call_data
;
extern
unsigned
long
xcall_call_function
;
/**
* smp_call_function(): Run a function on all other CPUs.
* @func: The function to run. This must be fast and non-blocking.
* @info: An arbitrary pointer to pass to the function.
* @wait: If true, wait (atomically) until function has completed on other CPUs.
*
* Returns 0 on success, else a negative status code. Does not return until
* remote CPUs are nearly ready to execute <<func>> or are or have executed.
*
* You must not call this function with disabled interrupts or from a
* hardware interrupt handler or from a bottom half handler.
*/
static
int
sparc64_smp_call_function_mask
(
void
(
*
func
)(
void
*
info
),
void
*
info
,
int
wait
,
cpumask_t
mask
)
void
arch_send_call_function_ipi
(
cpumask_t
mask
)
{
struct
call_data_struct
data
;
int
cpus
;
/* Can deadlock when called with interrupts disabled */
WARN_ON
(
irqs_disabled
());
data
.
func
=
func
;
data
.
info
=
info
;
atomic_set
(
&
data
.
finished
,
0
);
data
.
wait
=
wait
;
spin_lock
(
&
call_lock
);
cpu_clear
(
smp_processor_id
(),
mask
);
cpus
=
cpus_weight
(
mask
);
if
(
!
cpus
)
goto
out_unlock
;
call_data
=
&
data
;
mb
();
smp_cross_call_masked
(
&
xcall_call_function
,
0
,
0
,
0
,
mask
);
}
/* Wait for response */
while
(
atomic_read
(
&
data
.
finished
)
!=
cpus
)
cpu_relax
();
extern
unsigned
long
xcall_call_function_single
;
out_unlock:
spin_unlock
(
&
call_lock
);
void
arch_send_call_function_single_ipi
(
int
cpu
)
{
cpumask_t
mask
=
cpumask_of_cpu
(
cpu
);
return
0
;
smp_cross_call_masked
(
&
xcall_call_function_single
,
0
,
0
,
0
,
mask
)
;
}
int
smp_call_function
(
void
(
*
func
)(
void
*
info
),
void
*
info
,
int
wait
)
{
return
sparc64_smp_call_function_mask
(
func
,
info
,
wait
,
cpu_online_map
);
}
/* Send cross call to all processors except self. */
#define smp_cross_call(func, ctx, data1, data2) \
smp_cross_call_masked(func, ctx, data1, data2, cpu_online_map)
void
smp_call_function_client
(
int
irq
,
struct
pt_regs
*
regs
)
{
void
(
*
func
)
(
void
*
info
)
=
call_data
->
func
;
void
*
info
=
call_data
->
info
;
clear_softint
(
1
<<
irq
);
generic_smp_call_function_interrupt
();
}
void
smp_call_function_single_client
(
int
irq
,
struct
pt_regs
*
regs
)
{
clear_softint
(
1
<<
irq
);
if
(
call_data
->
wait
)
{
/* let initiator proceed only after completion */
func
(
info
);
atomic_inc
(
&
call_data
->
finished
);
}
else
{
/* let initiator proceed after getting data */
atomic_inc
(
&
call_data
->
finished
);
func
(
info
);
}
generic_smp_call_function_single_interrupt
();
}
static
void
tsb_sync
(
void
*
info
)
...
...
@@ -890,7 +837,7 @@ static void tsb_sync(void *info)
void
smp_tsb_sync
(
struct
mm_struct
*
mm
)
{
s
parc64_smp_call_function_mask
(
tsb_sync
,
mm
,
1
,
mm
->
cpu_vm_mask
);
s
mp_call_function_mask
(
mm
->
cpu_vm_mask
,
tsb_sync
,
mm
,
1
);
}
extern
unsigned
long
xcall_flush_tlb_mm
;
...
...
This diff is collapsed.
Click to expand it.
arch/sparc64/kernel/sparc64_ksyms.c
浏览文件 @
d172ad18
...
...
@@ -108,8 +108,6 @@ EXPORT_SYMBOL(__read_unlock);
EXPORT_SYMBOL
(
__write_lock
);
EXPORT_SYMBOL
(
__write_unlock
);
EXPORT_SYMBOL
(
__write_trylock
);
EXPORT_SYMBOL
(
smp_call_function
);
#endif
/* CONFIG_SMP */
#ifdef CONFIG_MCOUNT
...
...
This diff is collapsed.
Click to expand it.
arch/sparc64/kernel/ttable.S
浏览文件 @
d172ad18
...
...
@@ -58,7 +58,12 @@ tl0_irq3: BTRAP(0x43)
tl0_irq4
:
BTRAP
(0
x44
)
#endif
tl0_irq5
:
TRAP_IRQ
(
handler_irq
,
5
)
tl0_irq6
:
BTRAP
(0
x46
)
BTRAP
(
0x47
)
BTRAP
(
0x48
)
BTRAP
(
0x49
)
#ifdef CONFIG_SMP
tl0_irq6
:
TRAP_IRQ
(
smp_call_function_single_client
,
6
)
#else
tl0_irq6
:
BTRAP
(0
x46
)
#endif
tl0_irq7
:
BTRAP
(0
x47
)
BTRAP
(
0x48
)
BTRAP
(
0x49
)
tl0_irq10
:
BTRAP
(0
x4a
)
BTRAP
(
0x4b
)
BTRAP
(
0x4c
)
BTRAP
(
0x4d
)
tl0_irq14
:
TRAP_IRQ
(
timer_interrupt
,
14
)
tl0_irq15
:
TRAP_IRQ
(
handler_irq
,
15
)
...
...
This diff is collapsed.
Click to expand it.
arch/sparc64/mm/ultra.S
浏览文件 @
d172ad18
...
...
@@ -688,6 +688,11 @@ xcall_call_function:
wr
%
g0
,
(
1
<<
PIL_SMP_CALL_FUNC
),
%
set_softint
retry
.
globl
xcall_call_function_single
xcall_call_function_single
:
wr
%
g0
,
(
1
<<
PIL_SMP_CALL_FUNC_SNGL
),
%
set_softint
retry
.
globl
xcall_receive_signal
xcall_receive_signal
:
wr
%
g0
,
(
1
<<
PIL_SMP_RECEIVE_SIGNAL
),
%
set_softint
...
...
This diff is collapsed.
Click to expand it.
include/asm-sparc/pil.h
浏览文件 @
d172ad18
...
...
@@ -17,5 +17,6 @@
#define PIL_SMP_CAPTURE 3
#define PIL_SMP_CTX_NEW_VERSION 4
#define PIL_DEVICE_IRQ 5
#define PIL_SMP_CALL_FUNC_SNGL 6
#endif
/* !(_SPARC64_PIL_H) */
This diff is collapsed.
Click to expand it.
include/asm-sparc/smp_64.h
浏览文件 @
d172ad18
...
...
@@ -34,6 +34,9 @@ DECLARE_PER_CPU(cpumask_t, cpu_sibling_map);
extern
cpumask_t
cpu_core_map
[
NR_CPUS
];
extern
int
sparc64_multi_core
;
extern
void
arch_send_call_function_single_ipi
(
int
cpu
);
extern
void
arch_send_call_function_ipi
(
cpumask_t
mask
);
/*
* General functions that each host system must provide.
*/
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
新手
引导
客服
返回
顶部