[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.