Commit:     3ebad5905609476a4ff1151a66b21d9794009961
Parent:     2b1f6278d77c1f2f669346fc2bb48012b5e9495a
Author:     Bernhard Kaindl <[EMAIL PROTECTED]>
AuthorDate: Wed May 2 19:27:17 2007 +0200
Committer:  Andi Kleen <[EMAIL PROTECTED]>
CommitDate: Wed May 2 19:27:17 2007 +0200

    [PATCH] x86: Save and restore the fixed-range MTRRs of the BSP when 
    Note: This patch didn'nt need an update since it's initial post.
    Some BIOSes may modify fixed-range MTRRs in SMM, e.g. when they
    transition the system into ACPI mode, which is entered thru an SMI,
    triggered by Linux in acpi_enable().
    SMIs which cause that Linux is interrupted and BIOS code is
    executed (which may change e.g. fixed-range MTRRs) in SMM may
    be raised by an embedded system controller which is often found
    in notebooks also at other occasions.
    If we would not update our copy of the fixed-range MTRRs before
    suspending to RAM or to disk, restore_processor_state() would
    set the fixed-range MTRRs of the BSP using old backup values
    which may be outdated and this could cause the system to fail
    later during resume.
    This patch ensures that our copy of the fixed-range MTRRs
    is updated when saving the boot processor state on suspend
    to disk and suspend to RAM.
    In combination with other patches this allows to fix s2ram
    and s2disk on the Acer Ferrari 1000 notebook and at least
    s2disk on the Acer Ferrari 5000 notebook.
    Signed-off-by: Bernhard Kaindl <[EMAIL PROTECTED]>
    Signed-off-by: Andi Kleen <[EMAIL PROTECTED]>
    Cc: Andrew Morton <[EMAIL PROTECTED]>
    Cc: Andi Kleen <[EMAIL PROTECTED]>
    Cc: Dave Jones <[EMAIL PROTECTED]>
 arch/i386/power/cpu.c        |    1 +
 arch/x86_64/kernel/suspend.c |    2 ++
 2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/arch/i386/power/cpu.c b/arch/i386/power/cpu.c
index 2c15500..998fd3e 100644
--- a/arch/i386/power/cpu.c
+++ b/arch/i386/power/cpu.c
@@ -21,6 +21,7 @@ unsigned long saved_context_eflags;
 void __save_processor_state(struct saved_context *ctxt)
+       mtrr_save_fixed_ranges(NULL);
diff --git a/arch/x86_64/kernel/suspend.c b/arch/x86_64/kernel/suspend.c
index 4ca523d..6a5a98f 100644
--- a/arch/x86_64/kernel/suspend.c
+++ b/arch/x86_64/kernel/suspend.c
@@ -12,6 +12,7 @@
 #include <asm/proto.h>
 #include <asm/page.h>
 #include <asm/pgtable.h>
+#include <asm/mtrr.h>
 /* References to section boundaries */
 extern const void __nosave_begin, __nosave_end;
@@ -48,6 +49,7 @@ void __save_processor_state(struct saved_context *ctxt)
        rdmsrl(MSR_FS_BASE, ctxt->fs_base);
        rdmsrl(MSR_GS_BASE, ctxt->gs_base);
        rdmsrl(MSR_KERNEL_GS_BASE, ctxt->gs_kernel_base);
+       mtrr_save_fixed_ranges(NULL);
         * control registers 
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to