WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] x86 ucode: microcode logic update

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] x86 ucode: microcode logic update
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 22 Jan 2009 10:00:12 -0800
Delivery-date: Thu, 22 Jan 2009 10:00:04 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1232622670 0
# Node ID a1d0868ffadf171ce9f4c61f4dc57f4d4abe4e4c
# Parent  97228980cd0425130eceb958b02f5fcaa8511860
x86 ucode: microcode logic update

Update microcode logic:
1. separate microcode_fini_cpu() into 2 level to avoid deadlock (when
fail at microcode_update_cpu);
2. cancel redundant collect_cpu_info at microcode.c level, use
relative function at microcode driver level;
3. separate microcode_resume_cpu from microcode_update_cpu, because
it's redundant (should only be called when S3 wakeup) and will block newer
microcode update when user update newer microcode.dat from user level

Signed-off-by: Liu, Jinsong <jinsong.liu@xxxxxxxxx>
---
 xen/arch/x86/microcode.c       |   37 ++++++++++++++-----------------------
 xen/arch/x86/microcode_intel.c |    2 ++
 2 files changed, 16 insertions(+), 23 deletions(-)

diff -r 97228980cd04 -r a1d0868ffadf xen/arch/x86/microcode.c
--- a/xen/arch/x86/microcode.c  Thu Jan 22 11:10:04 2009 +0000
+++ b/xen/arch/x86/microcode.c  Thu Jan 22 11:11:10 2009 +0000
@@ -49,25 +49,22 @@ struct microcode_info {
     char buffer[1];
 };
 
-static void microcode_fini_cpu(int cpu)
+static void __microcode_fini_cpu(int cpu)
 {
     struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
 
+    xfree(uci->mc.mc_valid);
+    memset(uci, 0, sizeof(*uci));
+}
+
+static void microcode_fini_cpu(int cpu)
+{
     spin_lock(&microcode_mutex);
-    xfree(uci->mc.mc_valid);
-    uci->mc.mc_valid = NULL;
+    __microcode_fini_cpu(cpu);
     spin_unlock(&microcode_mutex);
 }
 
-static int collect_cpu_info(int cpu)
-{
-    struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
-
-    memset(uci, 0, sizeof(*uci));
-    return microcode_ops->collect_cpu_info(cpu, &uci->cpu_sig);
-}
-
-static int microcode_resume_cpu(int cpu)
+int microcode_resume_cpu(int cpu)
 {
     int err = 0;
     struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
@@ -107,17 +104,11 @@ static int microcode_update_cpu(const vo
 
     spin_lock(&microcode_mutex);
 
-    /*
-     * Check if the system resume is in progress (uci->mc.mc_valid != NULL),
-     * otherwise just request a firmware:
-     */
-    if ( uci->mc.mc_valid ) {
-        err = microcode_resume_cpu(cpu);
-    } else {
-        err = collect_cpu_info(cpu);
-        if ( !err )
-            err = microcode_ops->cpu_request_microcode(cpu, buf, size);
-    }
+    err = microcode_ops->collect_cpu_info(cpu, &uci->cpu_sig);
+    if ( likely(!err) )
+        err = microcode_ops->cpu_request_microcode(cpu, buf, size);
+    else
+        __microcode_fini_cpu(cpu);
 
     spin_unlock(&microcode_mutex);
 
diff -r 97228980cd04 -r a1d0868ffadf xen/arch/x86/microcode_intel.c
--- a/xen/arch/x86/microcode_intel.c    Thu Jan 22 11:10:04 2009 +0000
+++ b/xen/arch/x86/microcode_intel.c    Thu Jan 22 11:11:10 2009 +0000
@@ -63,6 +63,8 @@ static int collect_cpu_info(int cpu_num,
 {
     struct cpuinfo_x86 *c = &cpu_data[cpu_num];
     unsigned int val[2];
+
+    BUG_ON(cpu_num != smp_processor_id());
 
     memset(csig, 0, sizeof(*csig));
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] x86 ucode: microcode logic update, Xen patchbot-unstable <=