Author: jkim
Date: Tue Nov 23 16:12:35 2010
New Revision: 215753
URL: http://svn.freebsd.org/changeset/base/215753

Log:
  Reinitialize PAT MSR via pmap_init_pat() while resuming.  This function does
  better job since r215703 and it is safer now.

Modified:
  head/sys/amd64/acpica/acpi_switch.S
  head/sys/amd64/acpica/acpi_wakecode.S
  head/sys/amd64/acpica/acpi_wakeup.c
  head/sys/amd64/amd64/mp_machdep.c

Modified: head/sys/amd64/acpica/acpi_switch.S
==============================================================================
--- head/sys/amd64/acpica/acpi_switch.S Tue Nov 23 15:08:56 2010        
(r215752)
+++ head/sys/amd64/acpica/acpi_switch.S Tue Nov 23 16:12:35 2010        
(r215753)
@@ -76,12 +76,6 @@ ENTRY(acpi_restorecpu)
        movl    WAKEUP_CTX(efer), %eax
        wrmsr
 
-       /* Restore PAT. */
-       movl    $MSR_PAT, %ecx
-       movl    WAKEUP_CTX(pat), %eax
-       movl    4 + WAKEUP_CTX(pat), %edx
-       wrmsr
-
        /* Restore fast syscall stuff. */
        movl    $MSR_STAR, %ecx
        movl    WAKEUP_CTX(star), %eax

Modified: head/sys/amd64/acpica/acpi_wakecode.S
==============================================================================
--- head/sys/amd64/acpica/acpi_wakecode.S       Tue Nov 23 15:08:56 2010        
(r215752)
+++ head/sys/amd64/acpica/acpi_wakecode.S       Tue Nov 23 16:12:35 2010        
(r215753)
@@ -274,8 +274,6 @@ wakeup_gdt:
        ALIGN_DATA
 wakeup_efer:
        .quad   0
-wakeup_pat:
-       .quad   0
 wakeup_star:
        .quad   0
 wakeup_lstar:

Modified: head/sys/amd64/acpica/acpi_wakeup.c
==============================================================================
--- head/sys/amd64/acpica/acpi_wakeup.c Tue Nov 23 15:08:56 2010        
(r215752)
+++ head/sys/amd64/acpica/acpi_wakeup.c Tue Nov 23 16:12:35 2010        
(r215753)
@@ -278,6 +278,7 @@ acpi_sleep_machdep(struct acpi_softc *sc
                for (;;)
                        ia32_pause();
        } else {
+               pmap_init_pat();
                PCPU_SET(switchtime, 0);
                PCPU_SET(switchticks, ticks);
 #ifdef SMP
@@ -372,7 +373,6 @@ acpi_install_wakeup_handler(struct acpi_
        WAKECODE_FIXUP(wakeup_ctx, vm_offset_t,
            WAKECODE_VADDR(sc) + wakeup_ctx);
        WAKECODE_FIXUP(wakeup_efer, uint64_t, rdmsr(MSR_EFER));
-       WAKECODE_FIXUP(wakeup_pat, uint64_t, rdmsr(MSR_PAT));
        WAKECODE_FIXUP(wakeup_star, uint64_t, rdmsr(MSR_STAR));
        WAKECODE_FIXUP(wakeup_lstar, uint64_t, rdmsr(MSR_LSTAR));
        WAKECODE_FIXUP(wakeup_cstar, uint64_t, rdmsr(MSR_CSTAR));

Modified: head/sys/amd64/amd64/mp_machdep.c
==============================================================================
--- head/sys/amd64/amd64/mp_machdep.c   Tue Nov 23 15:08:56 2010        
(r215752)
+++ head/sys/amd64/amd64/mp_machdep.c   Tue Nov 23 16:12:35 2010        
(r215753)
@@ -1410,6 +1410,7 @@ cpususpend_handler(void)
                wbinvd();
                atomic_set_int(&stopped_cpus, cpumask);
        } else {
+               pmap_init_pat();
                PCPU_SET(switchtime, 0);
                PCPU_SET(switchticks, ticks);
        }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to