Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
c02a5119
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看板
提交
c02a5119
编写于
8月 04, 2008
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
sparc64: Disable local interrupts around xcall_deliver_impl() invocation.
Signed-off-by:
N
David S. Miller
<
davem@davemloft.net
>
上级
deb16999
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
15 addition
and
17 deletion
+15
-17
arch/sparc64/kernel/smp.c
arch/sparc64/kernel/smp.c
+15
-17
未找到文件。
arch/sparc64/kernel/smp.c
浏览文件 @
c02a5119
...
...
@@ -611,7 +611,7 @@ static void cheetah_xcall_deliver(u64 data0, u64 data1, u64 data2, const cpumask
static
void
hypervisor_xcall_deliver
(
u64
data0
,
u64
data1
,
u64
data2
,
const
cpumask_t
*
mask
)
{
int
cnt
,
retries
,
this_cpu
,
prev_sent
,
i
;
unsigned
long
flags
,
status
;
unsigned
long
status
;
cpumask_t
error_mask
;
struct
trap_per_cpu
*
tb
;
u16
*
cpu_list
;
...
...
@@ -620,18 +620,6 @@ static void hypervisor_xcall_deliver(u64 data0, u64 data1, u64 data2, const cpum
if
(
cpus_empty
(
*
mask
))
return
;
/* We have to do this whole thing with interrupts fully disabled.
* Otherwise if we send an xcall from interrupt context it will
* corrupt both our mondo block and cpu list state.
*
* One consequence of this is that we cannot use timeout mechanisms
* that depend upon interrupts being delivered locally. So, for
* example, we cannot sample jiffies and expect it to advance.
*
* Fortunately, udelay() uses %stick/%tick so we can use that.
*/
local_irq_save
(
flags
);
this_cpu
=
smp_processor_id
();
tb
=
&
trap_block
[
this_cpu
];
...
...
@@ -720,8 +708,6 @@ static void hypervisor_xcall_deliver(u64 data0, u64 data1, u64 data2, const cpum
}
}
while
(
1
);
local_irq_restore
(
flags
);
if
(
unlikely
(
!
cpus_empty
(
error_mask
)))
goto
fatal_mondo_cpu_error
;
...
...
@@ -738,14 +724,12 @@ static void hypervisor_xcall_deliver(u64 data0, u64 data1, u64 data2, const cpum
return
;
fatal_mondo_timeout:
local_irq_restore
(
flags
);
printk
(
KERN_CRIT
"CPU[%d]: SUN4V mondo timeout, no forward "
" progress after %d retries.
\n
"
,
this_cpu
,
retries
);
goto
dump_cpu_list_and_out
;
fatal_mondo_error:
local_irq_restore
(
flags
);
printk
(
KERN_CRIT
"CPU[%d]: Unexpected SUN4V mondo error %lu
\n
"
,
this_cpu
,
status
);
printk
(
KERN_CRIT
"CPU[%d]: Args were cnt(%d) cpulist_pa(%lx) "
...
...
@@ -763,7 +747,21 @@ static void (*xcall_deliver_impl)(u64, u64, u64, const cpumask_t *);
static
void
xcall_deliver
(
u64
data0
,
u64
data1
,
u64
data2
,
const
cpumask_t
*
mask
)
{
unsigned
long
flags
;
/* We have to do this whole thing with interrupts fully disabled.
* Otherwise if we send an xcall from interrupt context it will
* corrupt both our mondo block and cpu list state.
*
* One consequence of this is that we cannot use timeout mechanisms
* that depend upon interrupts being delivered locally. So, for
* example, we cannot sample jiffies and expect it to advance.
*
* Fortunately, udelay() uses %stick/%tick so we can use that.
*/
local_irq_save
(
flags
);
xcall_deliver_impl
(
data0
,
data1
,
data2
,
mask
);
local_irq_restore
(
flags
);
}
/* Send cross call to all processors mentioned in MASK_P
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录