Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
ca62cf59
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
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看板
提交
ca62cf59
编写于
2月 18, 2013
作者:
L
Len Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'misc' into release
Conflicts: arch/x86/kernel/process.c Signed-off-by:
N
Len Brown
<
len.brown@intel.com
>
上级
2e7d0f60
27be4570
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
15 addition
and
140 deletion
+15
-140
Documentation/kernel-parameters.txt
Documentation/kernel-parameters.txt
+1
-10
arch/x86/include/asm/processor.h
arch/x86/include/asm/processor.h
+6
-12
arch/x86/kernel/cpu/bugs.c
arch/x86/kernel/cpu/bugs.c
+0
-27
arch/x86/kernel/cpu/proc.c
arch/x86/kernel/cpu/proc.c
+0
-2
arch/x86/kernel/process.c
arch/x86/kernel/process.c
+6
-83
arch/x86/kernel/smpboot.c
arch/x86/kernel/smpboot.c
+1
-1
arch/x86/xen/setup.c
arch/x86/xen/setup.c
+1
-4
drivers/acpi/processor_idle.c
drivers/acpi/processor_idle.c
+0
-1
未找到文件。
Documentation/kernel-parameters.txt
浏览文件 @
ca62cf59
...
...
@@ -1039,16 +1039,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
Claim all unknown PCI IDE storage controllers.
idle= [X86]
Format: idle=poll, idle=
mwait, idle=
halt, idle=nomwait
Format: idle=poll, idle=halt, idle=nomwait
Poll forces a polling idle loop that can slightly
improve the performance of waking up a idle CPU, but
will use a lot of power and make the system run hot.
Not recommended.
idle=mwait: On systems which support MONITOR/MWAIT but
the kernel chose to not use it because it doesn't save
as much power as a normal idle loop, use the
MONITOR/MWAIT idle loop anyways. Performance should be
the same as idle=poll.
idle=halt: Halt is forced to be used for CPU idle.
In such case C2/C3 won't be used again.
idle=nomwait: Disable mwait for CPU C-states
...
...
@@ -1886,10 +1881,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
wfi(ARM) instruction doesn't work correctly and not to
use it. This is also useful when using JTAG debugger.
no-hlt [BUGS=X86-32] Tells the kernel that the hlt
instruction doesn't work correctly and not to
use it.
no_file_caps Tells the kernel not to honor file capabilities. The
only way then for a file to be executed with privilege
is to be setuid root or executed by root.
...
...
arch/x86/include/asm/processor.h
浏览文件 @
ca62cf59
...
...
@@ -89,7 +89,6 @@ struct cpuinfo_x86 {
char
wp_works_ok
;
/* It doesn't on 386's */
/* Problems on some 486Dx4's and old 386's: */
char
hlt_works_ok
;
char
hard_math
;
char
rfu
;
char
fdiv_bug
;
...
...
@@ -165,15 +164,6 @@ DECLARE_PER_CPU_SHARED_ALIGNED(struct cpuinfo_x86, cpu_info);
extern
const
struct
seq_operations
cpuinfo_op
;
static
inline
int
hlt_works
(
int
cpu
)
{
#ifdef CONFIG_X86_32
return
cpu_data
(
cpu
).
hlt_works_ok
;
#else
return
1
;
#endif
}
#define cache_line_size() (boot_cpu_data.x86_cache_alignment)
extern
void
cpu_detect
(
struct
cpuinfo_x86
*
c
);
...
...
@@ -725,7 +715,7 @@ extern unsigned long boot_option_idle_override;
extern
bool
amd_e400_c1e_detected
;
enum
idle_boot_override
{
IDLE_NO_OVERRIDE
=
0
,
IDLE_HALT
,
IDLE_NOMWAIT
,
IDLE_POLL
,
IDLE_FORCE_MWAIT
};
IDLE_POLL
};
extern
void
enable_sep_cpu
(
void
);
extern
int
sysenter_setup
(
void
);
...
...
@@ -998,7 +988,11 @@ extern unsigned long arch_align_stack(unsigned long sp);
extern
void
free_init_pages
(
char
*
what
,
unsigned
long
begin
,
unsigned
long
end
);
void
default_idle
(
void
);
bool
set_pm_idle_to_default
(
void
);
#ifdef CONFIG_XEN
bool
xen_set_default_idle
(
void
);
#else
#define xen_set_default_idle 0
#endif
void
stop_this_cpu
(
void
*
dummy
);
...
...
arch/x86/kernel/cpu/bugs.c
浏览文件 @
ca62cf59
...
...
@@ -17,15 +17,6 @@
#include <asm/paravirt.h>
#include <asm/alternative.h>
static
int
__init
no_halt
(
char
*
s
)
{
WARN_ONCE
(
1
,
"
\"
no-hlt
\"
is deprecated, please use
\"
idle=poll
\"\n
"
);
boot_cpu_data
.
hlt_works_ok
=
0
;
return
1
;
}
__setup
(
"no-hlt"
,
no_halt
);
static
int
__init
no_387
(
char
*
s
)
{
boot_cpu_data
.
hard_math
=
0
;
...
...
@@ -89,23 +80,6 @@ static void __init check_fpu(void)
pr_warn
(
"Hmm, FPU with FDIV bug
\n
"
);
}
static
void
__init
check_hlt
(
void
)
{
if
(
boot_cpu_data
.
x86
>=
5
||
paravirt_enabled
())
return
;
pr_info
(
"Checking 'hlt' instruction... "
);
if
(
!
boot_cpu_data
.
hlt_works_ok
)
{
pr_cont
(
"disabled
\n
"
);
return
;
}
halt
();
halt
();
halt
();
halt
();
pr_cont
(
"OK
\n
"
);
}
/*
* Check whether we are able to run this kernel safely on SMP.
*
...
...
@@ -129,7 +103,6 @@ void __init check_bugs(void)
print_cpu_info
(
&
boot_cpu_data
);
#endif
check_config
();
check_hlt
();
init_utsname
()
->
machine
[
1
]
=
'0'
+
(
boot_cpu_data
.
x86
>
6
?
6
:
boot_cpu_data
.
x86
);
alternative_instructions
();
...
...
arch/x86/kernel/cpu/proc.c
浏览文件 @
ca62cf59
...
...
@@ -28,7 +28,6 @@ static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c)
{
seq_printf
(
m
,
"fdiv_bug
\t
: %s
\n
"
"hlt_bug
\t\t
: %s
\n
"
"f00f_bug
\t
: %s
\n
"
"coma_bug
\t
: %s
\n
"
"fpu
\t\t
: %s
\n
"
...
...
@@ -36,7 +35,6 @@ static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c)
"cpuid level
\t
: %d
\n
"
"wp
\t\t
: %s
\n
"
,
c
->
fdiv_bug
?
"yes"
:
"no"
,
c
->
hlt_works_ok
?
"no"
:
"yes"
,
c
->
f00f_bug
?
"yes"
:
"no"
,
c
->
coma_bug
?
"yes"
:
"no"
,
c
->
hard_math
?
"yes"
:
"no"
,
...
...
arch/x86/kernel/process.c
浏览文件 @
ca62cf59
...
...
@@ -390,7 +390,8 @@ void default_idle(void)
EXPORT_SYMBOL
(
default_idle
);
#endif
bool
set_pm_idle_to_default
(
void
)
#ifdef CONFIG_XEN
bool
xen_set_default_idle
(
void
)
{
bool
ret
=
!!
x86_idle
;
...
...
@@ -398,6 +399,7 @@ bool set_pm_idle_to_default(void)
return
ret
;
}
#endif
void
stop_this_cpu
(
void
*
dummy
)
{
local_irq_disable
();
...
...
@@ -407,31 +409,8 @@ void stop_this_cpu(void *dummy)
set_cpu_online
(
smp_processor_id
(),
false
);
disable_local_APIC
();
for
(;;)
{
if
(
hlt_works
(
smp_processor_id
()))
halt
();
}
}
/* Default MONITOR/MWAIT with no hints, used for default C1 state */
static
void
mwait_idle
(
void
)
{
if
(
!
need_resched
())
{
trace_power_start_rcuidle
(
POWER_CSTATE
,
1
,
smp_processor_id
());
trace_cpu_idle_rcuidle
(
1
,
smp_processor_id
());
if
(
this_cpu_has
(
X86_FEATURE_CLFLUSH_MONITOR
))
clflush
((
void
*
)
&
current_thread_info
()
->
flags
);
__monitor
((
void
*
)
&
current_thread_info
()
->
flags
,
0
,
0
);
smp_mb
();
if
(
!
need_resched
())
__sti_mwait
(
0
,
0
);
else
local_irq_enable
();
trace_power_end_rcuidle
(
smp_processor_id
());
trace_cpu_idle_rcuidle
(
PWR_EVENT_EXIT
,
smp_processor_id
());
}
else
local_irq_enable
();
for
(;;)
halt
();
}
/*
...
...
@@ -450,53 +429,6 @@ static void poll_idle(void)
trace_cpu_idle_rcuidle
(
PWR_EVENT_EXIT
,
smp_processor_id
());
}
/*
* mwait selection logic:
*
* It depends on the CPU. For AMD CPUs that support MWAIT this is
* wrong. Family 0x10 and 0x11 CPUs will enter C1 on HLT. Powersavings
* then depend on a clock divisor and current Pstate of the core. If
* all cores of a processor are in halt state (C1) the processor can
* enter the C1E (C1 enhanced) state. If mwait is used this will never
* happen.
*
* idle=mwait overrides this decision and forces the usage of mwait.
*/
#define MWAIT_INFO 0x05
#define MWAIT_ECX_EXTENDED_INFO 0x01
#define MWAIT_EDX_C1 0xf0
int
mwait_usable
(
const
struct
cpuinfo_x86
*
c
)
{
u32
eax
,
ebx
,
ecx
,
edx
;
/* Use mwait if idle=mwait boot option is given */
if
(
boot_option_idle_override
==
IDLE_FORCE_MWAIT
)
return
1
;
/*
* Any idle= boot option other than idle=mwait means that we must not
* use mwait. Eg: idle=halt or idle=poll or idle=nomwait
*/
if
(
boot_option_idle_override
!=
IDLE_NO_OVERRIDE
)
return
0
;
if
(
c
->
cpuid_level
<
MWAIT_INFO
)
return
0
;
cpuid
(
MWAIT_INFO
,
&
eax
,
&
ebx
,
&
ecx
,
&
edx
);
/* Check, whether EDX has extended info about MWAIT */
if
(
!
(
ecx
&
MWAIT_ECX_EXTENDED_INFO
))
return
1
;
/*
* edx enumeratios MONITOR/MWAIT extensions. Check, whether
* C1 supports MWAIT
*/
return
(
edx
&
MWAIT_EDX_C1
);
}
bool
amd_e400_c1e_detected
;
EXPORT_SYMBOL
(
amd_e400_c1e_detected
);
...
...
@@ -567,13 +499,7 @@ void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c)
if
(
x86_idle
)
return
;
if
(
cpu_has
(
c
,
X86_FEATURE_MWAIT
)
&&
mwait_usable
(
c
))
{
/*
* One CPU supports mwait => All CPUs supports mwait
*/
pr_info
(
"using mwait in idle threads
\n
"
);
x86_idle
=
mwait_idle
;
}
else
if
(
cpu_has_amd_erratum
(
amd_erratum_400
))
{
if
(
cpu_has_amd_erratum
(
amd_erratum_400
))
{
/* E400: APIC timer interrupt does not wake up CPU from C1e */
pr_info
(
"using AMD E400 aware idle routine
\n
"
);
x86_idle
=
amd_e400_idle
;
...
...
@@ -597,9 +523,6 @@ static int __init idle_setup(char *str)
pr_info
(
"using polling idle threads
\n
"
);
x86_idle
=
poll_idle
;
boot_option_idle_override
=
IDLE_POLL
;
}
else
if
(
!
strcmp
(
str
,
"mwait"
))
{
boot_option_idle_override
=
IDLE_FORCE_MWAIT
;
WARN_ONCE
(
1
,
"
\"
idle=mwait
\"
will be removed in 2012
\n
"
);
}
else
if
(
!
strcmp
(
str
,
"halt"
))
{
/*
* When the boot option of idle=halt is added, halt is
...
...
arch/x86/kernel/smpboot.c
浏览文件 @
ca62cf59
...
...
@@ -1369,7 +1369,7 @@ static inline void mwait_play_dead(void)
void
*
mwait_ptr
;
struct
cpuinfo_x86
*
c
=
__this_cpu_ptr
(
&
cpu_info
);
if
(
!
(
this_cpu_has
(
X86_FEATURE_MWAIT
)
&&
mwait_usable
(
c
)
))
if
(
!
this_cpu_has
(
X86_FEATURE_MWAIT
))
return
;
if
(
!
this_cpu_has
(
X86_FEATURE_CLFLSH
))
return
;
...
...
arch/x86/xen/setup.c
浏览文件 @
ca62cf59
...
...
@@ -556,12 +556,9 @@ void __init xen_arch_setup(void)
COMMAND_LINE_SIZE
:
MAX_GUEST_CMDLINE
);
/* Set up idle, making sure it calls safe_halt() pvop */
#ifdef CONFIG_X86_32
boot_cpu_data
.
hlt_works_ok
=
1
;
#endif
disable_cpuidle
();
disable_cpufreq
();
WARN_ON
(
set_pm_idle_to_default
());
WARN_ON
(
xen_set_default_idle
());
fiddle_vdso
();
#ifdef CONFIG_NUMA
numa_off
=
1
;
...
...
drivers/acpi/processor_idle.c
浏览文件 @
ca62cf59
...
...
@@ -71,7 +71,6 @@ static struct acpi_processor_cx *acpi_cstate[CPUIDLE_STATE_MAX];
static
int
disabled_by_idle_boot_param
(
void
)
{
return
boot_option_idle_override
==
IDLE_POLL
||
boot_option_idle_override
==
IDLE_FORCE_MWAIT
||
boot_option_idle_override
==
IDLE_HALT
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录