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] [IA64] FPH enabling + cleanup

# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID ced37bea064709d2290c3f22a9f43e53c1d47b70
# Parent  d23c088eac6dcc79c8319775bfe51c3e12103702
[IA64] FPH enabling + cleanup

Move contents of switch_to macro from xensystem.h to context_switch function.
Initialize FPU on all processors.  FPH is always enabled in Xen.
Speed up context-switch (a little bit!) by not enabling/disabling FPH.
Cleanup (unused function/variablesi/fields, debug printf...)
vmx_ia64_switch_to removed (was unused).

Signed-off-by: Tristan Gingold <tristan.gingold@xxxxxxxx>

diff -r d23c088eac6d -r ced37bea0647 xen/arch/ia64/linux-xen/setup.c
--- a/xen/arch/ia64/linux-xen/setup.c   Tue Apr 25 22:32:14 2006 -0600
+++ b/xen/arch/ia64/linux-xen/setup.c   Tue Apr 25 22:35:41 2006 -0600
@@ -384,7 +384,9 @@ setup_arch (char **cmdline_p)
 {
        unw_init();
 
+#ifndef XEN
        ia64_patch_vtop((u64) __start___vtop_patchlist, (u64) 
__end___vtop_patchlist);
+#endif
 
        *cmdline_p = __va(ia64_boot_param->command_line);
 #ifndef XEN
@@ -870,6 +872,11 @@ cpu_init (void)
 #endif
                BUG();
 
+#ifdef XEN
+       ia64_fph_enable();
+       __ia64_init_fpu();
+#endif
+
        ia64_mmu_init(ia64_imva(cpu_data));
        ia64_mca_cpu_init(ia64_imva(cpu_data));
 
@@ -931,9 +938,11 @@ cpu_init (void)
 #endif
 }
 
+#ifndef XEN
 void
 check_bugs (void)
 {
        ia64_patch_mckinley_e9((unsigned long) __start___mckinley_e9_bundles,
                               (unsigned long) __end___mckinley_e9_bundles);
 }
+#endif
diff -r d23c088eac6d -r ced37bea0647 xen/arch/ia64/vmx/vmx_entry.S
--- a/xen/arch/ia64/vmx/vmx_entry.S     Tue Apr 25 22:32:14 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_entry.S     Tue Apr 25 22:35:41 2006 -0600
@@ -36,48 +36,6 @@
 #include <asm/vhpt.h>
 #include <asm/vmmu.h>
 #include "vmx_minstate.h"
-
-/*
- * prev_task <- vmx_ia64_switch_to(struct task_struct *next)
- *     With Ingo's new scheduler, interrupts are disabled when this routine 
gets
- *     called.  The code starting at .map relies on this.  The rest of the code
- *     doesn't care about the interrupt masking status.
- *
- * Since we allocate domain stack in xenheap, there's no need to map new
- * domain's stack since all xenheap is mapped by TR. Another different task
- * for vmx_ia64_switch_to is to switch to bank0 and change current pointer.
- */
-GLOBAL_ENTRY(vmx_ia64_switch_to)
-       .prologue
-       alloc r16=ar.pfs,1,0,0,0
-       DO_SAVE_SWITCH_STACK
-       .body
-
-       bsw.0   // Switch to bank0, because bank0 r21 is current pointer
-       ;;
-       adds r22=IA64_TASK_THREAD_KSP_OFFSET,r13
-       movl r25=init_task
-       adds r26=IA64_TASK_THREAD_KSP_OFFSET,in0
-       ;;
-       st8 [r22]=sp                    // save kernel stack pointer of old task
-       ;;
-       /*
-        * TR always mapped this task's page, we can skip doing it again.
-        */
-       ld8 sp=[r26]                    // load kernel stack pointer of new task
-       mov r21=in0                     // update "current" application register
-       mov r8=r13                      // return pointer to previously running 
task
-       mov r13=in0                     // set "current" pointer
-       ;;
-       bsw.1
-       ;;
-       DO_LOAD_SWITCH_STACK
-
-#ifdef CONFIG_SMP
-       sync.i                          // ensure "fc"s done by this CPU are 
visible on other CPUs
-#endif
-       br.ret.sptk.many rp             // boogie on out in new context
-END(vmx_ia64_switch_to)
 
 GLOBAL_ENTRY(ia64_leave_nested)
        rsm psr.i
diff -r d23c088eac6d -r ced37bea0647 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Tue Apr 25 22:32:14 2006 -0600
+++ b/xen/arch/ia64/xen/domain.c        Tue Apr 25 22:35:41 2006 -0600
@@ -72,11 +72,8 @@ extern unsigned long running_on_sim;
 #define IS_XEN_ADDRESS(d,a) ((a >= d->xen_vastart) && (a <= d->xen_vaend))
 
 /* FIXME: where these declarations should be there ? */
-extern void domain_pend_keyboard_interrupt(int);
 extern long platform_is_hp_ski(void);
-extern void sync_split_caches(void);
 extern void serial_input_init(void);
-
 static void init_switch_stack(struct vcpu *v);
 void build_physmap_table(struct domain *d);
 
@@ -145,23 +142,6 @@ void startup_cpu_idle_loop(void)
        /* Just some sanity to ensure that the scheduler is set up okay. */
        ASSERT(current->domain == IDLE_DOMAIN_ID);
        raise_softirq(SCHEDULE_SOFTIRQ);
-#if 0
-//do we have to ensure the idle task has a shared page so that, for example,
-//region registers can be loaded from it.  Apparently not...
-       idle0_task.shared_info = (void *)alloc_xenheap_page();
-       memset(idle0_task.shared_info, 0, PAGE_SIZE);
-       /* pin mapping */
-       // FIXME: Does this belong here?  Or do only at domain switch time?
-       {
-               /* WARNING: following must be inlined to avoid nested fault */
-               unsigned long psr = ia64_clear_ic();
-               ia64_itr(0x2, IA64_TR_SHARED_INFO, SHAREDINFO_ADDR,
-                pte_val(pfn_pte(ia64_tpa(idle0_task.shared_info) >> 
PAGE_SHIFT, PAGE_KERNEL)),
-                PAGE_SHIFT);
-               ia64_set_psr(psr);
-               ia64_srlz_i();
-       }
-#endif
 
        continue_cpu_idle_loop();
 }
@@ -304,7 +284,6 @@ void arch_getdomaininfo_ctxt(struct vcpu
 {
        struct pt_regs *regs = vcpu_regs (v);
 
-       printf("arch_getdomaininfo_ctxt\n");
        c->regs = *regs;
        c->vcpu.evtchn_vector = v->vcpu_info->arch.evtchn_vector;
 
@@ -316,7 +295,6 @@ int arch_set_info_guest(struct vcpu *v, 
        struct pt_regs *regs = vcpu_regs (v);
        struct domain *d = v->domain;
 
-       printf("arch_set_info_guest\n");
        if ( test_bit(_VCPUF_initialised, &v->vcpu_flags) )
             return 0;
        if (c->flags & VGCF_VMX_GUEST) {
@@ -1237,9 +1215,8 @@ void alloc_dom0(void)
        dom0_start = alloc_boot_pages(dom0_size >> PAGE_SHIFT, dom0_align >> 
PAGE_SHIFT);
        dom0_start <<= PAGE_SHIFT;
        if (!dom0_start) {
-       printf("alloc_dom0: can't allocate contiguous memory size=%lu\n",
+         panic("alloc_dom0: can't allocate contiguous memory size=%lu\n",
                dom0_size);
-       while(1);
        }
        printf("alloc_dom0: dom0_start=0x%lx\n", dom0_start);
 #else
@@ -1495,17 +1472,6 @@ void dummy_called(char *function)
        while(1);
 }
 
-
-#if 0
-void switch_to(struct vcpu *prev, struct vcpu *next)
-{
-       struct vcpu *last;
-
-       __switch_to(prev,next,last);
-       //set_current(next);
-}
-#endif
-
 void domain_pend_keyboard_interrupt(int irq)
 {
        vcpu_pend_interrupt(dom0->vcpu[0],irq);
@@ -1513,13 +1479,9 @@ void domain_pend_keyboard_interrupt(int 
 
 void sync_vcpu_execstate(struct vcpu *v)
 {
-       ia64_save_fpu(v->arch._thread.fph);
+       __ia64_save_fpu(v->arch._thread.fph);
        if (VMX_DOMAIN(v))
                vmx_save_state(v);
-       else {
-               if (IA64_HAS_EXTRA_STATE(v))
-                       ia64_save_extra(v);
-       }
        // FIXME SMP: Anything else needed here for SMP?
 }
 
diff -r d23c088eac6d -r ced37bea0647 xen/arch/ia64/xen/process.c
--- a/xen/arch/ia64/xen/process.c       Tue Apr 25 22:32:14 2006 -0600
+++ b/xen/arch/ia64/xen/process.c       Tue Apr 25 22:35:41 2006 -0600
@@ -219,9 +219,6 @@ void reflect_interruption(unsigned long 
 
        regs->cr_iip = ((unsigned long) PSCBX(v,iva) + vector) & ~0xffUL;
        regs->cr_ipsr = (regs->cr_ipsr & ~DELIVER_PSR_CLR) | DELIVER_PSR_SET;
-#ifdef CONFIG_SMP
-#warning "SMP FIXME: sharedinfo doesn't handle smp yet, need page per vcpu"
-#endif
        regs->r31 = XSI_IPSR;
 
        v->vcpu_info->evtchn_upcall_mask = 1;
diff -r d23c088eac6d -r ced37bea0647 xen/arch/ia64/xen/xenmisc.c
--- a/xen/arch/ia64/xen/xenmisc.c       Tue Apr 25 22:32:14 2006 -0600
+++ b/xen/arch/ia64/xen/xenmisc.c       Tue Apr 25 22:35:41 2006 -0600
@@ -1,6 +1,6 @@
 /*
  * Xen misc
- * 
+ *
  * Functions/decls that are/may be needed to link with Xen because
  * of x86 dependencies
  *
@@ -21,11 +21,8 @@
 #include <asm/debugger.h>
 #include <asm/vmx.h>
 #include <asm/vmx_vcpu.h>
-
-efi_memory_desc_t ia64_efi_io_md;
-EXPORT_SYMBOL(ia64_efi_io_md);
-unsigned long wait_init_idle;
-int phys_proc_id[NR_CPUS];
+#include <asm/vcpu.h>
+
 unsigned long loops_per_jiffy = (1<<12);       // from linux/init/main.c
 
 /* FIXME: where these declarations should be there ? */
@@ -33,8 +30,6 @@ extern void show_registers(struct pt_reg
 
 void ia64_mca_init(void) { printf("ia64_mca_init() skipped (Machine check 
abort handling)\n"); }
 void ia64_mca_cpu_init(void *x) { }
-void ia64_patch_mckinley_e9(unsigned long a, unsigned long b) { }
-void ia64_patch_vtop(unsigned long a, unsigned long b) { }
 void hpsim_setup(char **x)
 {
 #ifdef CONFIG_SMP
@@ -68,21 +63,8 @@ platform_is_hp_ski(void)
        return running_on_sim;
 }
 
-/* calls in xen/common code that are unused on ia64 */
-
-void sync_lazy_execstate_cpu(unsigned int cpu) {}
-
-#if 0
-int grant_table_create(struct domain *d) { return 0; }
-void grant_table_destroy(struct domain *d) { return; }
-#endif
 
 struct pt_regs *guest_cpu_user_regs(void) { return vcpu_regs(current); }
-
-void raise_actimer_softirq(void)
-{
-       raise_softirq(TIMER_SOFTIRQ);
-}
 
 unsigned long
 gmfn_to_mfn_foreign(struct domain *d, unsigned long gpfn)
@@ -127,15 +109,12 @@ u32 tlbflush_time[NR_CPUS];
 ///////////////////////////////
 
 
-void free_page_type(struct page_info *page, u32 type)
-{
-//     dummy();
-       return;
-}
-
-int alloc_page_type(struct page_info *page, u32 type)
-{
-//     dummy();
+static void free_page_type(struct page_info *page, u32 type)
+{
+}
+
+static int alloc_page_type(struct page_info *page, u32 type)
+{
        return 1;
 }
 
@@ -161,7 +140,7 @@ void *pgtable_quicklist_alloc(void)
 {
     void *p;
     p = alloc_xenheap_pages(0);
-    if (p) 
+    if (p)
         clear_page(p);
     return p;
 }
@@ -276,12 +255,10 @@ void *__module_text_address(unsigned lon
 void *__module_text_address(unsigned long addr) { return NULL; }
 void *module_text_address(unsigned long addr) { return NULL; }
 
-void cs10foo(void) {}
-void cs01foo(void) {}
-
 unsigned long context_switch_count = 0;
 
-#include <asm/vcpu.h>
+extern struct vcpu *ia64_switch_to (struct vcpu *next_task);
+
 
 void context_switch(struct vcpu *prev, struct vcpu *next)
 {
@@ -289,14 +266,20 @@ void context_switch(struct vcpu *prev, s
     uint64_t pta;
 
     local_irq_save(spsr);
-//    if(VMX_DOMAIN(prev)){
-//     vtm_domain_out(prev);
-//    }
-       context_switch_count++;
-       switch_to(prev,next,prev);
-//    if(VMX_DOMAIN(current)){
-//        vtm_domain_in(current);
-//    }
+    context_switch_count++;
+
+    __ia64_save_fpu(prev->arch._thread.fph);
+    __ia64_load_fpu(next->arch._thread.fph);
+    if (VMX_DOMAIN(prev))
+           vmx_save_state(prev);
+    if (VMX_DOMAIN(next))
+           vmx_load_state(next);
+    /*ia64_psr(ia64_task_regs(next))->dfh = !ia64_is_local_fpu_owner(next);*/
+    prev = ia64_switch_to(next);
+    if (!VMX_DOMAIN(current)){
+           vcpu_set_next_timer(current);
+    }
+
 
 // leave this debug for now: it acts as a heartbeat when more than
 // one domain is active
@@ -309,28 +292,26 @@ if (!i--) { printk("+"); i = 1000000; }
 }
 
     if (VMX_DOMAIN(current)){
-//        vtm_domain_in(current);
                vmx_load_all_rr(current);
     }else{
        extern char ia64_ivt;
        ia64_set_iva(&ia64_ivt);
        if (!is_idle_domain(current->domain)) {
                ia64_set_pta(VHPT_ADDR | (1 << 8) | (VHPT_SIZE_LOG2 << 2) |
-                       VHPT_ENABLED);
+                            VHPT_ENABLED);
                load_region_regs(current);
                vcpu_load_kernel_regs(current);
-                   if (vcpu_timer_expired(current))
-                vcpu_pend_timer(current);
+               if (vcpu_timer_expired(current))
+                       vcpu_pend_timer(current);
        }else {
-        /* When switching to idle domain, only need to disable vhpt
-        * walker. Then all accesses happen within idle context will
-        * be handled by TR mapping and identity mapping.
-        */
-           pta = ia64_get_pta();
-           ia64_set_pta(pta & ~VHPT_ENABLED);
+               /* When switching to idle domain, only need to disable vhpt
+                * walker. Then all accesses happen within idle context will
+                * be handled by TR mapping and identity mapping.
+                */
+               pta = ia64_get_pta();
+               ia64_set_pta(pta & ~VHPT_ENABLED);
         }
     }
-
     local_irq_restore(spsr);
     context_saved(prev);
 }
@@ -349,9 +330,9 @@ void panic_domain(struct pt_regs *regs, 
        va_list args;
        char buf[128];
        struct vcpu *v = current;
-    
+
        printf("$$$$$ PANIC in domain %d (k6=0x%lx): ",
-               v->domain->domain_id, 
+               v->domain->domain_id,
                __get_cpu_var(cpu_kr)._kr[IA64_KR_CURRENT]);
        va_start(args, fmt);
        (void)vsnprintf(buf, sizeof(buf), fmt, args);
@@ -395,19 +376,19 @@ void put_page_type(struct page_info *pag
         ASSERT((x & PGT_count_mask) != 0);
 
         /*
-         * The page should always be validated while a reference is held. The 
-         * exception is during domain destruction, when we forcibly invalidate 
+         * The page should always be validated while a reference is held. The
+         * exception is during domain destruction, when we forcibly invalidate
          * page-table pages if we detect a referential loop.
          * See domain.c:relinquish_list().
          */
-        ASSERT((x & PGT_validated) || 
+        ASSERT((x & PGT_validated) ||
                test_bit(_DOMF_dying, &page_get_owner(page)->domain_flags));
 
         if ( unlikely((nx & PGT_count_mask) == 0) )
         {
             /* Record TLB information for flush later. Races are harmless. */
             page->tlbflush_timestamp = tlbflush_current_time();
-            
+
             if ( unlikely((nx & PGT_type_mask) <= PGT_l4_page_table) &&
                  likely(nx & PGT_validated) )
             {
@@ -416,7 +397,7 @@ void put_page_type(struct page_info *pag
                  * 'free' is safe because the refcnt is non-zero and validated
                  * bit is clear => other ops will spin or fail.
                  */
-                if ( unlikely((y = cmpxchg(&page->u.inuse.type_info, x, 
+                if ( unlikely((y = cmpxchg(&page->u.inuse.type_info, x,
                                            x & ~PGT_validated)) != x) )
                     goto again;
                 /* We cleared the 'valid bit' so we do the clean up. */
@@ -426,7 +407,7 @@ void put_page_type(struct page_info *pag
                 nx &= ~PGT_validated;
             }
         }
-        else if ( unlikely(((nx & (PGT_pinned | PGT_count_mask)) == 
+        else if ( unlikely(((nx & (PGT_pinned | PGT_count_mask)) ==
                             (PGT_pinned | 1)) &&
                            ((nx & PGT_type_mask) != PGT_writable_page)) )
         {
diff -r d23c088eac6d -r ced37bea0647 xen/arch/ia64/xen/xensetup.c
--- a/xen/arch/ia64/xen/xensetup.c      Tue Apr 25 22:32:14 2006 -0600
+++ b/xen/arch/ia64/xen/xensetup.c      Tue Apr 25 22:35:41 2006 -0600
@@ -319,9 +319,6 @@ void start_kernel(void)
 
     init_frametable();
 
-    ia64_fph_enable();
-    __ia64_init_fpu();
-
     alloc_dom0();
 
     end_boot_allocator();
diff -r d23c088eac6d -r ced37bea0647 xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h     Tue Apr 25 22:32:14 2006 -0600
+++ b/xen/include/asm-ia64/domain.h     Tue Apr 25 22:35:41 2006 -0600
@@ -63,7 +63,6 @@ struct arch_domain {
     offsetof(vcpu_info_t, evtchn_upcall_mask))
 
 struct arch_vcpu {
-#if 1
        TR_ENTRY itrs[NITRS];
        TR_ENTRY dtrs[NDTRS];
        TR_ENTRY itlb;
@@ -81,8 +80,11 @@ struct arch_vcpu {
        unsigned long domain_itm;
        unsigned long domain_itm_last;
        unsigned long xen_itm;
-#endif
+
     mapped_regs_t *privregs; /* save the state of vcpu */
+
+    /* These fields are copied from arch_domain to make access easier/faster
+       in assembly code.  */
     unsigned long metaphysical_rr0;            // from arch_domain (so is 
pinned)
     unsigned long metaphysical_rr4;            // from arch_domain (so is 
pinned)
     unsigned long metaphysical_saved_rr0;      // from arch_domain (so is 
pinned)
@@ -90,6 +92,7 @@ struct arch_vcpu {
     int breakimm;                      // from arch_domain (so is pinned)
     int starting_rid;          /* first RID assigned to domain */
     int ending_rid;            /* one beyond highest RID assigned to domain */
+
     struct thread_struct _thread;      // this must be last
 
     thash_cb_t vtlb;
@@ -108,58 +111,9 @@ struct arch_vcpu {
 // FOLLOWING FROM linux-2.6.7/include/sched.h
 
 struct mm_struct {
-       struct vm_area_struct * mmap;           /* list of VMAs */
-#ifndef XEN
-       struct rb_root mm_rb;
-#endif
-       struct vm_area_struct * mmap_cache;     /* last find_vma result */
-       unsigned long free_area_cache;          /* first hole */
        pgd_t * pgd;
-       atomic_t mm_users;                      /* How many users with user 
space? */
-       atomic_t mm_count;                      /* How many references to 
"struct mm_struct" (users count as 1) */
-       int map_count;                          /* number of VMAs */
-#ifndef XEN
-       struct rw_semaphore mmap_sem;
-#endif
-       spinlock_t page_table_lock;             /* Protects task page tables 
and mm->rss */
-
+    // atomic_t mm_users;                      /* How many users with user 
space? */
        struct list_head pt_list;               /* List of pagetable */
-
-       struct list_head mmlist;                /* List of all active mm's.  
These are globally strung
-                                                * together off init_mm.mmlist, 
and are protected
-                                                * by mmlist_lock
-                                                */
-
-#ifndef XEN
-       unsigned long start_code, end_code, start_data, end_data;
-       unsigned long start_brk, brk, start_stack;
-       unsigned long arg_start, arg_end, env_start, env_end;
-       unsigned long rss, total_vm, locked_vm;
-       unsigned long def_flags;
-
-       unsigned long saved_auxv[40]; /* for /proc/PID/auxv */
-
-       unsigned dumpable:1;
-#endif
-#ifdef CONFIG_HUGETLB_PAGE
-       int used_hugetlb;
-#endif
-#ifndef XEN
-       cpumask_t cpu_vm_mask;
-
-       /* Architecture-specific MM context */
-       mm_context_t context;
-
-       /* coredumping support */
-       int core_waiters;
-       struct completion *core_startup_done, core_done;
-
-       /* aio bits */
-       rwlock_t                ioctx_list_lock;
-       struct kioctx           *ioctx_list;
-
-       struct kioctx           default_kioctx;
-#endif
 };
 
 extern struct mm_struct init_mm;
diff -r d23c088eac6d -r ced37bea0647 xen/include/asm-ia64/linux-xen/asm/io.h
--- a/xen/include/asm-ia64/linux-xen/asm/io.h   Tue Apr 25 22:32:14 2006 -0600
+++ b/xen/include/asm-ia64/linux-xen/asm/io.h   Tue Apr 25 22:35:41 2006 -0600
@@ -23,7 +23,9 @@
 #define __SLOW_DOWN_IO do { } while (0)
 #define SLOW_DOWN_IO   do { } while (0)
 
-#ifndef XEN
+#ifdef XEN
+#include <asm/xensystem.h>
+#else
 #define __IA64_UNCACHED_OFFSET 0xc000000000000000UL    /* region 6 */
 #endif
 
diff -r d23c088eac6d -r ced37bea0647 xen/include/asm-ia64/linux-xen/asm/page.h
--- a/xen/include/asm-ia64/linux-xen/asm/page.h Tue Apr 25 22:32:14 2006 -0600
+++ b/xen/include/asm-ia64/linux-xen/asm/page.h Tue Apr 25 22:35:41 2006 -0600
@@ -119,6 +119,7 @@ typedef union ia64_va {
        void *p;
 } ia64_va;
 
+#ifndef XEN
 /*
  * Note: These macros depend on the fact that PAGE_OFFSET has all
  * region bits set to 1 and all other bits set to zero.  They are
@@ -127,6 +128,7 @@ typedef union ia64_va {
  */
 #define __pa(x)                ({ia64_va _v; _v.l = (long) (x); _v.f.reg = 0; 
_v.l;})
 #define __va(x)                ({ia64_va _v; _v.l = (long) (x); _v.f.reg = -1; 
_v.p;})
+#endif /* XEN */
 
 #define REGION_NUMBER(x)       ({ia64_va _v; _v.l = (long) (x); _v.f.reg;})
 #define REGION_OFFSET(x)       ({ia64_va _v; _v.l = (long) (x); _v.f.off;})
@@ -198,6 +200,7 @@ get_order (unsigned long size)
 # define __pgprot(x)   (x)
 #endif /* !STRICT_MM_TYPECHECKS */
 
+#ifndef XEN
 #define PAGE_OFFSET                    __IA64_UL_CONST(0xe000000000000000)
 
 #define VM_DATA_DEFAULT_FLAGS          (VM_READ | VM_WRITE |                   
                \
@@ -205,7 +208,7 @@ get_order (unsigned long size)
                                         (((current->personality & 
READ_IMPLIES_EXEC) != 0)     \
                                          ? VM_EXEC : 0))
 
-#ifdef XEN
+#else
 #include <asm/xenpage.h>
 #endif
 
diff -r d23c088eac6d -r ced37bea0647 
xen/include/asm-ia64/linux-xen/asm/pgtable.h
--- a/xen/include/asm-ia64/linux-xen/asm/pgtable.h      Tue Apr 25 22:32:14 
2006 -0600
+++ b/xen/include/asm-ia64/linux-xen/asm/pgtable.h      Tue Apr 25 22:35:41 
2006 -0600
@@ -349,6 +349,7 @@ pgd_offset (struct mm_struct *mm, unsign
 #define pte_unmap(pte)                 do { } while (0)
 #define pte_unmap_nested(pte)          do { } while (0)
 
+#ifndef XEN
 /* atomic versions of the some PTE manipulations: */
 
 static inline int
@@ -418,6 +419,7 @@ pte_same (pte_t a, pte_t b)
 }
 
 #define update_mmu_cache(vma, address, pte) do { } while (0)
+#endif /* XEN */
 
 extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
 extern void paging_init (void);
diff -r d23c088eac6d -r ced37bea0647 xen/include/asm-ia64/linux-xen/asm/system.h
--- a/xen/include/asm-ia64/linux-xen/asm/system.h       Tue Apr 25 22:32:14 
2006 -0600
+++ b/xen/include/asm-ia64/linux-xen/asm/system.h       Tue Apr 25 22:35:41 
2006 -0600
@@ -187,7 +187,9 @@ do {                                                        
        \
        (__ia64_id_flags & IA64_PSR_I) == 0;    \
 })
 
-#ifndef XEN
+#ifdef XEN
+#define local_irq_is_enabled() (!irqs_disabled())
+#else
 #ifdef __KERNEL__
 
 #ifdef CONFIG_IA32_SUPPORT
diff -r d23c088eac6d -r ced37bea0647 xen/include/asm-ia64/xenpage.h
--- a/xen/include/asm-ia64/xenpage.h    Tue Apr 25 22:32:14 2006 -0600
+++ b/xen/include/asm-ia64/xenpage.h    Tue Apr 25 22:35:41 2006 -0600
@@ -66,7 +66,4 @@ static inline int get_order_from_pages(u
 /* It is sometimes very useful to have unsigned long as result.  */
 #define __va_ul(x)     ({xen_va _v; _v.l = (long) (x); _v.f.reg = -1; _v.l;})
 
-#undef PAGE_OFFSET
-#define PAGE_OFFSET    __IA64_UL_CONST(0xf000000000000000)
-
 #endif /* _ASM_IA64_XENPAGE_H */
diff -r d23c088eac6d -r ced37bea0647 xen/include/asm-ia64/xensystem.h
--- a/xen/include/asm-ia64/xensystem.h  Tue Apr 25 22:32:14 2006 -0600
+++ b/xen/include/asm-ia64/xensystem.h  Tue Apr 25 22:35:41 2006 -0600
@@ -25,9 +25,9 @@
 #define HYPERVISOR_VIRT_START   0xf000000000000000
 #define KERNEL_START            0xf000000004000000
 #define SHAREDINFO_ADDR                 0xf100000000000000
-#define SHARED_ARCHINFO_ADDR    (SHAREDINFO_ADDR + PAGE_SIZE)
+#define XSI_OFS                 PAGE_SIZE
+#define SHARED_ARCHINFO_ADDR    (SHAREDINFO_ADDR + XSI_OFS)
 #define PERCPU_ADDR             (SHAREDINFO_ADDR - PERCPU_PAGE_SIZE)
-#define XSI_OFS                 (SHARED_ARCHINFO_ADDR - SHAREDINFO_ADDR)
 #define VHPT_ADDR               0xf200000000000000
 #ifdef CONFIG_VIRTUAL_FRAME_TABLE
 #define VIRT_FRAME_TABLE_ADDR   0xf300000000000000
@@ -35,45 +35,8 @@
 #endif
 #define XEN_END_ADDR            0xf400000000000000
 
+#define PAGE_OFFSET    __IA64_UL_CONST(0xf000000000000000)
+
 #define IS_VMM_ADDRESS(addr) ((((addr) >> 60) ^ ((addr) >> 59)) & 1)
 
-#ifndef __ASSEMBLY__
-
-#define IA64_HAS_EXTRA_STATE(t) 0
-
-struct vcpu;
-extern void ia64_save_extra (struct vcpu *v);
-extern void ia64_load_extra (struct vcpu *v);
-
-extern struct vcpu *vmx_ia64_switch_to (struct vcpu *next_task);
-extern struct vcpu *ia64_switch_to (struct vcpu *next_task);
-
-#define __switch_to(prev,next,last) do {       \
-       ia64_save_fpu(prev->arch._thread.fph);  \
-       ia64_load_fpu(next->arch._thread.fph);  \
-       if (VMX_DOMAIN(prev))                   \
-               vmx_save_state(prev);           \
-       else {                                  \
-               if (IA64_HAS_EXTRA_STATE(prev)) \
-                       ia64_save_extra(prev);  \
-       }                                       \
-       if (VMX_DOMAIN(next))                   \
-               vmx_load_state(next);           \
-       else {                                  \
-               if (IA64_HAS_EXTRA_STATE(next)) \
-                       ia64_save_extra(next);  \
-       }                                       \
-       /*ia64_psr(ia64_task_regs(next))->dfh = 
!ia64_is_local_fpu_owner(next);*/                        \
-       (last) = ia64_switch_to((next));        \
-       if (!VMX_DOMAIN(current)){                   \
-          vcpu_set_next_timer(current);                \
-       }                                       \
-} while (0)
-
-// FIXME SMP... see system.h, does this need to be different?
-#define switch_to(prev,next,last)      __switch_to(prev, next, last)
-
-#define local_irq_is_enabled() (!irqs_disabled())
-
-#endif // __ASSEMBLY__
 #endif // _ASM_IA64_XENSYSTEM_H

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [IA64] FPH enabling + cleanup, Xen patchbot -unstable <=