From f7107036f83abb9f2e1630b64514a0bdd1073b62 Mon Sep 17 00:00:00 2001 From: jkim Date: Tue, 23 Nov 2010 16:12:35 +0000 Subject: Reinitialize PAT MSR via pmap_init_pat() while resuming. This function does better job since r215703 and it is safer now. --- sys/amd64/acpica/acpi_switch.S | 6 ------ sys/amd64/acpica/acpi_wakecode.S | 2 -- sys/amd64/acpica/acpi_wakeup.c | 2 +- sys/amd64/amd64/mp_machdep.c | 1 + 4 files changed, 2 insertions(+), 9 deletions(-) (limited to 'sys/amd64') diff --git a/sys/amd64/acpica/acpi_switch.S b/sys/amd64/acpica/acpi_switch.S index fbe4097..45bad1f 100644 --- a/sys/amd64/acpica/acpi_switch.S +++ b/sys/amd64/acpica/acpi_switch.S @@ -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 diff --git a/sys/amd64/acpica/acpi_wakecode.S b/sys/amd64/acpica/acpi_wakecode.S index e131c97..49d14f5 100644 --- a/sys/amd64/acpica/acpi_wakecode.S +++ b/sys/amd64/acpica/acpi_wakecode.S @@ -274,8 +274,6 @@ wakeup_gdt: ALIGN_DATA wakeup_efer: .quad 0 -wakeup_pat: - .quad 0 wakeup_star: .quad 0 wakeup_lstar: diff --git a/sys/amd64/acpica/acpi_wakeup.c b/sys/amd64/acpica/acpi_wakeup.c index c25d802..57341c9 100644 --- a/sys/amd64/acpica/acpi_wakeup.c +++ b/sys/amd64/acpica/acpi_wakeup.c @@ -278,6 +278,7 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state) 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_softc *sc) 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)); diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c index 07380ff..2e85d5f 100644 --- a/sys/amd64/amd64/mp_machdep.c +++ b/sys/amd64/amd64/mp_machdep.c @@ -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); } -- cgit v1.1