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
446d2733
Commit
446d2733
authored
Sep 05, 2008
by
Ingo Molnar
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'x86/cpu' into x86/core
parents
accf0fa6
0a488a53
Changes
21
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
669 additions
and
454 deletions
+669
-454
Documentation/kernel-parameters.txt
Documentation/kernel-parameters.txt
+6
-0
arch/x86/kernel/cpu/Makefile
arch/x86/kernel/cpu/Makefile
+2
-2
arch/x86/kernel/cpu/amd.c
arch/x86/kernel/cpu/amd.c
+7
-5
arch/x86/kernel/cpu/amd_64.c
arch/x86/kernel/cpu/amd_64.c
+2
-2
arch/x86/kernel/cpu/centaur.c
arch/x86/kernel/cpu/centaur.c
+13
-1
arch/x86/kernel/cpu/centaur_64.c
arch/x86/kernel/cpu/centaur_64.c
+2
-1
arch/x86/kernel/cpu/common.c
arch/x86/kernel/cpu/common.c
+313
-276
arch/x86/kernel/cpu/common_64.c
arch/x86/kernel/cpu/common_64.c
+231
-132
arch/x86/kernel/cpu/cpu.h
arch/x86/kernel/cpu/cpu.h
+6
-12
arch/x86/kernel/cpu/cyrix.c
arch/x86/kernel/cpu/cyrix.c
+32
-6
arch/x86/kernel/cpu/intel.c
arch/x86/kernel/cpu/intel.c
+2
-1
arch/x86/kernel/cpu/intel_64.c
arch/x86/kernel/cpu/intel_64.c
+2
-1
arch/x86/kernel/cpu/transmeta.c
arch/x86/kernel/cpu/transmeta.c
+2
-1
arch/x86/kernel/cpu/umc.c
arch/x86/kernel/cpu/umc.c
+2
-1
arch/x86/kernel/paravirt.c
arch/x86/kernel/paravirt.c
+1
-0
arch/x86/kernel/traps_64.c
arch/x86/kernel/traps_64.c
+2
-3
arch/x86/kernel/vmlinux_32.lds.S
arch/x86/kernel/vmlinux_32.lds.S
+4
-4
arch/x86/kernel/vmlinux_64.lds.S
arch/x86/kernel/vmlinux_64.lds.S
+4
-5
include/asm-x86/msr.h
include/asm-x86/msr.h
+23
-0
include/asm-x86/paravirt.h
include/asm-x86/paravirt.h
+12
-0
include/asm-x86/processor.h
include/asm-x86/processor.h
+1
-1
No files found.
Documentation/kernel-parameters.txt
View file @
446d2733
...
@@ -1888,6 +1888,12 @@ and is between 256 and 4096 characters. It is defined in the file
...
@@ -1888,6 +1888,12 @@ and is between 256 and 4096 characters. It is defined in the file
shapers= [NET]
shapers= [NET]
Maximal number of shapers.
Maximal number of shapers.
show_msr= [x86] show boot-time MSR settings
Format: { <integer> }
Show boot-time (BIOS-initialized) MSR settings.
The parameter means the number of CPUs to show,
for example 1 means boot CPU only.
sim710= [SCSI,HW]
sim710= [SCSI,HW]
See header of drivers/scsi/sim710.c.
See header of drivers/scsi/sim710.c.
...
...
arch/x86/kernel/cpu/Makefile
View file @
446d2733
...
@@ -8,14 +8,14 @@ obj-y += proc.o capflags.o powerflags.o
...
@@ -8,14 +8,14 @@ obj-y += proc.o capflags.o powerflags.o
obj-$(CONFIG_X86_32)
+=
common.o bugs.o cmpxchg.o
obj-$(CONFIG_X86_32)
+=
common.o bugs.o cmpxchg.o
obj-$(CONFIG_X86_64)
+=
common_64.o bugs_64.o
obj-$(CONFIG_X86_64)
+=
common_64.o bugs_64.o
obj-$(CONFIG_CPU_SUP_INTEL_32)
+=
intel.o
obj-$(CONFIG_CPU_SUP_INTEL_64)
+=
intel_64.o
obj-$(CONFIG_CPU_SUP_AMD_32)
+=
amd.o
obj-$(CONFIG_CPU_SUP_AMD_32)
+=
amd.o
obj-$(CONFIG_CPU_SUP_AMD_64)
+=
amd_64.o
obj-$(CONFIG_CPU_SUP_AMD_64)
+=
amd_64.o
obj-$(CONFIG_CPU_SUP_CYRIX_32)
+=
cyrix.o
obj-$(CONFIG_CPU_SUP_CYRIX_32)
+=
cyrix.o
obj-$(CONFIG_CPU_SUP_CENTAUR_32)
+=
centaur.o
obj-$(CONFIG_CPU_SUP_CENTAUR_32)
+=
centaur.o
obj-$(CONFIG_CPU_SUP_CENTAUR_64)
+=
centaur_64.o
obj-$(CONFIG_CPU_SUP_CENTAUR_64)
+=
centaur_64.o
obj-$(CONFIG_CPU_SUP_TRANSMETA_32)
+=
transmeta.o
obj-$(CONFIG_CPU_SUP_TRANSMETA_32)
+=
transmeta.o
obj-$(CONFIG_CPU_SUP_INTEL_32)
+=
intel.o
obj-$(CONFIG_CPU_SUP_INTEL_64)
+=
intel_64.o
obj-$(CONFIG_CPU_SUP_UMC_32)
+=
umc.o
obj-$(CONFIG_CPU_SUP_UMC_32)
+=
umc.o
obj-$(CONFIG_X86_MCE)
+=
mcheck/
obj-$(CONFIG_X86_MCE)
+=
mcheck/
...
...
arch/x86/kernel/cpu/amd.c
View file @
446d2733
...
@@ -31,6 +31,11 @@ static void __cpuinit early_init_amd(struct cpuinfo_x86 *c)
...
@@ -31,6 +31,11 @@ static void __cpuinit early_init_amd(struct cpuinfo_x86 *c)
if
(
c
->
x86_power
&
(
1
<<
8
))
if
(
c
->
x86_power
&
(
1
<<
8
))
set_cpu_cap
(
c
,
X86_FEATURE_CONSTANT_TSC
);
set_cpu_cap
(
c
,
X86_FEATURE_CONSTANT_TSC
);
}
}
/* Set MTRR capability flag if appropriate */
if
(
c
->
x86_model
==
13
||
c
->
x86_model
==
9
||
(
c
->
x86_model
==
8
&&
c
->
x86_mask
>=
8
))
set_cpu_cap
(
c
,
X86_FEATURE_K6_MTRR
);
}
}
static
void
__cpuinit
init_amd
(
struct
cpuinfo_x86
*
c
)
static
void
__cpuinit
init_amd
(
struct
cpuinfo_x86
*
c
)
...
@@ -166,10 +171,6 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
...
@@ -166,10 +171,6 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
mbytes
);
mbytes
);
}
}
/* Set MTRR capability flag if appropriate */
if
(
c
->
x86_model
==
13
||
c
->
x86_model
==
9
||
(
c
->
x86_model
==
8
&&
c
->
x86_mask
>=
8
))
set_cpu_cap
(
c
,
X86_FEATURE_K6_MTRR
);
break
;
break
;
}
}
...
@@ -297,6 +298,7 @@ static struct cpu_dev amd_cpu_dev __cpuinitdata = {
...
@@ -297,6 +298,7 @@ static struct cpu_dev amd_cpu_dev __cpuinitdata = {
.
c_early_init
=
early_init_amd
,
.
c_early_init
=
early_init_amd
,
.
c_init
=
init_amd
,
.
c_init
=
init_amd
,
.
c_size_cache
=
amd_size_cache
,
.
c_size_cache
=
amd_size_cache
,
.
c_x86_vendor
=
X86_VENDOR_AMD
,
};
};
cpu_
vendor_dev_register
(
X86_VENDOR_AMD
,
&
amd_cpu_dev
);
cpu_
dev_register
(
amd_cpu_dev
);
arch/x86/kernel/cpu/amd_64.c
View file @
446d2733
...
@@ -218,7 +218,7 @@ static struct cpu_dev amd_cpu_dev __cpuinitdata = {
...
@@ -218,7 +218,7 @@ static struct cpu_dev amd_cpu_dev __cpuinitdata = {
.
c_ident
=
{
"AuthenticAMD"
},
.
c_ident
=
{
"AuthenticAMD"
},
.
c_early_init
=
early_init_amd
,
.
c_early_init
=
early_init_amd
,
.
c_init
=
init_amd
,
.
c_init
=
init_amd
,
.
c_x86_vendor
=
X86_VENDOR_AMD
,
};
};
cpu_vendor_dev_register
(
X86_VENDOR_AMD
,
&
amd_cpu_dev
);
cpu_dev_register
(
amd_cpu_dev
);
arch/x86/kernel/cpu/centaur.c
View file @
446d2733
...
@@ -314,6 +314,16 @@ enum {
...
@@ -314,6 +314,16 @@ enum {
EAMD3D
=
1
<<
20
,
EAMD3D
=
1
<<
20
,
};
};
static
void
__cpuinit
early_init_centaur
(
struct
cpuinfo_x86
*
c
)
{
switch
(
c
->
x86
)
{
case
5
:
/* Emulate MTRRs using Centaur's MCR. */
set_cpu_cap
(
c
,
X86_FEATURE_CENTAUR_MCR
);
break
;
}
}
static
void
__cpuinit
init_centaur
(
struct
cpuinfo_x86
*
c
)
static
void
__cpuinit
init_centaur
(
struct
cpuinfo_x86
*
c
)
{
{
...
@@ -462,8 +472,10 @@ centaur_size_cache(struct cpuinfo_x86 *c, unsigned int size)
...
@@ -462,8 +472,10 @@ centaur_size_cache(struct cpuinfo_x86 *c, unsigned int size)
static
struct
cpu_dev
centaur_cpu_dev
__cpuinitdata
=
{
static
struct
cpu_dev
centaur_cpu_dev
__cpuinitdata
=
{
.
c_vendor
=
"Centaur"
,
.
c_vendor
=
"Centaur"
,
.
c_ident
=
{
"CentaurHauls"
},
.
c_ident
=
{
"CentaurHauls"
},
.
c_early_init
=
early_init_centaur
,
.
c_init
=
init_centaur
,
.
c_init
=
init_centaur
,
.
c_size_cache
=
centaur_size_cache
,
.
c_size_cache
=
centaur_size_cache
,
.
c_x86_vendor
=
X86_VENDOR_CENTAUR
,
};
};
cpu_
vendor_dev_register
(
X86_VENDOR_CENTAUR
,
&
centaur_cpu_dev
);
cpu_
dev_register
(
centaur_cpu_dev
);
arch/x86/kernel/cpu/centaur_64.c
View file @
446d2733
...
@@ -29,7 +29,8 @@ static struct cpu_dev centaur_cpu_dev __cpuinitdata = {
...
@@ -29,7 +29,8 @@ static struct cpu_dev centaur_cpu_dev __cpuinitdata = {
.
c_ident
=
{
"CentaurHauls"
},
.
c_ident
=
{
"CentaurHauls"
},
.
c_early_init
=
early_init_centaur
,
.
c_early_init
=
early_init_centaur
,
.
c_init
=
init_centaur
,
.
c_init
=
init_centaur
,
.
c_x86_vendor
=
X86_VENDOR_CENTAUR
,
};
};
cpu_
vendor_dev_register
(
X86_VENDOR_CENTAUR
,
&
centaur_cpu_dev
);
cpu_
dev_register
(
centaur_cpu_dev
);
arch/x86/kernel/cpu/common.c
View file @
446d2733
This diff is collapsed.
Click to expand it.
arch/x86/kernel/cpu/common_64.c
View file @
446d2733
This diff is collapsed.
Click to expand it.
arch/x86/kernel/cpu/cpu.h
View file @
446d2733
...
@@ -21,21 +21,15 @@ struct cpu_dev {
...
@@ -21,21 +21,15 @@ struct cpu_dev {
void
(
*
c_init
)(
struct
cpuinfo_x86
*
c
);
void
(
*
c_init
)(
struct
cpuinfo_x86
*
c
);
void
(
*
c_identify
)(
struct
cpuinfo_x86
*
c
);
void
(
*
c_identify
)(
struct
cpuinfo_x86
*
c
);
unsigned
int
(
*
c_size_cache
)(
struct
cpuinfo_x86
*
c
,
unsigned
int
size
);
unsigned
int
(
*
c_size_cache
)(
struct
cpuinfo_x86
*
c
,
unsigned
int
size
);
int
c_x86_vendor
;
};
};
extern
struct
cpu_dev
*
cpu_devs
[
X86_VENDOR_NUM
];
#define cpu_dev_register(cpu_devX) \
static struct cpu_dev *__cpu_dev_##cpu_devX __used \
__attribute__((__section__(".x86_cpu_dev.init"))) = \
&cpu_devX;
struct
cpu_vendor_dev
{
extern
struct
cpu_dev
*
__x86_cpu_dev_start
[],
*
__x86_cpu_dev_end
[];
int
vendor
;
struct
cpu_dev
*
cpu_dev
;
};
#define cpu_vendor_dev_register(cpu_vendor_id, cpu_dev) \
static struct cpu_vendor_dev __cpu_vendor_dev_##cpu_vendor_id __used \
__attribute__((__section__(".x86cpuvendor.init"))) = \
{ cpu_vendor_id, cpu_dev }
extern
struct
cpu_vendor_dev
__x86cpuvendor_start
[],
__x86cpuvendor_end
[];
extern
int
get_model_name
(
struct
cpuinfo_x86
*
c
);
extern
int
get_model_name
(
struct
cpuinfo_x86
*
c
);
extern
void
display_cacheinfo
(
struct
cpuinfo_x86
*
c
);
extern
void
display_cacheinfo
(
struct
cpuinfo_x86
*
c
);
...
...
arch/x86/kernel/cpu/cyrix.c
View file @
446d2733
...
@@ -15,13 +15,11 @@
...
@@ -15,13 +15,11 @@
/*
/*
* Read NSC/Cyrix DEVID registers (DIR) to get more detailed info. about the CPU
* Read NSC/Cyrix DEVID registers (DIR) to get more detailed info. about the CPU
*/
*/
static
void
__cpuinit
do_cyrix_devid
(
unsigned
char
*
dir0
,
unsigned
char
*
dir1
)
static
void
__cpuinit
__
do_cyrix_devid
(
unsigned
char
*
dir0
,
unsigned
char
*
dir1
)
{
{
unsigned
char
ccr2
,
ccr3
;
unsigned
char
ccr2
,
ccr3
;
unsigned
long
flags
;
/* we test for DEVID by checking whether CCR3 is writable */
/* we test for DEVID by checking whether CCR3 is writable */
local_irq_save
(
flags
);
ccr3
=
getCx86
(
CX86_CCR3
);
ccr3
=
getCx86
(
CX86_CCR3
);
setCx86
(
CX86_CCR3
,
ccr3
^
0x80
);
setCx86
(
CX86_CCR3
,
ccr3
^
0x80
);
getCx86
(
0xc0
);
/* dummy to change bus */
getCx86
(
0xc0
);
/* dummy to change bus */
...
@@ -44,9 +42,16 @@ static void __cpuinit do_cyrix_devid(unsigned char *dir0, unsigned char *dir1)
...
@@ -44,9 +42,16 @@ static void __cpuinit do_cyrix_devid(unsigned char *dir0, unsigned char *dir1)
*
dir0
=
getCx86
(
CX86_DIR0
);
*
dir0
=
getCx86
(
CX86_DIR0
);
*
dir1
=
getCx86
(
CX86_DIR1
);
*
dir1
=
getCx86
(
CX86_DIR1
);
}
}
local_irq_restore
(
flags
);
}
}
static
void
__cpuinit
do_cyrix_devid
(
unsigned
char
*
dir0
,
unsigned
char
*
dir1
)
{
unsigned
long
flags
;
local_irq_save
(
flags
);
__do_cyrix_devid
(
dir0
,
dir1
);
local_irq_restore
(
flags
);
}
/*
/*
* Cx86_dir0_msb is a HACK needed by check_cx686_cpuid/slop in bugs.h in
* Cx86_dir0_msb is a HACK needed by check_cx686_cpuid/slop in bugs.h in
* order to identify the Cyrix CPU model after we're out of setup.c
* order to identify the Cyrix CPU model after we're out of setup.c
...
@@ -161,6 +166,24 @@ static void __cpuinit geode_configure(void)
...
@@ -161,6 +166,24 @@ static void __cpuinit geode_configure(void)
local_irq_restore
(
flags
);
local_irq_restore
(
flags
);
}
}
static
void
__cpuinit
early_init_cyrix
(
struct
cpuinfo_x86
*
c
)
{
unsigned
char
dir0
,
dir0_msn
,
dir1
=
0
;
__do_cyrix_devid
(
&
dir0
,
&
dir1
);
dir0_msn
=
dir0
>>
4
;
/* identifies CPU "family" */
switch
(
dir0_msn
)
{
case
3
:
/* 6x86/6x86L */
/* Emulate MTRRs using Cyrix's ARRs. */
set_cpu_cap
(
c
,
X86_FEATURE_CYRIX_ARR
);
break
;
case
5
:
/* 6x86MX/M II */
/* Emulate MTRRs using Cyrix's ARRs. */
set_cpu_cap
(
c
,
X86_FEATURE_CYRIX_ARR
);
break
;
}
}
static
void
__cpuinit
init_cyrix
(
struct
cpuinfo_x86
*
c
)
static
void
__cpuinit
init_cyrix
(
struct
cpuinfo_x86
*
c
)
{
{
...
@@ -416,16 +439,19 @@ static void __cpuinit cyrix_identify(struct cpuinfo_x86 *c)
...
@@ -416,16 +439,19 @@ static void __cpuinit cyrix_identify(struct cpuinfo_x86 *c)
static
struct
cpu_dev
cyrix_cpu_dev
__cpuinitdata
=
{
static
struct
cpu_dev
cyrix_cpu_dev
__cpuinitdata
=
{
.
c_vendor
=
"Cyrix"
,
.
c_vendor
=
"Cyrix"
,
.
c_ident
=
{
"CyrixInstead"
},
.
c_ident
=
{
"CyrixInstead"
},
.
c_early_init
=
early_init_cyrix
,
.
c_init
=
init_cyrix
,
.
c_init
=
init_cyrix
,
.
c_identify
=
cyrix_identify
,
.
c_identify
=
cyrix_identify
,
.
c_x86_vendor
=
X86_VENDOR_CYRIX
,
};
};
cpu_
vendor_dev_register
(
X86_VENDOR_CYRIX
,
&
cyrix_cpu_dev
);
cpu_
dev_register
(
cyrix_cpu_dev
);
static
struct
cpu_dev
nsc_cpu_dev
__cpuinitdata
=
{
static
struct
cpu_dev
nsc_cpu_dev
__cpuinitdata
=
{
.
c_vendor
=
"NSC"
,
.
c_vendor
=
"NSC"
,
.
c_ident
=
{
"Geode by NSC"
},
.
c_ident
=
{
"Geode by NSC"
},
.
c_init
=
init_nsc
,
.
c_init
=
init_nsc
,
.
c_x86_vendor
=
X86_VENDOR_NSC
,
};
};
cpu_
vendor_dev_register
(
X86_VENDOR_NSC
,
&
nsc_cpu_dev
);
cpu_
dev_register
(
nsc_cpu_dev
);
arch/x86/kernel/cpu/intel.c
View file @
446d2733
...
@@ -303,9 +303,10 @@ static struct cpu_dev intel_cpu_dev __cpuinitdata = {
...
@@ -303,9 +303,10 @@ static struct cpu_dev intel_cpu_dev __cpuinitdata = {
.
c_early_init
=
early_init_intel
,
.
c_early_init
=
early_init_intel
,
.
c_init
=
init_intel
,
.
c_init
=
init_intel
,
.
c_size_cache
=
intel_size_cache
,
.
c_size_cache
=
intel_size_cache
,
.
c_x86_vendor
=
X86_VENDOR_INTEL
,
};
};
cpu_
vendor_dev_register
(
X86_VENDOR_INTEL
,
&
intel_cpu_dev
);
cpu_
dev_register
(
intel_cpu_dev
);
/* arch_initcall(intel_cpu_init); */
/* arch_initcall(intel_cpu_init); */
arch/x86/kernel/cpu/intel_64.c
View file @
446d2733
...
@@ -90,6 +90,7 @@ static struct cpu_dev intel_cpu_dev __cpuinitdata = {
...
@@ -90,6 +90,7 @@ static struct cpu_dev intel_cpu_dev __cpuinitdata = {
.
c_ident
=
{
"GenuineIntel"
},
.
c_ident
=
{
"GenuineIntel"
},
.
c_early_init
=
early_init_intel
,
.
c_early_init
=
early_init_intel
,
.
c_init
=
init_intel
,
.
c_init
=
init_intel
,
.
c_x86_vendor
=
X86_VENDOR_INTEL
,
};
};
cpu_vendor_dev_register
(
X86_VENDOR_INTEL
,
&
intel_cpu_dev
);
cpu_dev_register
(
intel_cpu_dev
);
arch/x86/kernel/cpu/transmeta.c
View file @
446d2733
...
@@ -102,6 +102,7 @@ static struct cpu_dev transmeta_cpu_dev __cpuinitdata = {
...
@@ -102,6 +102,7 @@ static struct cpu_dev transmeta_cpu_dev __cpuinitdata = {
.
c_ident
=
{
"GenuineTMx86"
,
"TransmetaCPU"
},
.
c_ident
=
{
"GenuineTMx86"
,
"TransmetaCPU"
},
.
c_init
=
init_transmeta
,
.
c_init
=
init_transmeta
,
.
c_identify
=
transmeta_identify
,
.
c_identify
=
transmeta_identify
,
.
c_x86_vendor
=
X86_VENDOR_TRANSMETA
,
};
};
cpu_
vendor_dev_register
(
X86_VENDOR_TRANSMETA
,
&
transmeta_cpu_dev
);
cpu_
dev_register
(
transmeta_cpu_dev
);
arch/x86/kernel/cpu/umc.c
View file @
446d2733
...
@@ -19,7 +19,8 @@ static struct cpu_dev umc_cpu_dev __cpuinitdata = {
...
@@ -19,7 +19,8 @@ static struct cpu_dev umc_cpu_dev __cpuinitdata = {
}
}
},
},
},
},
.
c_x86_vendor
=
X86_VENDOR_UMC
,
};
};
cpu_
vendor_dev_register
(
X86_VENDOR_UMC
,
&
umc_cpu_dev
);
cpu_
dev_register
(
umc_cpu_dev
);
arch/x86/kernel/paravirt.c
View file @
446d2733
...
@@ -330,6 +330,7 @@ struct pv_cpu_ops pv_cpu_ops = {
...
@@ -330,6 +330,7 @@ struct pv_cpu_ops pv_cpu_ops = {
#endif
#endif
.
wbinvd
=
native_wbinvd
,
.
wbinvd
=
native_wbinvd
,
.
read_msr
=
native_read_msr_safe
,
.
read_msr
=
native_read_msr_safe
,
.
read_msr_amd
=
native_read_msr_amd_safe
,
.
write_msr
=
native_write_msr_safe
,
.
write_msr
=
native_write_msr_safe
,
.
read_tsc
=
native_read_tsc
,
.
read_tsc
=
native_read_tsc
,
.
read_pmc
=
native_read_pmc
,
.
read_pmc
=
native_read_pmc
,
...
...
arch/x86/kernel/traps_64.c
View file @
446d2733
...
@@ -339,9 +339,8 @@ static void
...
@@ -339,9 +339,8 @@ static void
show_trace_log_lvl
(
struct
task_struct
*
task
,
struct
pt_regs
*
regs
,
show_trace_log_lvl
(
struct
task_struct
*
task
,
struct
pt_regs
*
regs
,
unsigned
long
*
stack
,
unsigned
long
bp
,
char
*
log_lvl
)
unsigned
long
*
stack
,
unsigned
long
bp
,
char
*
log_lvl
)
{
{
printk
(
"
\n
Call Trace:
\n
"
);
printk
(
"Call Trace:
\n
"
);
dump_trace
(
task
,
regs
,
stack
,
bp
,
&
print_trace_ops
,
log_lvl
);
dump_trace
(
task
,
regs
,
stack
,
bp
,
&
print_trace_ops
,
log_lvl
);
printk
(
"
\n
"
);
}
}
void
show_trace
(
struct
task_struct
*
task
,
struct
pt_regs
*
regs
,
void
show_trace
(
struct
task_struct
*
task
,
struct
pt_regs
*
regs
,
...
@@ -386,6 +385,7 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
...
@@ -386,6 +385,7 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
printk
(
" %016lx"
,
*
stack
++
);
printk
(
" %016lx"
,
*
stack
++
);
touch_nmi_watchdog
();
touch_nmi_watchdog
();
}
}
printk
(
"
\n
"
);
show_trace_log_lvl
(
task
,
regs
,
sp
,
bp
,
log_lvl
);
show_trace_log_lvl
(
task
,
regs
,
sp
,
bp
,
log_lvl
);
}
}
...
@@ -443,7 +443,6 @@ void show_registers(struct pt_regs *regs)
...
@@ -443,7 +443,6 @@ void show_registers(struct pt_regs *regs)
printk
(
"Stack: "
);
printk
(
"Stack: "
);
show_stack_log_lvl
(
NULL
,
regs
,
(
unsigned
long
*
)
sp
,
show_stack_log_lvl
(
NULL
,
regs
,
(
unsigned
long
*
)
sp
,
regs
->
bp
,
""
);
regs
->
bp
,
""
);
printk
(
"
\n
"
);
printk
(
KERN_EMERG
"Code: "
);
printk
(
KERN_EMERG
"Code: "
);
...
...
arch/x86/kernel/vmlinux_32.lds.S
View file @
446d2733
...
@@ -140,10 +140,10 @@ SECTIONS
...
@@ -140,10 +140,10 @@ SECTIONS
*(.
con_initcall
.
init
)
*(.
con_initcall
.
init
)
__con_initcall_end
=
.
;
__con_initcall_end
=
.
;
}
}
.
x86
cpuvendor.init
:
AT
(
ADDR
(
.
x86cpuvendor
.
init
)
-
LOAD_OFFSET
)
{
.
x86
_cpu_dev
.
init
:
AT
(
ADDR
(
.
x86_cpu_dev
.
init
)
-
LOAD_OFFSET
)
{
__x86
cpuvendor
_start
=
.
;
__x86
_cpu_dev
_start
=
.
;
*(.
x86
cpuvendor
.init
)
*(.
x86
_cpu_dev
.
init
)
__x86
cpuvendor
_end
=
.
;
__x86
_cpu_dev
_end
=
.
;
}
}
SECURITY_INIT
SECURITY_INIT
.
=
ALIGN
(
4
)
;
.
=
ALIGN
(
4
)
;
...
...
arch/x86/kernel/vmlinux_64.lds.S
View file @
446d2733
...
@@ -168,13 +168,12 @@ SECTIONS
...
@@ -168,13 +168,12 @@ SECTIONS
*(.
con_initcall
.
init
)
*(.
con_initcall
.
init
)
}
}
__con_initcall_end
=
.
;
__con_initcall_end
=
.
;
.
=
ALIGN
(
16
)
;
__x86_cpu_dev_start
=
.
;
__x86cpuvendor_start
=
.
;
.
x86_cpu_dev
.
init
:
AT
(
ADDR
(
.
x86_cpu_dev
.
init
)
-
LOAD_OFFSET
)
{
.
x86cpuvendor.init
:
AT
(
ADDR
(
.
x86cpuvendor
.
init
)
-
LOAD_OFFSET
)
{
*(.
x86_cpu_dev
.
init
)
*(.
x86cpuvendor.init
)
}
}
__x86cpuvendor_end
=
.
;
SECURITY_INIT
SECURITY_INIT
__x86_cpu_dev_end
=
.
;
.
=
ALIGN
(
8
)
;
.
=
ALIGN
(
8
)
;
.
parainstructions
:
AT
(
ADDR
(
.
parainstructions
)
-
LOAD_OFFSET
)
{
.
parainstructions
:
AT
(
ADDR
(
.
parainstructions
)
-
LOAD_OFFSET
)
{
...
...
include/asm-x86/msr.h
View file @
446d2733
...
@@ -63,6 +63,22 @@ static inline unsigned long long native_read_msr_safe(unsigned int msr,
...
@@ -63,6 +63,22 @@ static inline unsigned long long native_read_msr_safe(unsigned int msr,
return
EAX_EDX_VAL
(
val
,
low
,
high
);
return
EAX_EDX_VAL
(
val
,
low
,
high
);
}
}
static
inline
unsigned
long
long
native_read_msr_amd_safe
(
unsigned
int
msr
,
int
*
err
)
{
DECLARE_ARGS
(
val
,
low
,
high
);
asm
volatile
(
"2: rdmsr ; xor %0,%0
\n
"
"1:
\n\t
"
".section .fixup,
\"
ax
\"\n\t
"
"3: mov %3,%0 ; jmp 1b
\n\t
"
".previous
\n\t
"
_ASM_EXTABLE
(
2
b
,
3
b
)
:
"=r"
(
*
err
),
EAX_EDX_RET
(
val
,
low
,
high
)
:
"c"
(
msr
),
"D"
(
0x9c5a203a
),
"i"
(
-
EFAULT
));
return
EAX_EDX_VAL
(
val
,
low
,
high
);
}
static
inline
void
native_write_msr
(
unsigned
int
msr
,
static
inline
void
native_write_msr
(
unsigned
int
msr
,
unsigned
low
,
unsigned
high
)
unsigned
low
,
unsigned
high
)
{
{
...
@@ -158,6 +174,13 @@ static inline int rdmsrl_safe(unsigned msr, unsigned long long *p)
...
@@ -158,6 +174,13 @@ static inline int rdmsrl_safe(unsigned msr, unsigned long long *p)
*
p
=
native_read_msr_safe
(
msr
,
&
err
);
*
p
=
native_read_msr_safe
(
msr
,
&
err
);
return
err
;
return
err
;
}
}
static
inline
int
rdmsrl_amd_safe
(
unsigned
msr
,
unsigned
long
long
*
p
)
{
int
err
;
*
p
=
native_read_msr_amd_safe
(
msr
,
&
err
);
return
err
;
}
#define rdtscl(low) \
#define rdtscl(low) \
((low) = (u32)native_read_tsc())
((low) = (u32)native_read_tsc())
...
...
include/asm-x86/paravirt.h
View file @
446d2733
...
@@ -137,6 +137,7 @@ struct pv_cpu_ops {
...
@@ -137,6 +137,7 @@ struct pv_cpu_ops {
/* MSR, PMC and TSR operations.
/* MSR, PMC and TSR operations.
err = 0/-EFAULT. wrmsr returns 0/-EFAULT. */
err = 0/-EFAULT. wrmsr returns 0/-EFAULT. */
u64
(
*
read_msr_amd
)(
unsigned
int
msr
,
int
*
err
);
u64
(
*
read_msr
)(
unsigned
int
msr
,
int
*
err
);
u64
(
*
read_msr
)(
unsigned
int
msr
,
int
*
err
);
int
(
*
write_msr
)(
unsigned
int
msr
,
unsigned
low
,
unsigned
high
);
int
(
*
write_msr
)(
unsigned
int
msr
,
unsigned
low
,
unsigned
high
);
...
@@ -720,6 +721,10 @@ static inline u64 paravirt_read_msr(unsigned msr, int *err)
...
@@ -720,6 +721,10 @@ static inline u64 paravirt_read_msr(unsigned msr, int *err)
{
{
return
PVOP_CALL2
(
u64
,
pv_cpu_ops
.
read_msr
,
msr
,
err
);
return
PVOP_CALL2
(
u64
,
pv_cpu_ops
.
read_msr
,
msr
,
err
);
}
}
static
inline
u64
paravirt_read_msr_amd
(
unsigned
msr
,
int
*
err
)
{
return
PVOP_CALL2
(
u64
,
pv_cpu_ops
.
read_msr_amd
,
msr
,
err
);
}
static
inline
int
paravirt_write_msr
(
unsigned
msr
,
unsigned
low
,
unsigned
high
)
static
inline
int
paravirt_write_msr
(
unsigned
msr
,
unsigned
low
,
unsigned
high
)
{
{
return
PVOP_CALL3
(
int
,
pv_cpu_ops
.
write_msr
,
msr
,
low
,
high
);
return
PVOP_CALL3
(
int
,
pv_cpu_ops
.
write_msr
,
msr
,
low
,
high
);
...
@@ -765,6 +770,13 @@ static inline int rdmsrl_safe(unsigned msr, unsigned long long *p)
...
@@ -765,6 +770,13 @@ static inline int rdmsrl_safe(unsigned msr, unsigned long long *p)
*
p
=
paravirt_read_msr
(
msr
,
&
err
);
*
p
=
paravirt_read_msr
(
msr
,
&
err
);
return
err
;
return
err
;
}
}
static
inline
int
rdmsrl_amd_safe
(
unsigned
msr
,
unsigned
long
long
*
p
)
{
int
err
;
*
p
=
paravirt_read_msr_amd
(
msr
,
&
err
);
return
err
;
}
static
inline
u64
paravirt_read_tsc
(
void
)
static
inline
u64
paravirt_read_tsc
(
void
)
{
{
...
...
include/asm-x86/processor.h
View file @
446d2733
...
@@ -77,9 +77,9 @@ struct cpuinfo_x86 {
...
@@ -77,9 +77,9 @@ struct cpuinfo_x86 {
__u8
x86_phys_bits
;
__u8
x86_phys_bits
;
/* CPUID returned core id bits: */
/* CPUID returned core id bits: */
__u8
x86_coreid_bits
;
__u8
x86_coreid_bits
;
#endif
/* Max extended CPUID function supported: */
/* Max extended CPUID function supported: */
__u32
extended_cpuid_level
;
__u32
extended_cpuid_level
;
#endif
/* Maximum supported CPUID level, -1=no CPUID: */
/* Maximum supported CPUID level, -1=no CPUID: */
int
cpuid_level
;
int
cpuid_level
;
__u32
x86_capability
[
NCAPINTS
];
__u32
x86_capability
[
NCAPINTS
];
...
...
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