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.
...
@@ -1039,16 +1039,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
Claim all unknown PCI IDE storage controllers.
Claim all unknown PCI IDE storage controllers.
idle= [X86]
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
Poll forces a polling idle loop that can slightly
improve the performance of waking up a idle CPU, but
improve the performance of waking up a idle CPU, but
will use a lot of power and make the system run hot.
will use a lot of power and make the system run hot.
Not recommended.
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.
idle=halt: Halt is forced to be used for CPU idle.
In such case C2/C3 won't be used again.
In such case C2/C3 won't be used again.
idle=nomwait: Disable mwait for CPU C-states
idle=nomwait: Disable mwait for CPU C-states
...
@@ -1886,10 +1881,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
...
@@ -1886,10 +1881,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
wfi(ARM) instruction doesn't work correctly and not to
wfi(ARM) instruction doesn't work correctly and not to
use it. This is also useful when using JTAG debugger.
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
no_file_caps Tells the kernel not to honor file capabilities. The
only way then for a file to be executed with privilege
only way then for a file to be executed with privilege
is to be setuid root or executed by root.
is to be setuid root or executed by root.
...
...
arch/x86/include/asm/processor.h
浏览文件 @
ca62cf59
...
@@ -89,7 +89,6 @@ struct cpuinfo_x86 {
...
@@ -89,7 +89,6 @@ struct cpuinfo_x86 {
char
wp_works_ok
;
/* It doesn't on 386's */
char
wp_works_ok
;
/* It doesn't on 386's */
/* Problems on some 486Dx4's and old 386's: */
/* Problems on some 486Dx4's and old 386's: */
char
hlt_works_ok
;
char
hard_math
;
char
hard_math
;
char
rfu
;
char
rfu
;
char
fdiv_bug
;
char
fdiv_bug
;
...
@@ -165,15 +164,6 @@ DECLARE_PER_CPU_SHARED_ALIGNED(struct cpuinfo_x86, cpu_info);
...
@@ -165,15 +164,6 @@ DECLARE_PER_CPU_SHARED_ALIGNED(struct cpuinfo_x86, cpu_info);
extern
const
struct
seq_operations
cpuinfo_op
;
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)
#define cache_line_size() (boot_cpu_data.x86_cache_alignment)
extern
void
cpu_detect
(
struct
cpuinfo_x86
*
c
);
extern
void
cpu_detect
(
struct
cpuinfo_x86
*
c
);
...
@@ -725,7 +715,7 @@ extern unsigned long boot_option_idle_override;
...
@@ -725,7 +715,7 @@ extern unsigned long boot_option_idle_override;
extern
bool
amd_e400_c1e_detected
;
extern
bool
amd_e400_c1e_detected
;
enum
idle_boot_override
{
IDLE_NO_OVERRIDE
=
0
,
IDLE_HALT
,
IDLE_NOMWAIT
,
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
void
enable_sep_cpu
(
void
);
extern
int
sysenter_setup
(
void
);
extern
int
sysenter_setup
(
void
);
...
@@ -998,7 +988,11 @@ extern unsigned long arch_align_stack(unsigned long sp);
...
@@ -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
);
extern
void
free_init_pages
(
char
*
what
,
unsigned
long
begin
,
unsigned
long
end
);
void
default_idle
(
void
);
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
);
void
stop_this_cpu
(
void
*
dummy
);
...
...
arch/x86/kernel/cpu/bugs.c
浏览文件 @
ca62cf59
...
@@ -17,15 +17,6 @@
...
@@ -17,15 +17,6 @@
#include <asm/paravirt.h>
#include <asm/paravirt.h>
#include <asm/alternative.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
)
static
int
__init
no_387
(
char
*
s
)
{
{
boot_cpu_data
.
hard_math
=
0
;
boot_cpu_data
.
hard_math
=
0
;
...
@@ -89,23 +80,6 @@ static void __init check_fpu(void)
...
@@ -89,23 +80,6 @@ static void __init check_fpu(void)
pr_warn
(
"Hmm, FPU with FDIV bug
\n
"
);
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.
* Check whether we are able to run this kernel safely on SMP.
*
*
...
@@ -129,7 +103,6 @@ void __init check_bugs(void)
...
@@ -129,7 +103,6 @@ void __init check_bugs(void)
print_cpu_info
(
&
boot_cpu_data
);
print_cpu_info
(
&
boot_cpu_data
);
#endif
#endif
check_config
();
check_config
();
check_hlt
();
init_utsname
()
->
machine
[
1
]
=
init_utsname
()
->
machine
[
1
]
=
'0'
+
(
boot_cpu_data
.
x86
>
6
?
6
:
boot_cpu_data
.
x86
);
'0'
+
(
boot_cpu_data
.
x86
>
6
?
6
:
boot_cpu_data
.
x86
);
alternative_instructions
();
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)
...
@@ -28,7 +28,6 @@ static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c)
{
{
seq_printf
(
m
,
seq_printf
(
m
,
"fdiv_bug
\t
: %s
\n
"
"fdiv_bug
\t
: %s
\n
"
"hlt_bug
\t\t
: %s
\n
"
"f00f_bug
\t
: %s
\n
"
"f00f_bug
\t
: %s
\n
"
"coma_bug
\t
: %s
\n
"
"coma_bug
\t
: %s
\n
"
"fpu
\t\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)
...
@@ -36,7 +35,6 @@ static void show_cpuinfo_misc(struct seq_file *m, struct cpuinfo_x86 *c)
"cpuid level
\t
: %d
\n
"
"cpuid level
\t
: %d
\n
"
"wp
\t\t
: %s
\n
"
,
"wp
\t\t
: %s
\n
"
,
c
->
fdiv_bug
?
"yes"
:
"no"
,
c
->
fdiv_bug
?
"yes"
:
"no"
,
c
->
hlt_works_ok
?
"no"
:
"yes"
,
c
->
f00f_bug
?
"yes"
:
"no"
,
c
->
f00f_bug
?
"yes"
:
"no"
,
c
->
coma_bug
?
"yes"
:
"no"
,
c
->
coma_bug
?
"yes"
:
"no"
,
c
->
hard_math
?
"yes"
:
"no"
,
c
->
hard_math
?
"yes"
:
"no"
,
...
...
arch/x86/kernel/process.c
浏览文件 @
ca62cf59
...
@@ -390,7 +390,8 @@ void default_idle(void)
...
@@ -390,7 +390,8 @@ void default_idle(void)
EXPORT_SYMBOL
(
default_idle
);
EXPORT_SYMBOL
(
default_idle
);
#endif
#endif
bool
set_pm_idle_to_default
(
void
)
#ifdef CONFIG_XEN
bool
xen_set_default_idle
(
void
)
{
{
bool
ret
=
!!
x86_idle
;
bool
ret
=
!!
x86_idle
;
...
@@ -398,6 +399,7 @@ bool set_pm_idle_to_default(void)
...
@@ -398,6 +399,7 @@ bool set_pm_idle_to_default(void)
return
ret
;
return
ret
;
}
}
#endif
void
stop_this_cpu
(
void
*
dummy
)
void
stop_this_cpu
(
void
*
dummy
)
{
{
local_irq_disable
();
local_irq_disable
();
...
@@ -407,31 +409,8 @@ void stop_this_cpu(void *dummy)
...
@@ -407,31 +409,8 @@ void stop_this_cpu(void *dummy)
set_cpu_online
(
smp_processor_id
(),
false
);
set_cpu_online
(
smp_processor_id
(),
false
);
disable_local_APIC
();
disable_local_APIC
();
for
(;;)
{
for
(;;)
if
(
hlt_works
(
smp_processor_id
()))
halt
();
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
();
}
}
/*
/*
...
@@ -450,53 +429,6 @@ static void poll_idle(void)
...
@@ -450,53 +429,6 @@ static void poll_idle(void)
trace_cpu_idle_rcuidle
(
PWR_EVENT_EXIT
,
smp_processor_id
());
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
;
bool
amd_e400_c1e_detected
;
EXPORT_SYMBOL
(
amd_e400_c1e_detected
);
EXPORT_SYMBOL
(
amd_e400_c1e_detected
);
...
@@ -567,13 +499,7 @@ void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c)
...
@@ -567,13 +499,7 @@ void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c)
if
(
x86_idle
)
if
(
x86_idle
)
return
;
return
;
if
(
cpu_has
(
c
,
X86_FEATURE_MWAIT
)
&&
mwait_usable
(
c
))
{
if
(
cpu_has_amd_erratum
(
amd_erratum_400
))
{
/*
* 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
))
{
/* E400: APIC timer interrupt does not wake up CPU from C1e */
/* E400: APIC timer interrupt does not wake up CPU from C1e */
pr_info
(
"using AMD E400 aware idle routine
\n
"
);
pr_info
(
"using AMD E400 aware idle routine
\n
"
);
x86_idle
=
amd_e400_idle
;
x86_idle
=
amd_e400_idle
;
...
@@ -597,9 +523,6 @@ static int __init idle_setup(char *str)
...
@@ -597,9 +523,6 @@ static int __init idle_setup(char *str)
pr_info
(
"using polling idle threads
\n
"
);
pr_info
(
"using polling idle threads
\n
"
);
x86_idle
=
poll_idle
;
x86_idle
=
poll_idle
;
boot_option_idle_override
=
IDLE_POLL
;
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"
))
{
}
else
if
(
!
strcmp
(
str
,
"halt"
))
{
/*
/*
* When the boot option of idle=halt is added, halt is
* 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)
...
@@ -1369,7 +1369,7 @@ static inline void mwait_play_dead(void)
void
*
mwait_ptr
;
void
*
mwait_ptr
;
struct
cpuinfo_x86
*
c
=
__this_cpu_ptr
(
&
cpu_info
);
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
;
return
;
if
(
!
this_cpu_has
(
X86_FEATURE_CLFLSH
))
if
(
!
this_cpu_has
(
X86_FEATURE_CLFLSH
))
return
;
return
;
...
...
arch/x86/xen/setup.c
浏览文件 @
ca62cf59
...
@@ -556,12 +556,9 @@ void __init xen_arch_setup(void)
...
@@ -556,12 +556,9 @@ void __init xen_arch_setup(void)
COMMAND_LINE_SIZE
:
MAX_GUEST_CMDLINE
);
COMMAND_LINE_SIZE
:
MAX_GUEST_CMDLINE
);
/* Set up idle, making sure it calls safe_halt() pvop */
/* 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_cpuidle
();
disable_cpufreq
();
disable_cpufreq
();
WARN_ON
(
set_pm_idle_to_default
());
WARN_ON
(
xen_set_default_idle
());
fiddle_vdso
();
fiddle_vdso
();
#ifdef CONFIG_NUMA
#ifdef CONFIG_NUMA
numa_off
=
1
;
numa_off
=
1
;
...
...
drivers/acpi/processor_idle.c
浏览文件 @
ca62cf59
...
@@ -71,7 +71,6 @@ static struct acpi_processor_cx *acpi_cstate[CPUIDLE_STATE_MAX];
...
@@ -71,7 +71,6 @@ static struct acpi_processor_cx *acpi_cstate[CPUIDLE_STATE_MAX];
static
int
disabled_by_idle_boot_param
(
void
)
static
int
disabled_by_idle_boot_param
(
void
)
{
{
return
boot_option_idle_override
==
IDLE_POLL
||
return
boot_option_idle_override
==
IDLE_POLL
||
boot_option_idle_override
==
IDLE_FORCE_MWAIT
||
boot_option_idle_override
==
IDLE_HALT
;
boot_option_idle_override
==
IDLE_HALT
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录