Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Kernel Liteos A
提交
28df6989
K
Kernel Liteos A
项目概览
OpenHarmony
/
Kernel Liteos A
1 年多 前同步成功
通知
460
Star
414
Fork
55
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel Liteos A
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
28df6989
编写于
4月 28, 2021
作者:
O
openharmony_ci
提交者:
Gitee
4月 28, 2021
浏览文件
操作
浏览文件
下载
差异文件
!185 多核情况下当系统持有调度锁异常时,无异常信息输出
Merge pull request !185 from zhangfanfan2/master
上级
e5cb9cb5
5bf4d1c7
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
46 addition
and
9 deletion
+46
-9
arch/arm/arm/include/los_hw_cpu.h
arch/arm/arm/include/los_hw_cpu.h
+18
-0
arch/arm/arm/src/los_exc.c
arch/arm/arm/src/los_exc.c
+28
-7
arch/arm/arm/src/los_hw_exc.S
arch/arm/arm/src/los_hw_exc.S
+0
-2
未找到文件。
arch/arm/arm/include/los_hw_cpu.h
浏览文件 @
28df6989
...
...
@@ -189,6 +189,24 @@ STATIC INLINE UINT32 ArchIntUnlock(VOID)
return
intSave
;
}
STATIC
INLINE
VOID
ArchIrqDisable
(
VOID
)
{
__asm__
__volatile__
(
"cpsid i "
:
:
:
"memory"
,
"cc"
);
}
STATIC
INLINE
VOID
ArchIrqEnable
(
VOID
)
{
__asm__
__volatile__
(
"cpsie i "
:
:
:
"memory"
,
"cc"
);
}
#else
STATIC
INLINE
UINT32
ArchIntLock
(
VOID
)
...
...
arch/arm/arm/src/los_exc.c
浏览文件 @
28df6989
...
...
@@ -185,18 +185,29 @@ STATIC INT32 OsDecodeDataFSR(UINT32 regDFSR)
#ifdef LOSCFG_KERNEL_VM
UINT32
OsArmSharedPageFault
(
UINT32
excType
,
ExcContext
*
frame
,
UINT32
far
,
UINT32
fsr
)
{
PRINT_INFO
(
"page fault entry!!!
\n
"
);
BOOL
instruction_fault
=
FALSE
;
BOOL
instructionFault
=
FALSE
;
UINT32
pfFlags
=
0
;
UINT32
fsrFlag
;
BOOL
write
=
FALSE
;
UINT32
ret
;
PRINT_INFO
(
"page fault entry!!!
\n
"
);
if
(
OsGetSystemStatus
()
==
OS_SYSTEM_EXC_CURR_CPU
)
{
return
LOS_ERRNO_VM_NOT_FOUND
;
}
#if defined(LOSCFG_KERNEL_SMP) && defined(LOSCFG_DEBUG_VERSION)
BOOL
irqEnable
=
!
(
LOS_SpinHeld
(
&
g_taskSpin
)
&&
(
OsPercpuGet
()
->
taskLockCnt
!=
0
));
if
(
irqEnable
)
{
ArchIrqEnable
();
}
else
{
PrintExcInfo
(
"[ERR][%s] may be held scheduler lock when entering [%s]
\n
"
,
OsCurrTaskGet
()
->
taskName
,
__FUNCTION__
);
}
#else
ArchIrqEnable
();
#endif
if
(
excType
==
OS_EXCEPT_PREFETCH_ABORT
)
{
instruction
_f
ault
=
TRUE
;
instruction
F
ault
=
TRUE
;
}
else
{
write
=
!!
BIT_GET
(
fsr
,
WNR_BIT
);
}
...
...
@@ -214,13 +225,23 @@ UINT32 OsArmSharedPageFault(UINT32 excType, ExcContext *frame, UINT32 far, UINT3
BOOL
user
=
(
frame
->
regCPSR
&
CPSR_MODE_MASK
)
==
CPSR_MODE_USR
;
pfFlags
|=
write
?
VM_MAP_PF_FLAG_WRITE
:
0
;
pfFlags
|=
user
?
VM_MAP_PF_FLAG_USER
:
0
;
pfFlags
|=
instruction
_f
ault
?
VM_MAP_PF_FLAG_INSTRUCTION
:
0
;
pfFlags
|=
instruction
F
ault
?
VM_MAP_PF_FLAG_INSTRUCTION
:
0
;
pfFlags
|=
VM_MAP_PF_FLAG_NOT_PRESENT
;
return
OsVmPageFaultHandler
(
far
,
pfFlags
,
frame
);
ret
=
OsVmPageFaultHandler
(
far
,
pfFlags
,
frame
);
break
;
}
default:
return
LOS_ERRNO_VM_NOT_FOUND
;
ret
=
LOS_ERRNO_VM_NOT_FOUND
;
break
;
}
#if defined(LOSCFG_KERNEL_SMP) && defined(LOSCFG_DEBUG_VERSION)
if
(
irqEnable
)
{
ArchIrqDisable
();
}
#else
ArchIrqDisable
();
#endif
return
ret
;
}
#endif
...
...
arch/arm/arm/src/los_hw_exc.S
浏览文件 @
28df6989
...
...
@@ -331,9 +331,7 @@ _osExcPageFault:
MOV
R5
,
R0
MOV
R8
,
R2
MOV
R9
,
R3
CPSIE
I
BLX
OsArmSharedPageFault
CPSID
I
POP_FPU_REGS
R1
MOV
SP
,
R4
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录