Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
be9a1d3c
Commit
be9a1d3c
authored
Dec 23, 2008
by
Ingo Molnar
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'x86/tsc' into x86/core
parents
fa623d1b
7e3cbc3f
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
36 additions
and
7 deletions
+36
-7
arch/x86/kernel/cpu/addon_cpuid_features.c
arch/x86/kernel/cpu/addon_cpuid_features.c
+8
-0
arch/x86/kernel/cpu/amd.c
arch/x86/kernel/cpu/amd.c
+7
-2
arch/x86/kernel/cpu/intel.c
arch/x86/kernel/cpu/intel.c
+17
-1
arch/x86/kernel/process.c
arch/x86/kernel/process.c
+1
-1
drivers/acpi/processor_idle.c
drivers/acpi/processor_idle.c
+3
-3
No files found.
arch/x86/kernel/cpu/addon_cpuid_features.c
View file @
be9a1d3c
...
@@ -120,9 +120,17 @@ void __cpuinit detect_extended_topology(struct cpuinfo_x86 *c)
...
@@ -120,9 +120,17 @@ void __cpuinit detect_extended_topology(struct cpuinfo_x86 *c)
c
->
cpu_core_id
=
phys_pkg_id
(
c
->
initial_apicid
,
ht_mask_width
)
c
->
cpu_core_id
=
phys_pkg_id
(
c
->
initial_apicid
,
ht_mask_width
)
&
core_select_mask
;
&
core_select_mask
;
c
->
phys_proc_id
=
phys_pkg_id
(
c
->
initial_apicid
,
core_plus_mask_width
);
c
->
phys_proc_id
=
phys_pkg_id
(
c
->
initial_apicid
,
core_plus_mask_width
);
/*
* Reinit the apicid, now that we have extended initial_apicid.
*/
c
->
apicid
=
phys_pkg_id
(
c
->
initial_apicid
,
0
);
#else
#else
c
->
cpu_core_id
=
phys_pkg_id
(
ht_mask_width
)
&
core_select_mask
;
c
->
cpu_core_id
=
phys_pkg_id
(
ht_mask_width
)
&
core_select_mask
;
c
->
phys_proc_id
=
phys_pkg_id
(
core_plus_mask_width
);
c
->
phys_proc_id
=
phys_pkg_id
(
core_plus_mask_width
);
/*
* Reinit the apicid, now that we have extended initial_apicid.
*/
c
->
apicid
=
phys_pkg_id
(
0
);
#endif
#endif
c
->
x86_max_cores
=
(
core_level_siblings
/
smp_num_siblings
);
c
->
x86_max_cores
=
(
core_level_siblings
/
smp_num_siblings
);
...
...
arch/x86/kernel/cpu/amd.c
View file @
be9a1d3c
...
@@ -283,9 +283,14 @@ static void __cpuinit early_init_amd(struct cpuinfo_x86 *c)
...
@@ -283,9 +283,14 @@ static void __cpuinit early_init_amd(struct cpuinfo_x86 *c)
{
{
early_init_amd_mc
(
c
);
early_init_amd_mc
(
c
);
/* c->x86_power is 8000_0007 edx. Bit 8 is constant TSC */
/*
if
(
c
->
x86_power
&
(
1
<<
8
))
* c->x86_power is 8000_0007 edx. Bit 8 is TSC runs at constant rate
* with P/T states and does not stop in deep C-states
*/
if
(
c
->
x86_power
&
(
1
<<
8
))
{
set_cpu_cap
(
c
,
X86_FEATURE_CONSTANT_TSC
);
set_cpu_cap
(
c
,
X86_FEATURE_CONSTANT_TSC
);
set_cpu_cap
(
c
,
X86_FEATURE_NONSTOP_TSC
);
}
#ifdef CONFIG_X86_64
#ifdef CONFIG_X86_64
set_cpu_cap
(
c
,
X86_FEATURE_SYSCALL32
);
set_cpu_cap
(
c
,
X86_FEATURE_SYSCALL32
);
...
...
arch/x86/kernel/cpu/intel.c
View file @
be9a1d3c
...
@@ -41,6 +41,16 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c)
...
@@ -41,6 +41,16 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c)
if
(
c
->
x86
==
15
&&
c
->
x86_cache_alignment
==
64
)
if
(
c
->
x86
==
15
&&
c
->
x86_cache_alignment
==
64
)
c
->
x86_cache_alignment
=
128
;
c
->
x86_cache_alignment
=
128
;
#endif
#endif
/*
* c->x86_power is 8000_0007 edx. Bit 8 is TSC runs at constant rate
* with P/T states and does not stop in deep C-states
*/
if
(
c
->
x86_power
&
(
1
<<
8
))
{
set_cpu_cap
(
c
,
X86_FEATURE_CONSTANT_TSC
);
set_cpu_cap
(
c
,
X86_FEATURE_NONSTOP_TSC
);
}
}
}
#ifdef CONFIG_X86_32
#ifdef CONFIG_X86_32
...
@@ -242,6 +252,13 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
...
@@ -242,6 +252,13 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
intel_workarounds
(
c
);
intel_workarounds
(
c
);
/*
* Detect the extended topology information if available. This
* will reinitialise the initial_apicid which will be used
* in init_intel_cacheinfo()
*/
detect_extended_topology
(
c
);
l2
=
init_intel_cacheinfo
(
c
);
l2
=
init_intel_cacheinfo
(
c
);
if
(
c
->
cpuid_level
>
9
)
{
if
(
c
->
cpuid_level
>
9
)
{
unsigned
eax
=
cpuid_eax
(
10
);
unsigned
eax
=
cpuid_eax
(
10
);
...
@@ -312,7 +329,6 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
...
@@ -312,7 +329,6 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
if
(
cpu_has_bts
)
if
(
cpu_has_bts
)
ptrace_bts_init_intel
(
c
);
ptrace_bts_init_intel
(
c
);
detect_extended_topology
(
c
);
if
(
!
cpu_has
(
c
,
X86_FEATURE_XTOPOLOGY
))
{
if
(
!
cpu_has
(
c
,
X86_FEATURE_XTOPOLOGY
))
{
/*
/*
* let's use the legacy cpuid vector 0x1 and 0x4 for topology
* let's use the legacy cpuid vector 0x1 and 0x4 for topology
...
...
arch/x86/kernel/process.c
View file @
be9a1d3c
...
@@ -287,7 +287,7 @@ static void c1e_idle(void)
...
@@ -287,7 +287,7 @@ static void c1e_idle(void)
rdmsr
(
MSR_K8_INT_PENDING_MSG
,
lo
,
hi
);
rdmsr
(
MSR_K8_INT_PENDING_MSG
,
lo
,
hi
);
if
(
lo
&
K8_INTP_C1E_ACTIVE_MASK
)
{
if
(
lo
&
K8_INTP_C1E_ACTIVE_MASK
)
{
c1e_detected
=
1
;
c1e_detected
=
1
;
if
(
!
boot_cpu_has
(
X86_FEATURE_
CONSTANT
_TSC
))
if
(
!
boot_cpu_has
(
X86_FEATURE_
NONSTOP
_TSC
))
mark_tsc_unstable
(
"TSC halt in AMD C1E"
);
mark_tsc_unstable
(
"TSC halt in AMD C1E"
);
printk
(
KERN_INFO
"System has AMD C1E enabled
\n
"
);
printk
(
KERN_INFO
"System has AMD C1E enabled
\n
"
);
set_cpu_cap
(
&
boot_cpu_data
,
X86_FEATURE_AMDC1E
);
set_cpu_cap
(
&
boot_cpu_data
,
X86_FEATURE_AMDC1E
);
...
...
drivers/acpi/processor_idle.c
View file @
be9a1d3c
...
@@ -374,15 +374,15 @@ static int tsc_halts_in_c(int state)
...
@@ -374,15 +374,15 @@ static int tsc_halts_in_c(int state)
{
{
switch
(
boot_cpu_data
.
x86_vendor
)
{
switch
(
boot_cpu_data
.
x86_vendor
)
{
case
X86_VENDOR_AMD
:
case
X86_VENDOR_AMD
:
case
X86_VENDOR_INTEL
:
/*
/*
* AMD Fam10h TSC will tick in all
* AMD Fam10h TSC will tick in all
* C/P/S0/S1 states when this bit is set.
* C/P/S0/S1 states when this bit is set.
*/
*/
if
(
boot_cpu_has
(
X86_FEATURE_
CONSTANT
_TSC
))
if
(
boot_cpu_has
(
X86_FEATURE_
NONSTOP
_TSC
))
return
0
;
return
0
;
/*FALL THROUGH*/
/*FALL THROUGH*/
case
X86_VENDOR_INTEL
:
/* Several cases known where TSC halts in C2 too */
default:
default:
return
state
>
ACPI_STATE_C1
;
return
state
>
ACPI_STATE_C1
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment