diff options
Diffstat (limited to 'arch/x86_64/kernel/setup.c')
-rw-r--r-- | arch/x86_64/kernel/setup.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c index 28895c03cb11..363db5a003df 100644 --- a/arch/x86_64/kernel/setup.c +++ b/arch/x86_64/kernel/setup.c | |||
@@ -741,7 +741,7 @@ void __init setup_arch(char **cmdline_p) | |||
741 | e820_setup_gap(); | 741 | e820_setup_gap(); |
742 | 742 | ||
743 | #ifdef CONFIG_GART_IOMMU | 743 | #ifdef CONFIG_GART_IOMMU |
744 | iommu_hole_init(); | 744 | iommu_hole_init(); |
745 | #endif | 745 | #endif |
746 | 746 | ||
747 | #ifdef CONFIG_VT | 747 | #ifdef CONFIG_VT |
@@ -877,6 +877,7 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c) | |||
877 | static int __init init_amd(struct cpuinfo_x86 *c) | 877 | static int __init init_amd(struct cpuinfo_x86 *c) |
878 | { | 878 | { |
879 | int r; | 879 | int r; |
880 | unsigned level; | ||
880 | 881 | ||
881 | #ifdef CONFIG_SMP | 882 | #ifdef CONFIG_SMP |
882 | unsigned long value; | 883 | unsigned long value; |
@@ -899,6 +900,11 @@ static int __init init_amd(struct cpuinfo_x86 *c) | |||
899 | 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ | 900 | 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ |
900 | clear_bit(0*32+31, &c->x86_capability); | 901 | clear_bit(0*32+31, &c->x86_capability); |
901 | 902 | ||
903 | /* On C+ stepping K8 rep microcode works well for copy/memset */ | ||
904 | level = cpuid_eax(1); | ||
905 | if (c->x86 == 15 && ((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58)) | ||
906 | set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability); | ||
907 | |||
902 | r = get_model_name(c); | 908 | r = get_model_name(c); |
903 | if (!r) { | 909 | if (!r) { |
904 | switch (c->x86) { | 910 | switch (c->x86) { |