Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
7fd90506
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 大约 4 年
通知
14
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
7fd90506
编写于
2月 06, 2014
作者:
R
Rafael J. Wysocki
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'pm-cpufreq'
* pm-cpufreq: intel_pstate: Take core C0 time into account for core busy calculation
上级
93e73711
fcb6a15c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
17 addition
and
4 deletion
+17
-4
drivers/cpufreq/intel_pstate.c
drivers/cpufreq/intel_pstate.c
+17
-4
未找到文件。
drivers/cpufreq/intel_pstate.c
浏览文件 @
7fd90506
...
@@ -57,6 +57,7 @@ struct sample {
...
@@ -57,6 +57,7 @@ struct sample {
int32_t
core_pct_busy
;
int32_t
core_pct_busy
;
u64
aperf
;
u64
aperf
;
u64
mperf
;
u64
mperf
;
unsigned
long
long
tsc
;
int
freq
;
int
freq
;
};
};
...
@@ -96,6 +97,7 @@ struct cpudata {
...
@@ -96,6 +97,7 @@ struct cpudata {
u64
prev_aperf
;
u64
prev_aperf
;
u64
prev_mperf
;
u64
prev_mperf
;
unsigned
long
long
prev_tsc
;
int
sample_ptr
;
int
sample_ptr
;
struct
sample
samples
[
SAMPLE_COUNT
];
struct
sample
samples
[
SAMPLE_COUNT
];
};
};
...
@@ -548,30 +550,41 @@ static inline void intel_pstate_calc_busy(struct cpudata *cpu,
...
@@ -548,30 +550,41 @@ static inline void intel_pstate_calc_busy(struct cpudata *cpu,
struct
sample
*
sample
)
struct
sample
*
sample
)
{
{
u64
core_pct
;
u64
core_pct
;
core_pct
=
div64_u64
(
int_tofp
(
sample
->
aperf
*
100
),
u64
c0_pct
;
sample
->
mperf
);
sample
->
freq
=
fp_toint
(
cpu
->
pstate
.
max_pstate
*
core_pct
*
1000
);
sample
->
core_pct_busy
=
core_pct
;
core_pct
=
div64_u64
(
sample
->
aperf
*
100
,
sample
->
mperf
);
c0_pct
=
div64_u64
(
sample
->
mperf
*
100
,
sample
->
tsc
);
sample
->
freq
=
fp_toint
(
mul_fp
(
int_tofp
(
cpu
->
pstate
.
max_pstate
),
int_tofp
(
core_pct
*
1000
)));
sample
->
core_pct_busy
=
mul_fp
(
int_tofp
(
core_pct
),
div_fp
(
int_tofp
(
c0_pct
+
1
),
int_tofp
(
100
)));
}
}
static
inline
void
intel_pstate_sample
(
struct
cpudata
*
cpu
)
static
inline
void
intel_pstate_sample
(
struct
cpudata
*
cpu
)
{
{
u64
aperf
,
mperf
;
u64
aperf
,
mperf
;
unsigned
long
long
tsc
;
rdmsrl
(
MSR_IA32_APERF
,
aperf
);
rdmsrl
(
MSR_IA32_APERF
,
aperf
);
rdmsrl
(
MSR_IA32_MPERF
,
mperf
);
rdmsrl
(
MSR_IA32_MPERF
,
mperf
);
tsc
=
native_read_tsc
();
cpu
->
sample_ptr
=
(
cpu
->
sample_ptr
+
1
)
%
SAMPLE_COUNT
;
cpu
->
sample_ptr
=
(
cpu
->
sample_ptr
+
1
)
%
SAMPLE_COUNT
;
cpu
->
samples
[
cpu
->
sample_ptr
].
aperf
=
aperf
;
cpu
->
samples
[
cpu
->
sample_ptr
].
aperf
=
aperf
;
cpu
->
samples
[
cpu
->
sample_ptr
].
mperf
=
mperf
;
cpu
->
samples
[
cpu
->
sample_ptr
].
mperf
=
mperf
;
cpu
->
samples
[
cpu
->
sample_ptr
].
tsc
=
tsc
;
cpu
->
samples
[
cpu
->
sample_ptr
].
aperf
-=
cpu
->
prev_aperf
;
cpu
->
samples
[
cpu
->
sample_ptr
].
aperf
-=
cpu
->
prev_aperf
;
cpu
->
samples
[
cpu
->
sample_ptr
].
mperf
-=
cpu
->
prev_mperf
;
cpu
->
samples
[
cpu
->
sample_ptr
].
mperf
-=
cpu
->
prev_mperf
;
cpu
->
samples
[
cpu
->
sample_ptr
].
tsc
-=
cpu
->
prev_tsc
;
intel_pstate_calc_busy
(
cpu
,
&
cpu
->
samples
[
cpu
->
sample_ptr
]);
intel_pstate_calc_busy
(
cpu
,
&
cpu
->
samples
[
cpu
->
sample_ptr
]);
cpu
->
prev_aperf
=
aperf
;
cpu
->
prev_aperf
=
aperf
;
cpu
->
prev_mperf
=
mperf
;
cpu
->
prev_mperf
=
mperf
;
cpu
->
prev_tsc
=
tsc
;
}
}
static
inline
void
intel_pstate_set_sample_time
(
struct
cpudata
*
cpu
)
static
inline
void
intel_pstate_set_sample_time
(
struct
cpudata
*
cpu
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录