[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen stable-4.8] x86: correct ordering of operations during S3 resume



commit 9cba9aeb4d9b8edad91db30ccfab451244e67a9d
Author:     Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Fri May 18 12:07:41 2018 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri May 18 12:07:41 2018 +0200

    x86: correct ordering of operations during S3 resume
    
    Microcode loading needs to happen before re-enabling interrupts, in case
    only updated microcode allows the use of e.g. the SPEC_{CTRL,CMD} MSRs.
    Otoh it doesn't need to happen at all when we didn't suspend in the
    first place. It needs to happen before spin_debug_enable() though, as it
    acquires a lock and hence would otherwise make
    common/spinlock.c:check_lock() unhappy. As micrcode loading can be
    pretty verbose, also make sure it only runs after console_end_sync().
    
    cpufreq_add_cpu() doesn't need calling on the only "goto enable_cpu"
    path, which sits ahead of cpufreq_del_cpu().
    
    Reported-by: Simon Gaiser <simon@xxxxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    master commit: cb2a4a449dfd50af309a333aa805835015fbc8c8
    master date: 2018-04-16 14:08:30 +0200
---
 xen/arch/x86/acpi/power.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/xen/arch/x86/acpi/power.c b/xen/arch/x86/acpi/power.c
index 2cb3d13347..9abca61cd6 100644
--- a/xen/arch/x86/acpi/power.c
+++ b/xen/arch/x86/acpi/power.c
@@ -204,6 +204,7 @@ static int enter_state(u32 state)
         printk(XENLOG_ERR "Some devices failed to power down.");
         system_state = SYS_STATE_resume;
         device_power_up(error);
+        console_end_sync();
         error = -EIO;
         goto done;
     }
@@ -244,17 +245,19 @@ static int enter_state(u32 state)
     if ( (state == ACPI_STATE_S3) && error )
         tboot_s3_error(error);
 
+    console_end_sync();
+
+    microcode_resume_cpu(0);
+
  done:
     spin_debug_enable();
     local_irq_restore(flags);
-    console_end_sync();
     acpi_sleep_post(state);
     if ( hvm_cpu_up() )
         BUG();
+    cpufreq_add_cpu(0);
 
  enable_cpu:
-    cpufreq_add_cpu(0);
-    microcode_resume_cpu(0);
     rcu_barrier();
     mtrr_aps_sync_begin();
     enable_nonboot_cpus();
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.8

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

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