[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] arm: new hook for late MMU setup on secondary CPUs



# HG changeset patch
# User Tim Deegan <tim@xxxxxxx>
# Date 1331651458 0
# Node ID 4e448a7d4c0e9e5a034539a4590751aa4c28902a
# Parent  1e5da26611f36b90c70b3827edc33caa26bd7942
arm: new hook for late MMU setup on secondary CPUs

The boot CPU turns on W^X in setup_pagetables().  Do the same for other
CPUs after they boot.  If we go to per-CPU pagetables, this is where
that will happen.

Signed-off-by: Tim Deegan <tim@xxxxxxx>
Committed-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---


diff -r 1e5da26611f3 -r 4e448a7d4c0e xen/arch/arm/mm.c
--- a/xen/arch/arm/mm.c Tue Mar 13 15:10:57 2012 +0000
+++ b/xen/arch/arm/mm.c Tue Mar 13 15:10:58 2012 +0000
@@ -263,6 +263,13 @@
     WRITE_CP32(READ_CP32(HSCTLR) | SCTLR_WXN, HSCTLR);
 }
 
+/* MMU setup for secondary CPUS (which already have paging enabled) */
+void __cpuinit mmu_init_secondary_cpu(void)
+{
+    /* From now on, no mapping may be both writable and executable. */
+    WRITE_CP32(READ_CP32(HSCTLR) | SCTLR_WXN, HSCTLR);
+}
+
 /* Create Xen's mappings of memory.
  * Base and virt must be 32MB aligned and size a multiple of 32MB. */
 static void __init create_mappings(unsigned long virt,
diff -r 1e5da26611f3 -r 4e448a7d4c0e xen/arch/arm/smpboot.c
--- a/xen/arch/arm/smpboot.c    Tue Mar 13 15:10:57 2012 +0000
+++ b/xen/arch/arm/smpboot.c    Tue Mar 13 15:10:58 2012 +0000
@@ -76,6 +76,7 @@
 
     dprintk(XENLOG_DEBUG, "CPU %li awake.\n", cpuid);
 
+    mmu_init_secondary_cpu();
     gic_init_secondary_cpu();
 
     set_current(idle_vcpu[cpuid]);
diff -r 1e5da26611f3 -r 4e448a7d4c0e xen/include/asm-arm/mm.h
--- a/xen/include/asm-arm/mm.h  Tue Mar 13 15:10:57 2012 +0000
+++ b/xen/include/asm-arm/mm.h  Tue Mar 13 15:10:58 2012 +0000
@@ -136,6 +136,8 @@
 
 /* Boot-time pagetable setup */
 extern void setup_pagetables(unsigned long boot_phys_offset);
+/* MMU setup for seccondary CPUS (which already have paging enabled) */
+extern void __cpuinit mmu_init_secondary_cpu(void);
 /* Set up the xenheap: up to 1GB of contiguous, always-mapped memory.
  * Base must be 32MB aligned and size a multiple of 32MB. */
 extern void setup_xenheap_mappings(unsigned long base_mfn, unsigned long 
nr_mfns);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.