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

[Xen-devel] [PATCH RFC 29/44] x86/smp: Allocate percpu resources for the GDT and LDT



Like the mapcache region, we need an L1e which is modifiable in the context
switch code.

The Xen-reserved GDT frames are proactively mapped for the benefit of future
changes to the AP boot path.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
 xen/arch/x86/smpboot.c       | 21 +++++++++++++++++++++
 xen/include/asm-x86/config.h |  4 ++++
 2 files changed, 25 insertions(+)

diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c
index a5d3f7a..cc80f24 100644
--- a/xen/arch/x86/smpboot.c
+++ b/xen/arch/x86/smpboot.c
@@ -822,6 +822,27 @@ static int cpu_smpboot_alloc_common(unsigned int cpu)
     if ( rc )
         goto out;
 
+    /* Allocate space for the GDT/LDT L1e's... */
+    rc = percpu_alloc_l1t(cpu, PERCPU_GDT_MAPPING, &pg);
+    if ( rc )
+        goto out;
+
+    /* ... and map the L1t so it can be used... */
+    rc = percpu_map_frame(cpu, PERCPU_GDT_LDT_L1ES, pg, PAGE_HYPERVISOR_RW);
+    if ( rc )
+        goto out;
+
+    /* ... and map Xen-reserved GDT frames. */
+    rc = percpu_map_frame(cpu, PERCPU_GDT_MAPPING + FIRST_RESERVED_GDT_BYTE,
+                          virt_to_page(per_cpu(gdt_table, cpu)),
+                          PAGE_HYPERVISOR_RW);
+    if ( rc )
+        goto out;
+    rc = percpu_map_frame(cpu, PERCPU_GDT_MAPPING + FIRST_RESERVED_GDT_BYTE + 
PAGE_SIZE,
+                          virt_to_page(zero_page), __PAGE_HYPERVISOR_RO);
+    if ( rc )
+        goto out;
+
     rc = 0; /* Success */
 
  out:
diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h
index c7503ad..dfe1f03 100644
--- a/xen/include/asm-x86/config.h
+++ b/xen/include/asm-x86/config.h
@@ -302,6 +302,10 @@ extern unsigned long xen_phys_start;
 
 #define PERCPU_XLAT_START        (PERCPU_LINEAR_START + MB(6) + KB(8))
 
+#define PERCPU_GDT_LDT_L1ES      (PERCPU_LINEAR_START + MB(8) + KB(12))
+#define PERCPU_GDT_MAPPING       (PERCPU_LINEAR_START + MB(10))
+#define PERCPU_LDT_MAPPING       (PERCPU_LINEAR_START + MB(11))
+
 /* GDT/LDT shadow mapping area. The first per-domain-mapping sub-area. */
 #define GDT_LDT_VCPU_SHIFT       5
 #define GDT_LDT_VCPU_VA_SHIFT    (GDT_LDT_VCPU_SHIFT + PAGE_SHIFT)
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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