Author: jkim
Date: Mon Mar 10 20:47:24 2014
New Revision: 262981
URL: http://svnweb.freebsd.org/changeset/base/262981

Log:
  MFC:  r262746, r262748, r262750, r262752
  
  Move fpusave() wrapper for suspend hander to sys/amd64/amd64/fpu.c.

Modified:
  stable/9/sys/amd64/acpica/acpi_wakeup.c
  stable/9/sys/amd64/amd64/cpu_switch.S
  stable/9/sys/amd64/amd64/fpu.c
  stable/9/sys/amd64/amd64/mp_machdep.c
  stable/9/sys/amd64/include/fpu.h
  stable/9/sys/amd64/include/md_var.h
Directory Properties:
  stable/9/sys/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/10/sys/amd64/amd64/cpu_switch.S
  stable/10/sys/amd64/amd64/fpu.c
  stable/10/sys/amd64/amd64/mp_machdep.c
  stable/10/sys/amd64/include/fpu.h
  stable/10/sys/amd64/include/md_var.h
  stable/10/sys/x86/acpica/acpi_wakeup.c
  stable/8/sys/amd64/acpica/acpi_wakeup.c
  stable/8/sys/amd64/amd64/cpu_switch.S
  stable/8/sys/amd64/amd64/fpu.c
  stable/8/sys/amd64/amd64/mp_machdep.c
  stable/8/sys/amd64/include/fpu.h
  stable/8/sys/amd64/include/md_var.h
Directory Properties:
  stable/10/   (props changed)
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/   (props changed)

Modified: stable/9/sys/amd64/acpica/acpi_wakeup.c
==============================================================================
--- stable/9/sys/amd64/acpica/acpi_wakeup.c     Mon Mar 10 19:36:26 2014        
(r262980)
+++ stable/9/sys/amd64/acpica/acpi_wakeup.c     Mon Mar 10 20:47:24 2014        
(r262981)
@@ -242,7 +242,7 @@ acpi_sleep_machdep(struct acpi_softc *sc
        intr_suspend();
 
        if (savectx(susppcbs[0])) {
-               ctx_fpusave(suspfpusave[0]);
+               fpususpend(suspfpusave[0]);
 #ifdef SMP
                if (!CPU_EMPTY(&suspcpus) &&
                    suspend_cpus(suspcpus) == 0) {

Modified: stable/9/sys/amd64/amd64/cpu_switch.S
==============================================================================
--- stable/9/sys/amd64/amd64/cpu_switch.S       Mon Mar 10 19:36:26 2014        
(r262980)
+++ stable/9/sys/amd64/amd64/cpu_switch.S       Mon Mar 10 20:47:24 2014        
(r262981)
@@ -325,8 +325,8 @@ ENTRY(savectx)
        movq    %r14,PCB_R14(%rdi)
        movq    %r15,PCB_R15(%rdi)
 
-       movq    %cr0,%rsi
-       movq    %rsi,PCB_CR0(%rdi)
+       movq    %cr0,%rax
+       movq    %rax,PCB_CR0(%rdi)
        movq    %cr2,%rax
        movq    %rax,PCB_CR2(%rdi)
        movq    %cr3,%rax
@@ -365,19 +365,6 @@ ENTRY(savectx)
        sldt    PCB_LDT(%rdi)
        str     PCB_TR(%rdi)
 
-2:     movq    %rsi,%cr0       /* The previous %cr0 is saved in %rsi. */
-
        movl    $1,%eax
        ret
 END(savectx)
-
-/*
- * Wrapper around fpusave to care about TS0_CR.
- */
-ENTRY(ctx_fpusave)
-       movq    %cr0,%rsi
-       clts
-       call    fpusave
-       movq    %rsi,%cr0
-       ret
-END(ctx_fpusave)

Modified: stable/9/sys/amd64/amd64/fpu.c
==============================================================================
--- stable/9/sys/amd64/amd64/fpu.c      Mon Mar 10 19:36:26 2014        
(r262980)
+++ stable/9/sys/amd64/amd64/fpu.c      Mon Mar 10 20:47:24 2014        
(r262981)
@@ -162,6 +162,17 @@ fpurestore(void *addr)
                fxrstor((char *)addr);
 }
 
+void
+fpususpend(void *addr)
+{
+       u_long cr0;
+
+       cr0 = rcr0();
+       stop_emulating();
+       fpusave(addr);
+       load_cr0(cr0);
+}
+
 /*
  * Enable XSAVE if supported and allowed by user.
  * Calculate the xsave_mask.

Modified: stable/9/sys/amd64/amd64/mp_machdep.c
==============================================================================
--- stable/9/sys/amd64/amd64/mp_machdep.c       Mon Mar 10 19:36:26 2014        
(r262980)
+++ stable/9/sys/amd64/amd64/mp_machdep.c       Mon Mar 10 20:47:24 2014        
(r262981)
@@ -1420,7 +1420,7 @@ cpususpend_handler(void)
        cpu = PCPU_GET(cpuid);
 
        if (savectx(susppcbs[cpu])) {
-               ctx_fpusave(suspfpusave[cpu]);
+               fpususpend(suspfpusave[cpu]);
                wbinvd();
                CPU_SET_ATOMIC(cpu, &stopped_cpus);
        } else {

Modified: stable/9/sys/amd64/include/fpu.h
==============================================================================
--- stable/9/sys/amd64/include/fpu.h    Mon Mar 10 19:36:26 2014        
(r262980)
+++ stable/9/sys/amd64/include/fpu.h    Mon Mar 10 20:47:24 2014        
(r262981)
@@ -146,6 +146,7 @@ int fpusetregs(struct thread *td, struct
            char *xfpustate, size_t xfpustate_size);
 int    fpusetxstate(struct thread *td, char *xfpustate,
            size_t xfpustate_size);
+void   fpususpend(void *addr);
 int    fputrap_sse(void);
 int    fputrap_x87(void);
 void   fpuuserinited(struct thread *td);

Modified: stable/9/sys/amd64/include/md_var.h
==============================================================================
--- stable/9/sys/amd64/include/md_var.h Mon Mar 10 19:36:26 2014        
(r262980)
+++ stable/9/sys/amd64/include/md_var.h Mon Mar 10 20:47:24 2014        
(r262981)
@@ -86,7 +86,6 @@ void  *alloc_fpusave(int flags);
 void   amd64_syscall(struct thread *td, int traced);
 void   busdma_swi(void);
 void   cpu_setregs(void);
-void   ctx_fpusave(void *);
 void   doreti_iret(void) __asm(__STRING(doreti_iret));
 void   doreti_iret_fault(void) __asm(__STRING(doreti_iret_fault));
 void   ld_ds(void) __asm(__STRING(ld_ds));
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to