diff options
Diffstat (limited to 'arch/x86/kernel/cpu/amd.c')
| -rw-r--r-- | arch/x86/kernel/cpu/amd.c | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index a220239cea65..fd470ebf924e 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c @@ -5,6 +5,7 @@  #include <linux/io.h>  #include <linux/sched.h> +#include <linux/random.h>  #include <asm/processor.h>  #include <asm/apic.h>  #include <asm/cpu.h> @@ -488,6 +489,9 @@ static void bsp_init_amd(struct cpuinfo_x86 *c)  		va_align.mask	  = (upperbit - 1) & PAGE_MASK;  		va_align.flags    = ALIGN_VA_32 | ALIGN_VA_64; + +		/* A random value per boot for bit slice [12:upper_bit) */ +		va_align.bits = get_random_int() & va_align.mask;  	}  } @@ -711,6 +715,11 @@ static void init_amd(struct cpuinfo_x86 *c)  		set_cpu_bug(c, X86_BUG_AMD_APIC_C1E);  	rdmsr_safe(MSR_AMD64_PATCH_LEVEL, &c->microcode, &dummy); + +	/* 3DNow or LM implies PREFETCHW */ +	if (!cpu_has(c, X86_FEATURE_3DNOWPREFETCH)) +		if (cpu_has(c, X86_FEATURE_3DNOW) || cpu_has(c, X86_FEATURE_LM)) +			set_cpu_cap(c, X86_FEATURE_3DNOWPREFETCH);  }  #ifdef CONFIG_X86_32  |