diff options
author | Jarkko Sakkinen <jarkko.sakkinen@intel.com> | 2012-05-08 14:22:46 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2012-05-08 18:04:27 -0400 |
commit | cda846f101fb1396b6924f1d9b68ac3d42de5403 (patch) | |
tree | 1fa8716c308b8e10156a1caf51d8ff6c98eceea9 /arch/x86/include/asm/processor.h | |
parent | bf8b88e97716feb750c3d34492f00d9c085e1183 (diff) |
x86, realmode: read cr4 and EFER from kernel for 64-bit trampoline
This patch changes 64-bit trampoline so that CR4 and
EFER are provided by the kernel instead of using fixed
values.
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@intel.com>
Link: http://lkml.kernel.org/r/1336501366-28617-24-git-send-email-jarkko.sakkinen@intel.com
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/include/asm/processor.h')
-rw-r--r-- | arch/x86/include/asm/processor.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index 4fa7dcceb6c0..404583ccf0cf 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h | |||
@@ -544,13 +544,16 @@ static inline void load_sp0(struct tss_struct *tss, | |||
544 | * enable), so that any CPU's that boot up | 544 | * enable), so that any CPU's that boot up |
545 | * after us can get the correct flags. | 545 | * after us can get the correct flags. |
546 | */ | 546 | */ |
547 | extern unsigned long mmu_cr4_features; | 547 | extern unsigned long mmu_cr4_features; |
548 | extern u32 *trampoline_cr4_features; | ||
548 | 549 | ||
549 | static inline void set_in_cr4(unsigned long mask) | 550 | static inline void set_in_cr4(unsigned long mask) |
550 | { | 551 | { |
551 | unsigned long cr4; | 552 | unsigned long cr4; |
552 | 553 | ||
553 | mmu_cr4_features |= mask; | 554 | mmu_cr4_features |= mask; |
555 | if (trampoline_cr4_features) | ||
556 | *trampoline_cr4_features = mmu_cr4_features; | ||
554 | cr4 = read_cr4(); | 557 | cr4 = read_cr4(); |
555 | cr4 |= mask; | 558 | cr4 |= mask; |
556 | write_cr4(cr4); | 559 | write_cr4(cr4); |
@@ -561,6 +564,8 @@ static inline void clear_in_cr4(unsigned long mask) | |||
561 | unsigned long cr4; | 564 | unsigned long cr4; |
562 | 565 | ||
563 | mmu_cr4_features &= ~mask; | 566 | mmu_cr4_features &= ~mask; |
567 | if (trampoline_cr4_features) | ||
568 | *trampoline_cr4_features = mmu_cr4_features; | ||
564 | cr4 = read_cr4(); | 569 | cr4 = read_cr4(); |
565 | cr4 &= ~mask; | 570 | cr4 &= ~mask; |
566 | write_cr4(cr4); | 571 | write_cr4(cr4); |