[PATCH] x86, nx: Mark the ACPI resume trampoline code as +x

From: H . Peter Anvin
Date: Sun Feb 06 2011 - 22:58:38 EST


We reserve lowmem for the things that need it, like the ACPI wakeup
code, way early to guarantee availability. This happens before we set
up the proper pagetables, so set_memory_x() has no effect.

Until we have a better solution, use an initcall to mark the wakeup
code executable.

Originally-by: Matthieu Castet <castet.matthieu@xxxxxxx>
Signed-off-by: H. Peter Anvin <hpa@xxxxxxxxx>
LKML-Reference: <1296924395.4d4d7eeb6f1fe@xxxxxxxxxxx>
---
arch/x86/kernel/acpi/sleep.c | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
index 4d9ebba..68d1537 100644
--- a/arch/x86/kernel/acpi/sleep.c
+++ b/arch/x86/kernel/acpi/sleep.c
@@ -12,10 +12,8 @@
#include <linux/cpumask.h>
#include <asm/segment.h>
#include <asm/desc.h>
-
-#ifdef CONFIG_X86_32
#include <asm/pgtable.h>
-#endif
+#include <asm/cacheflush.h>

#include "realmode/wakeup.h"
#include "sleep.h"
@@ -149,6 +147,15 @@ void __init acpi_reserve_wakeup_memory(void)
memblock_x86_reserve_range(mem, mem + WAKEUP_SIZE, "ACPI WAKEUP");
}

+int __init acpi_configure_wakeup_memory(void)
+{
+ if (acpi_realmode)
+ set_memory_x(acpi_realmode, WAKEUP_SIZE >> PAGE_SHIFT);
+
+ return 0;
+}
+arch_initcall(acpi_configure_wakeup_memory);
+

static int __init acpi_sleep_setup(char *str)
{
--
1.7.4


--------------080104010609080307090205--
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/