diff mbox series

x86/suspend: Don't save/restore %cr8

Message ID 20190715171034.29709-1-andrew.cooper3@citrix.com (mailing list archive)
State New, archived
Headers show
Series x86/suspend: Don't save/restore %cr8 | expand

Commit Message

Andrew Cooper July 15, 2019, 5:10 p.m. UTC
%cr8 is an alias of APIC_TASKPRI, which is handled by
lapic_{suspend,resume}() with the rest of the Local APIC state.  Saving
and restoring the TPR state in isolation is not a clever idea.

Drop it all.

While editing wakeup_prot.S, trim its include list to just the headers
which are used, which is precicely none of them.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Wei Liu <wl@xen.org>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Juergen Gross <jgross@suse.com>

This is a Xen mirror to my Linux patch of the same effect:
https://lore.kernel.org/lkml/20190715151641.29210-1-andrew.cooper3@citrix.com/T/#u

With a bit of care, I'm pretty sure the whole of wakeup_prot.S can
disappear, but -ETIME right now.

I've confirmed that after resume TPR retains its value of 0x10.  However, all
attempts to debug the internals of lapic_suspend/resume have eluded me,
including manually poking the UART.  Again, -ETIME to investigate further.
---
 xen/arch/x86/acpi/wakeup_prot.S | 15 ---------------
 1 file changed, 15 deletions(-)

Comments

Jan Beulich July 16, 2019, 7:03 a.m. UTC | #1
On 15.07.2019 19:10, Andrew Cooper wrote:
> %cr8 is an alias of APIC_TASKPRI, which is handled by
> lapic_{suspend,resume}() with the rest of the Local APIC state.  Saving
> and restoring the TPR state in isolation is not a clever idea.
> 
> Drop it all.
> 
> While editing wakeup_prot.S, trim its include list to just the headers
> which are used, which is precicely none of them.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>
diff mbox series

Patch

diff --git a/xen/arch/x86/acpi/wakeup_prot.S b/xen/arch/x86/acpi/wakeup_prot.S
index 361751d290..4a92627436 100644
--- a/xen/arch/x86/acpi/wakeup_prot.S
+++ b/xen/arch/x86/acpi/wakeup_prot.S
@@ -1,13 +1,5 @@ 
         .file __FILE__
         .text
-
-#include <xen/multiboot.h>
-#include <public/xen.h>
-#include <asm/asm_defns.h>
-#include <asm/desc.h>
-#include <asm/page.h>
-#include <asm/msr.h>
-
         .code64
 
 #define GREG(x)         %r##x
@@ -40,9 +32,6 @@  ENTRY(do_suspend_lowlevel)
         pushfq;
         popq    SAVED_GREG(flags)
 
-        mov     %cr8, GREG(ax)
-        mov     GREG(ax), REF(saved_cr8)
-
         mov     %ss, REF(saved_ss)
 
         sgdt    REF(saved_gdt)
@@ -90,9 +79,6 @@  ENTRY(__ret_point)
         pushq   %rax
         lretq
 1:
-        mov     REF(saved_cr8), %rax
-        mov     %rax, %cr8
-
         pushq   SAVED_GREG(flags)
         popfq
 
@@ -149,4 +135,3 @@  saved_ldt:      .quad   0,0
 
 saved_cr0:      .quad   0
 saved_cr3:      .quad   0
-saved_cr8:      .quad   0