]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/xen.git/commitdiff
x86 vtd: Do not exclude freed percpu areas from dom0 vtd tables.
authorKeir Fraser <keir.fraser@citrix.com>
Sat, 25 Apr 2009 07:19:14 +0000 (08:19 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Sat, 25 Apr 2009 07:19:14 +0000 (08:19 +0100)
Signed-off-by: Qing He <qing.he@intel.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen/arch/x86/setup.c
xen/arch/x86/tboot.c

index 600de2a9f6135cee1568a9a06bc7237bb64228d5..d87d0827aacf93e179add8ed751ee2a13227b418 100644 (file)
@@ -1124,8 +1124,7 @@ int xen_in_range(paddr_t start, paddr_t end)
     /* initialize first time */
     if ( !xen_regions[0].s )
     {
-        extern char __init_begin[], __per_cpu_start[], __per_cpu_end[],
-                    __bss_start[];
+        extern char __init_begin[], __bss_start[];
         extern unsigned long allocator_bitmap_end;
 
         /* S3 resume code (and other real mode trampoline code) */
@@ -1136,7 +1135,8 @@ int xen_in_range(paddr_t start, paddr_t end)
         xen_regions[1].e = __pa(&__init_begin);
         /* per-cpu data */
         xen_regions[2].s = __pa(&__per_cpu_start);
-        xen_regions[2].e = __pa(&__per_cpu_end);
+        xen_regions[2].e = xen_regions[2].s +
+            (((paddr_t)last_cpu(cpu_possible_map) + 1) << PERCPU_SHIFT);
         /* bss + boot allocator bitmap */
         xen_regions[3].s = __pa(&__bss_start);
         xen_regions[3].e = allocator_bitmap_end;
index e259cd5da1ecea538480fc5fde0fe094762e8c80..54075c21c5b1b0e49e7f9d05c63729801ba390d6 100644 (file)
@@ -46,7 +46,7 @@ static uint64_t sinit_base, sinit_size;
 #define TXTCR_HEAP_BASE             0x0300
 #define TXTCR_HEAP_SIZE             0x0308
 
-extern char __init_begin[], __per_cpu_start[], __per_cpu_end[], __bss_start[];
+extern char __init_begin[], __per_cpu_start[], __bss_start[];
 extern unsigned long allocator_bitmap_end;
 
 #define SHA1_SIZE      20
@@ -310,8 +310,9 @@ void tboot_shutdown(uint32_t shutdown_type)
                                               __pa(&_stext);
         /* per-cpu data */
         g_tboot_shared->mac_regions[2].start = (uint64_t)__pa(&__per_cpu_start);
-        g_tboot_shared->mac_regions[2].size = __pa(&__per_cpu_end) -
-                                              __pa(&__per_cpu_start);
+        g_tboot_shared->mac_regions[2].size =
+            g_tboot_shared->mac_regions[2].start +
+            (((uint64_t)last_cpu(cpu_possible_map) + 1) << PERCPU_SHIFT);
         /* bss */
         g_tboot_shared->mac_regions[3].start = (uint64_t)__pa(&__bss_start);
         g_tboot_shared->mac_regions[3].size = __pa(&_end) - __pa(&__bss_start);