Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
39064a18
提交
39064a18
4月 08, 2012
创建
作者:
Silas Boyd-Wickizer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Some monitor/mwait stuff I don't use yet..
上级
84ad98da
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
21 行增加
和
1 行删除
+21
-1
bits.hh
include/bits.hh
+8
-0
idle.cc
kernel/idle.cc
+13
-1
没有找到文件。
include/bits.hh
浏览文件 @
39064a18
...
...
@@ -77,3 +77,11 @@
#define PERF_SEL_INT (1ULL << 20)
#define PERF_SEL_ENABLE (1ULL << 22)
#define PERF_SEL_INV (1ULL << 23)
// CPUID function 0x00000001
#define CPUID_FEATURES 0x00000001
#define FEATURE_ECX_MWAIT (1 << 3)
// CPUID function 0x00000005
#define CPUID_MWAIT 0x00000005
kernel/idle.cc
浏览文件 @
39064a18
...
...
@@ -9,6 +9,7 @@
#include "wq.hh"
#include "uwq.hh"
#include "kmtrace.hh"
#include "bits.hh"
struct
idle
{
struct
proc
*
cur
;
...
...
@@ -109,7 +110,7 @@ idleloop(void)
p
=
proc
::
alloc
();
if
(
p
==
nullptr
)
break
;
snprintf
(
p
->
name
,
sizeof
(
p
->
name
),
"idle
h
_%u"
,
mycpu
()
->
id
);
snprintf
(
p
->
name
,
sizeof
(
p
->
name
),
"idle_%u"
,
mycpu
()
->
id
);
p
->
cpuid
=
mycpu
()
->
id
;
p
->
cpu_pin
=
1
;
p
->
context
->
rip
=
(
u64
)
idleheir
;
...
...
@@ -137,6 +138,17 @@ initidle(void)
if
(
!
p
)
panic
(
"initidle proc::alloc"
);
if
(
myid
()
==
mpbcpu
())
{
u32
eax
,
ebx
,
ecx
;
cpuid
(
CPUID_FEATURES
,
nullptr
,
nullptr
,
&
ecx
,
nullptr
);
if
(
ecx
&
FEATURE_ECX_MWAIT
)
{
// Check smallest and largest line sizes
cpuid
(
CPUID_MWAIT
,
&
eax
,
&
ebx
,
nullptr
,
nullptr
);
assert
((
u16
)
eax
==
0x40
);
assert
((
u16
)
ebx
==
0x40
);
}
}
SLIST_INIT
(
&
idlem
[
myid
()].
zombies
);
initlock
(
&
idlem
[
myid
()].
lock
,
"idle_lock"
,
LOCKSTAT_IDLE
);
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论