WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [XEN] Clean up some x86 bootstrap code. R

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [XEN] Clean up some x86 bootstrap code. Replace some CPU iterators
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 22 Aug 2006 16:00:42 +0000
Delivery-date: Tue, 22 Aug 2006 09:01:11 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Node ID 80c5350a68f1f9499b08f76345882b2bcf059c2a
# Parent  f681ffc9b01a5ba97ccb81dbeb50343904e8498b
[XEN] Clean up some x86 bootstrap code. Replace some CPU iterators
with for_each_cpu() -- we want to ensure that per_cpu areas are
accessed only for cpus in cpu_possible_map.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/arch/x86/domain.c      |   11 +++++++++--
 xen/arch/x86/setup.c       |   31 ++++++++++++++++++++-----------
 xen/arch/x86/smpboot.c     |    2 --
 xen/arch/x86/x86_32/mm.c   |   10 ++++++----
 xen/arch/x86/x86_64/mm.c   |    7 ++++---
 xen/common/sched_sedf.c    |   13 +++----------
 xen/common/schedule.c      |    2 +-
 xen/common/timer.c         |    2 +-
 xen/include/asm-x86/page.h |    3 ++-
 9 files changed, 46 insertions(+), 35 deletions(-)

diff -r f681ffc9b01a -r 80c5350a68f1 xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     Mon Aug 21 12:05:11 2006 -0400
+++ b/xen/arch/x86/domain.c     Tue Aug 22 11:19:48 2006 +0100
@@ -125,8 +125,15 @@ struct vcpu *alloc_vcpu_struct(struct do
 
     v->arch.flags = TF_kernel_mode;
 
-    v->arch.schedule_tail = is_idle_domain(d) ?
-        continue_idle_domain : continue_nonidle_domain;
+    if ( is_idle_domain(d) )
+    {
+        v->arch.schedule_tail = continue_idle_domain;
+        v->arch.cr3           = __pa(idle_pg_table);
+    }
+    else
+    {
+        v->arch.schedule_tail = continue_nonidle_domain;
+    }
 
     v->arch.ctxt_switch_from = paravirt_ctxt_switch_from;
     v->arch.ctxt_switch_to   = paravirt_ctxt_switch_to;
diff -r f681ffc9b01a -r 80c5350a68f1 xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c      Mon Aug 21 12:05:11 2006 -0400
+++ b/xen/arch/x86/setup.c      Tue Aug 22 11:19:48 2006 +0100
@@ -190,10 +190,26 @@ static void percpu_free_unused_areas(voi
                        __pa(__per_cpu_end));
 }
 
+static void init_idle_domain(void)
+{
+    struct domain *idle_domain;
+
+    /* Domain creation requires that scheduler structures are initialised. */
+    scheduler_init();
+
+    idle_domain = domain_create(IDLE_DOMAIN_ID);
+    if ( (idle_domain == NULL) || (alloc_vcpu(idle_domain, 0, 0) == NULL) )
+        BUG();
+
+    set_current(idle_domain->vcpu[0]);
+    idle_vcpu[0] = this_cpu(curr_vcpu) = current;
+
+    setup_idle_pagetable();
+}
+
 void __init __start_xen(multiboot_info_t *mbi)
 {
     char __cmdline[] = "", *cmdline = __cmdline;
-    struct domain *idle_domain;
     unsigned long _initrd_start = 0, _initrd_len = 0;
     unsigned int initrdidx = 1;
     module_t *mod = (module_t *)__va(mbi->mods_addr);
@@ -212,6 +228,7 @@ void __init __start_xen(multiboot_info_t
     cmdline_parse(cmdline);
 
     set_current((struct vcpu *)0xfffff000); /* debug sanity */
+    idle_vcpu[0] = current;
     set_processor_id(0); /* needed early, for smp_processor_id() */
 
     smp_prepare_boot_cpu();
@@ -437,16 +454,6 @@ void __init __start_xen(multiboot_info_t
 
     early_cpu_init();
 
-    scheduler_init();
-
-    idle_domain = domain_create(IDLE_DOMAIN_ID);
-    if ( (idle_domain == NULL) || (alloc_vcpu(idle_domain, 0, 0) == NULL) )
-        BUG();
-
-    set_current(idle_domain->vcpu[0]);
-    this_cpu(curr_vcpu) = idle_domain->vcpu[0];
-    idle_vcpu[0] = current;
-
     paging_init();
 
     /* Unmap the first page of CPU0's stack. */
@@ -476,6 +483,8 @@ void __init __start_xen(multiboot_info_t
     init_apic_mappings();
 
     init_IRQ();
+
+    init_idle_domain();
 
     trap_init();
 
diff -r f681ffc9b01a -r 80c5350a68f1 xen/arch/x86/smpboot.c
--- a/xen/arch/x86/smpboot.c    Mon Aug 21 12:05:11 2006 -0400
+++ b/xen/arch/x86/smpboot.c    Tue Aug 22 11:19:48 2006 +0100
@@ -896,8 +896,6 @@ static int __devinit do_boot_cpu(int api
        v = alloc_idle_vcpu(cpu);
        BUG_ON(v == NULL);
 
-       v->arch.cr3 = __pa(idle_pg_table);
-
        /* start_eip had better be page-aligned! */
        start_eip = setup_trampoline();
 
diff -r f681ffc9b01a -r 80c5350a68f1 xen/arch/x86/x86_32/mm.c
--- a/xen/arch/x86/x86_32/mm.c  Mon Aug 21 12:05:11 2006 -0400
+++ b/xen/arch/x86/x86_32/mm.c  Tue Aug 22 11:19:48 2006 +0100
@@ -75,8 +75,6 @@ void __init paging_init(void)
     printk("PAE disabled.\n");
 #endif
 
-    idle_vcpu[0]->arch.cr3 = __pa(idle_pg_table);
-
     if ( cpu_has_pge )
     {
         /* Suitable Xen mapping can be GLOBAL. */
@@ -120,8 +118,12 @@ void __init paging_init(void)
         idle_pg_table_l2[l2_linear_offset(IOREMAP_VIRT_START) + i] =
             l2e_from_page(virt_to_page(ioremap_pt), __PAGE_HYPERVISOR);
     }
-
-    /* Install per-domain mappings for idle domain. */
+}
+
+void __init setup_idle_pagetable(void)
+{
+    int i;
+
     for ( i = 0; i < PDPT_L2_ENTRIES; i++ )
         idle_pg_table_l2[l2_linear_offset(PERDOMAIN_VIRT_START) + i] =
             l2e_from_page(virt_to_page(idle_vcpu[0]->domain->
diff -r f681ffc9b01a -r 80c5350a68f1 xen/arch/x86/x86_64/mm.c
--- a/xen/arch/x86/x86_64/mm.c  Mon Aug 21 12:05:11 2006 -0400
+++ b/xen/arch/x86/x86_64/mm.c  Tue Aug 22 11:19:48 2006 +0100
@@ -81,8 +81,6 @@ void __init paging_init(void)
     l2_pgentry_t *l2_ro_mpt;
     struct page_info *pg;
 
-    idle_vcpu[0]->arch.cr3 = __pa(idle_pg_table);
-
     /* Create user-accessible L2 directory to map the MPT for guests. */
     l3_ro_mpt = alloc_xenheap_page();
     clear_page(l3_ro_mpt);
@@ -121,7 +119,10 @@ void __init paging_init(void)
     /* Set up linear page table mapping. */
     idle_pg_table[l4_table_offset(LINEAR_PT_VIRT_START)] =
         l4e_from_paddr(__pa(idle_pg_table), __PAGE_HYPERVISOR);
-
+}
+
+void __init setup_idle_pagetable(void)
+{
     /* Install per-domain mappings for idle domain. */
     idle_pg_table[l4_table_offset(PERDOMAIN_VIRT_START)] =
         l4e_from_page(
diff -r f681ffc9b01a -r 80c5350a68f1 xen/common/sched_sedf.c
--- a/xen/common/sched_sedf.c   Mon Aug 21 12:05:11 2006 -0400
+++ b/xen/common/sched_sedf.c   Tue Aug 22 11:19:48 2006 +0100
@@ -1301,16 +1301,9 @@ static int sedf_adjust_weights(struct sc
 {
     struct vcpu *p;
     struct domain      *d;
-    int                 sumw[NR_CPUS];
-    s_time_t            sumt[NR_CPUS];
-    int                 cpu;
- 
-    for ( cpu = 0; cpu < NR_CPUS; cpu++ )
-    {
-        sumw[cpu] = 0;
-        sumt[cpu] = 0;
-    }
-
+    int                 sumw[NR_CPUS] = { 0 };
+    s_time_t            sumt[NR_CPUS] = { 0 };
+ 
     /* Sum across all weights. */
     for_each_domain( d )
     {
diff -r f681ffc9b01a -r 80c5350a68f1 xen/common/schedule.c
--- a/xen/common/schedule.c     Mon Aug 21 12:05:11 2006 -0400
+++ b/xen/common/schedule.c     Tue Aug 22 11:19:48 2006 +0100
@@ -633,7 +633,7 @@ void __init scheduler_init(void)
 
     open_softirq(SCHEDULE_SOFTIRQ, __enter_scheduler);
 
-    for ( i = 0; i < NR_CPUS; i++ )
+    for_each_cpu ( i )
     {
         spin_lock_init(&per_cpu(schedule_data, i).schedule_lock);
         init_timer(&per_cpu(schedule_data, i).s_timer, s_timer_fn, NULL, i);
diff -r f681ffc9b01a -r 80c5350a68f1 xen/common/timer.c
--- a/xen/common/timer.c        Mon Aug 21 12:05:11 2006 -0400
+++ b/xen/common/timer.c        Tue Aug 22 11:19:48 2006 +0100
@@ -382,7 +382,7 @@ void __init timer_init(void)
     SET_HEAP_SIZE(&dummy_heap, 0);
     SET_HEAP_LIMIT(&dummy_heap, 0);
 
-    for ( i = 0; i < NR_CPUS; i++ )
+    for_each_cpu ( i )
     {
         spin_lock_init(&per_cpu(timers, i).lock);
         per_cpu(timers, i).heap = &dummy_heap;
diff -r f681ffc9b01a -r 80c5350a68f1 xen/include/asm-x86/page.h
--- a/xen/include/asm-x86/page.h        Mon Aug 21 12:05:11 2006 -0400
+++ b/xen/include/asm-x86/page.h        Tue Aug 22 11:19:48 2006 +0100
@@ -255,7 +255,8 @@ extern root_pgentry_t idle_pg_table[ROOT
 extern root_pgentry_t idle_pg_table[ROOT_PAGETABLE_ENTRIES];
 extern l2_pgentry_t   idle_pg_table_l2[ROOT_PAGETABLE_ENTRIES];
 #endif
-extern void paging_init(void);
+void paging_init(void);
+void setup_idle_pagetable(void);
 #endif
 
 #define __pge_off()                                                     \

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [XEN] Clean up some x86 bootstrap code. Replace some CPU iterators, Xen patchbot-unstable <=