[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Update microcode.c to linux-2.6.16-rc5 codebase.
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID e8fb817c4c1530b9f763b8a726aa00d805173a56 # Parent 941897e985917b61de194bf4334aa531156e796f Update microcode.c to linux-2.6.16-rc5 codebase. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> diff -r 941897e98591 -r e8fb817c4c15 xen/arch/x86/microcode.c --- a/xen/arch/x86/microcode.c Mon Mar 6 14:30:12 2006 +++ b/xen/arch/x86/microcode.c Mon Mar 6 14:39:48 2006 @@ -116,7 +116,7 @@ #define exttable_size(et) ((et)->count * EXT_SIGNATURE_SIZE + EXT_HEADER_SIZE) /* serialize access to the physical write to MSR 0x79 */ -static spinlock_t microcode_update_lock = SPIN_LOCK_UNLOCKED; +static DEFINE_SPINLOCK(microcode_update_lock); /* no concurrent ->write()s are allowed on /dev/cpu/microcode */ static DECLARE_MUTEX(microcode_sem); @@ -166,7 +166,8 @@ } wrmsr(MSR_IA32_UCODE_REV, 0, 0); - __asm__ __volatile__ ("cpuid" : : : "ax", "bx", "cx", "dx"); + /* see notes above for revision 1.07. Apparent chip bug */ + sync_core(); /* get the current revision from MSR 0x8B */ rdmsr(MSR_IA32_UCODE_REV, val[0], uci->rev); pr_debug("microcode: collect_cpu_info : sig=0x%x, pf=0x%x, rev=0x%x\n", @@ -366,7 +367,7 @@ struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num; if (uci->mc == NULL) { - printk(KERN_INFO "microcode: No suitable data for CPU%d\n", cpu_num); + printk(KERN_INFO "microcode: No new microcode data for CPU%d\n", cpu_num); return; } @@ -379,7 +380,9 @@ (unsigned long) uci->mc->bits >> 16 >> 16); wrmsr(MSR_IA32_UCODE_REV, 0, 0); - __asm__ __volatile__ ("cpuid" : : : "ax", "bx", "cx", "dx"); + /* see notes above for revision 1.07. Apparent chip bug */ + sync_core(); + /* get the current revision from MSR 0x8B */ rdmsr(MSR_IA32_UCODE_REV, val[0], val[1]); diff -r 941897e98591 -r e8fb817c4c15 xen/include/asm-x86/processor.h --- a/xen/include/asm-x86/processor.h Mon Mar 6 14:30:12 2006 +++ b/xen/include/asm-x86/processor.h Mon Mar 6 14:39:48 2006 @@ -352,6 +352,13 @@ outb((reg), 0x22); \ outb((data), 0x23); \ } while (0) + +/* Stop speculative execution */ +static inline void sync_core(void) +{ + int tmp; + asm volatile("cpuid" : "=a" (tmp) : "0" (1) : "ebx","ecx","edx","memory"); +} static always_inline void __monitor(const void *eax, unsigned long ecx, unsigned long edx) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |