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] Stil more cleanup and moving to 2.6.13 base

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Stil more cleanup and moving to 2.6.13 base
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 15 Sep 2005 07:48:16 +0000
Delivery-date: Thu, 15 Sep 2005 07:50:28 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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 djm@xxxxxxxxxxxxxxx
# Node ID d34925e4144bcdadb020ee2deef766a994bf7b04
# Parent  23217792aa3b3cb87036411a68134ffeb5fe105a
Stil more cleanup and moving to 2.6.13 base

diff -r 23217792aa3b -r d34925e4144b xen/arch/ia64/hpsimserial.c
--- a/xen/arch/ia64/hpsimserial.c       Wed Aug 31 23:21:24 2005
+++ b/xen/arch/ia64/hpsimserial.c       Thu Sep  1 17:09:27 2005
@@ -8,7 +8,7 @@
 #include <linux/config.h>
 #include <xen/sched.h>
 #include <xen/serial.h>
-#include <asm/hpsim_ssc.h>
+#include "hpsim_ssc.h"
 
 static void hp_ski_putc(struct serial_port *port, char c)
 {
diff -r 23217792aa3b -r d34925e4144b xen/arch/ia64/linux-xen/README.origin
--- a/xen/arch/ia64/linux-xen/README.origin     Wed Aug 31 23:21:24 2005
+++ b/xen/arch/ia64/linux-xen/README.origin     Thu Sep  1 17:09:27 2005
@@ -7,6 +7,7 @@
 efi.c          -> linux/arch/ia64/kernel/efi.c
 entry.h                -> linux/arch/ia64/kernel/entry.h
 entry.S                -> linux/arch/ia64/kernel/entry.S
+hpsim_ssc.h    -> linux/arch/ia64/hp/sim/hpsim_ssc.h
 irq_ia64.c     -> linux/arch/ia64/kernel/irq_ia64.c
 minstate.h     -> linux/arch/ia64/kernel/minstate.h
 mm_contig.c    -> linux/arch/ia64/mm/contig.c
diff -r 23217792aa3b -r d34925e4144b xen/arch/ia64/process.c
--- a/xen/arch/ia64/process.c   Wed Aug 31 23:21:24 2005
+++ b/xen/arch/ia64/process.c   Thu Sep  1 17:09:27 2005
@@ -28,8 +28,8 @@
 #include <asm/privop.h>
 #include <asm/vcpu.h>
 #include <asm/ia64_int.h>
-#include <asm/hpsim_ssc.h>
 #include <asm/dom_fw.h>
+#include "hpsim_ssc.h"
 
 extern unsigned long vcpu_get_itir_on_fault(struct vcpu *, UINT64);
 extern struct ia64_sal_retval pal_emulator_static(UINT64);
diff -r 23217792aa3b -r d34925e4144b xen/arch/ia64/xenmisc.c
--- a/xen/arch/ia64/xenmisc.c   Wed Aug 31 23:21:24 2005
+++ b/xen/arch/ia64/xenmisc.c   Thu Sep  1 17:09:27 2005
@@ -174,6 +174,34 @@
 void free_page_type(struct pfn_info *page, unsigned int type)
 {
        dummy();
+}
+
+///////////////////////////////
+//// misc memory stuff
+///////////////////////////////
+
+unsigned long __get_free_pages(unsigned int mask, unsigned int order)
+{
+       void *p = alloc_xenheap_pages(order);
+
+       memset(p,0,PAGE_SIZE<<order);
+       return (unsigned long)p;
+}
+
+void __free_pages(struct page *page, unsigned int order)
+{
+       if (order) BUG();
+       free_xenheap_page(page);
+}
+
+void *pgtable_quicklist_alloc(void)
+{
+       return alloc_xenheap_pages(0);
+}
+
+void pgtable_quicklist_free(void *pgtable_entry)
+{
+       free_xenheap_page(pgtable_entry);
 }
 
 ///////////////////////////////
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/config.h
--- a/xen/include/asm-ia64/config.h     Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/config.h     Thu Sep  1 17:09:27 2005
@@ -168,7 +168,9 @@
 #define ____cacheline_aligned_in_smp
 #define ____cacheline_maxaligned_in_smp
 
+#ifndef __ASSEMBLY__
 #include "asm/types.h" // for u64
+#endif
 
 // warning: unless search_extable is declared, the return value gets
 // truncated to 32-bits, causing a very strange error in privop handling
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/asm/gcc_intrin.h
--- a/xen/include/asm-ia64/linux-xen/asm/gcc_intrin.h   Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/gcc_intrin.h   Thu Sep  1 17:09:27 2005
@@ -133,13 +133,17 @@
        ia64_intri_res;                                                         
\
 })
 
-#define ia64_popcnt(x)                                         \
-({                                                             \
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+# define ia64_popcnt(x)                __builtin_popcountl(x)
+#else
+# define ia64_popcnt(x)                                                \
+  ({                                                           \
        __u64 ia64_intri_res;                                   \
        asm ("popcnt %0=%1" : "=r" (ia64_intri_res) : "r" (x)); \
                                                                \
        ia64_intri_res;                                         \
-})
+  })
+#endif
 
 #define ia64_getf_exp(x)                                       \
 ({                                                             \
@@ -367,66 +371,6 @@
 
 #define ia64_mf()      asm volatile ("mf" ::: "memory")
 #define ia64_mfa()     asm volatile ("mf.a" ::: "memory")
-
-#ifdef CONFIG_VTI
-/*
- * Flushrs instruction stream.
- */
-#define ia64_flushrs() asm volatile ("flushrs;;":::"memory")
-
-#define ia64_loadrs() asm volatile ("loadrs;;":::"memory")
-
-#define ia64_get_rsc()                          \
-({                                  \
-    unsigned long val;                     \
-    asm volatile ("mov %0=ar.rsc;;" : "=r"(val) :: "memory");  \
-    val;                               \
-})
-
-#define ia64_set_rsc(val)                       \
-    asm volatile ("mov ar.rsc=%0;;" :: "r"(val) : "memory")
-
-#define ia64_get_bspstore()     \
-({                                  \
-    unsigned long val;                     \
-    asm volatile ("mov %0=ar.bspstore;;" : "=r"(val) :: "memory");  \
-    val;                               \
-})
-
-#define ia64_set_bspstore(val)                       \
-    asm volatile ("mov ar.bspstore=%0;;" :: "r"(val) : "memory")
-
-#define ia64_get_rnat()     \
-({                                  \
-    unsigned long val;                     \
-    asm volatile ("mov %0=ar.rnat;" : "=r"(val) :: "memory");  \
-    val;                               \
-})
-
-#define ia64_set_rnat(val)                       \
-    asm volatile ("mov ar.rnat=%0;;" :: "r"(val) : "memory")
-
-#define ia64_ttag(addr)                                                        
\
-({                                                                             
\
-       __u64 ia64_intri_res;                                                   
\
-       asm volatile ("ttag %0=%1" : "=r"(ia64_intri_res) : "r" (addr));        
\
-       ia64_intri_res;                                                         
\
-})
-
-#define ia64_get_dcr()                          \
-({                                      \
-    __u64 result;                               \
-    asm volatile ("mov %0=cr.dcr" : "=r"(result) : );           \
-    result;                                 \
-})
-
-#define ia64_set_dcr(val)                           \
-({                                      \
-    asm volatile ("mov cr.dcr=%0" :: "r"(val) );            \
-})
-
-#endif // CONFIG_VTI
-
 
 #define ia64_invala() asm volatile ("invala" ::: "memory")
 
@@ -654,4 +598,8 @@
                      :: "r"((x)) : "p6", "p7", "memory");      \
 } while (0)
 
+#ifdef XEN
+#include <asm/xengcc_intrin.h>
+#endif
+
 #endif /* _ASM_IA64_GCC_INTRIN_H */
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/asm/ia64regs.h
--- a/xen/include/asm-ia64/linux-xen/asm/ia64regs.h     Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/ia64regs.h     Thu Sep  1 17:09:27 2005
@@ -87,35 +87,6 @@
 #define _IA64_REG_CR_LRR0      4176
 #define _IA64_REG_CR_LRR1      4177
 
-#ifdef  CONFIG_VTI
-#define IA64_REG_CR_DCR   0
-#define IA64_REG_CR_ITM   1
-#define IA64_REG_CR_IVA   2
-#define IA64_REG_CR_PTA   8
-#define IA64_REG_CR_IPSR  16
-#define IA64_REG_CR_ISR   17
-#define IA64_REG_CR_IIP   19
-#define IA64_REG_CR_IFA   20
-#define IA64_REG_CR_ITIR  21
-#define IA64_REG_CR_IIPA  22
-#define IA64_REG_CR_IFS   23
-#define IA64_REG_CR_IIM   24
-#define IA64_REG_CR_IHA   25
-#define IA64_REG_CR_LID   64
-#define IA64_REG_CR_IVR   65
-#define IA64_REG_CR_TPR   66
-#define IA64_REG_CR_EOI   67
-#define IA64_REG_CR_IRR0  68
-#define IA64_REG_CR_IRR1  69
-#define IA64_REG_CR_IRR2  70
-#define IA64_REG_CR_IRR3  71
-#define IA64_REG_CR_ITV   72
-#define IA64_REG_CR_PMV   73
-#define IA64_REG_CR_CMCV  74
-#define IA64_REG_CR_LRR0  80
-#define IA64_REG_CR_LRR1  81
-#endif  //  CONFIG_VTI
-
 /* Indirect Registers for getindreg() and setindreg() */
 
 #define _IA64_REG_INDR_CPUID   9000    /* getindreg only */
@@ -126,4 +97,8 @@
 #define _IA64_REG_INDR_PMD     9005
 #define _IA64_REG_INDR_RR      9006
 
+#ifdef XEN
+#include <asm/xenia64regs.h>
+#endif
+
 #endif /* _ASM_IA64_IA64REGS_H */
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/linux-xen/asm/io.h
--- a/xen/include/asm-ia64/linux-xen/asm/io.h   Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/io.h   Thu Sep  1 17:09:27 2005
@@ -122,14 +122,6 @@
 static inline void ___ia64_mmiowb(void)
 {
        ia64_mfa();
-}
-
-static inline const unsigned long
-__ia64_get_io_port_base (void)
-{
-       extern unsigned long ia64_iobase;
-
-       return ia64_iobase;
 }
 
 static inline void*
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/linux-xen/asm/kregs.h
--- a/xen/include/asm-ia64/linux-xen/asm/kregs.h        Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/kregs.h        Thu Sep  1 17:09:27 2005
@@ -29,21 +29,8 @@
  */
 #define IA64_TR_KERNEL         0       /* itr0, dtr0: maps kernel image (code 
& data) */
 #define IA64_TR_PALCODE                1       /* itr1: maps PALcode as 
required by EFI */
-#ifdef CONFIG_VTI
-#define IA64_TR_XEN_IN_DOM     6       /* itr6, dtr6: Double mapping for xen 
image in domain space */
-#endif // CONFIG_VTI
 #define IA64_TR_PERCPU_DATA    1       /* dtr1: percpu data */
 #define IA64_TR_CURRENT_STACK  2       /* dtr2: maps kernel's memory- & 
register-stacks */
-#ifdef XEN
-#define IA64_TR_SHARED_INFO    3       /* dtr3: page shared with domain */
-#define        IA64_TR_VHPT            4       /* dtr4: vhpt */
-#define IA64_TR_ARCH_INFO      5
-#ifdef CONFIG_VTI
-#define IA64_TR_VHPT_IN_DOM    5       /* dtr5: Double mapping for vhpt table 
in domain space */
-#define IA64_TR_RR7_SWITCH_STUB        7       /* dtr7: mapping for rr7 switch 
stub */
-#define IA64_TEMP_PHYSICAL     8       /* itr8, dtr8: temp mapping for guest 
physical memory 256M */
-#endif // CONFIG_VTI
-#endif
 
 /* Processor status register bits: */
 #define IA64_PSR_BE_BIT                1
@@ -79,9 +66,6 @@
 #define IA64_PSR_ED_BIT                43
 #define IA64_PSR_BN_BIT                44
 #define IA64_PSR_IA_BIT                45
-#ifdef CONFIG_VTI
-#define IA64_PSR_VM_BIT                46
-#endif // CONFIG_VTI
 
 /* A mask of PSR bits that we generally don't want to inherit across a 
clone2() or an
    execve().  Only list flags here that need to be cleared/set for BOTH 
clone2() and
@@ -123,9 +107,6 @@
 #define IA64_PSR_ED    (__IA64_UL(1) << IA64_PSR_ED_BIT)
 #define IA64_PSR_BN    (__IA64_UL(1) << IA64_PSR_BN_BIT)
 #define IA64_PSR_IA    (__IA64_UL(1) << IA64_PSR_IA_BIT)
-#ifdef CONFIG_VTI
-#define IA64_PSR_VM    (__IA64_UL(1) << IA64_PSR_VM_BIT)
-#endif // CONFIG_VTI
 
 /* User mask bits: */
 #define IA64_PSR_UM    (IA64_PSR_BE | IA64_PSR_UP | IA64_PSR_AC | IA64_PSR_MFL 
| IA64_PSR_MFH)
@@ -180,20 +161,7 @@
 #define IA64_ISR_CODE_PROBEF   5
 
 #ifdef XEN
-/* Interruption Function State */
-#define IA64_IFS_V_BIT         63
-#define IA64_IFS_V     (__IA64_UL(1) << IA64_IFS_V_BIT)
-
-/* Page Table Address */
-#define IA64_PTA_VE_BIT 0
-#define IA64_PTA_SIZE_BIT 2
-#define IA64_PTA_VF_BIT 8
-#define IA64_PTA_BASE_BIT 15
-
-#define IA64_PTA_VE     (__IA64_UL(1) << IA64_PTA_VE_BIT)
-#define IA64_PTA_SIZE   (__IA64_UL(0x3f) << IA64_PTA_SIZE_BIT)
-#define IA64_PTA_VF     (__IA64_UL(1) << IA64_PTA_VF_BIT)
-#define IA64_PTA_BASE   (__IA64_UL(0) - ((__IA64_UL(1) << IA64_PTA_BASE_BIT)))
+#include <asm/xenkregs.h>
 #endif
 
 #endif /* _ASM_IA64_kREGS_H */
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/asm/mca_asm.h
--- a/xen/include/asm-ia64/linux-xen/asm/mca_asm.h      Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/mca_asm.h      Thu Sep  1 17:09:27 2005
@@ -29,10 +29,10 @@
 #ifdef XEN
 #define INST_VA_TO_PA(addr)                                                    
\
        dep     addr    = 0, addr, 60, 4
-#else // XEN
+#else
 #define INST_VA_TO_PA(addr)                                                    
\
        dep     addr    = 0, addr, 61, 3
-#endif // XEN
+#endif
 /*
  * This macro converts a data virtual address to a physical address
  * Right now for simulation purposes the virtual addresses are
@@ -51,15 +51,19 @@
 #define DATA_PA_TO_VA(addr,temp)                                               
        \
        mov     temp    = 0xf   ;;                                              
        \
        dep     addr    = temp, addr, 60, 4
-#else // XEN
+#else
 #define DATA_PA_TO_VA(addr,temp)                                               
        \
        mov     temp    = 0x7   ;;                                              
        \
        dep     addr    = temp, addr, 61, 3
-#endif // XEN
-
+#endif
+
+#ifdef XEN
+//FIXME LATER
+#else
 #define GET_THIS_PADDR(reg, var)               \
        mov     reg = IA64_KR(PER_CPU_DATA);;   \
         addl   reg = THIS_CPU(var), reg
+#endif
 
 /*
  * This macro jumps to the instruction at the given virtual address
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/linux-xen/asm/page.h
--- a/xen/include/asm-ia64/linux-xen/asm/page.h Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/page.h Thu Sep  1 17:09:27 2005
@@ -32,7 +32,6 @@
 #define PAGE_ALIGN(addr)       (((addr) + PAGE_SIZE - 1) & PAGE_MASK)
 
 #define PERCPU_PAGE_SHIFT      16      /* log2() of max. size of per-CPU area 
*/
-
 #define PERCPU_PAGE_SIZE       (__IA64_UL_CONST(1) << PERCPU_PAGE_SHIFT)
 
 #define RGN_MAP_LIMIT  ((1UL << (4*PAGE_SHIFT - 12)) - PAGE_SIZE)      /* per 
region addr limit */
@@ -96,15 +95,9 @@
 #endif
 
 #ifndef CONFIG_DISCONTIGMEM
-#ifdef XEN
-# define pfn_valid(pfn)                (0)
-# define page_to_pfn(_page)    ((unsigned long)((_page) - frame_table))
-# define pfn_to_page(_pfn)     (frame_table + (_pfn))
-#else
 # define pfn_valid(pfn)                (((pfn) < max_mapnr) && 
ia64_pfn_valid(pfn))
 # define page_to_pfn(page)     ((unsigned long) (page - mem_map))
 # define pfn_to_page(pfn)      (mem_map + (pfn))
-#endif
 #else
 extern struct page *vmem_map;
 extern unsigned long max_low_pfn;
@@ -115,11 +108,6 @@
 
 #define page_to_phys(page)     (page_to_pfn(page) << PAGE_SHIFT)
 #define virt_to_page(kaddr)    pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
-
-#ifdef XEN
-#define page_to_virt(_page)    phys_to_virt(page_to_phys(_page))
-#define phys_to_page(kaddr)    pfn_to_page(((kaddr) >> PAGE_SHIFT))
-#endif
 
 typedef union ia64_va {
        struct {
@@ -136,23 +124,8 @@
  * expressed in this way to ensure they result in a single "dep"
  * instruction.
  */
-#ifdef XEN
-typedef union xen_va {
-       struct {
-               unsigned long off : 60;
-               unsigned long reg : 4;
-       } f;
-       unsigned long l;
-       void *p;
-} xen_va;
-
-// xen/drivers/console.c uses __va in a declaration (should be fixed!)
-#define __pa(x)                ({xen_va _v; _v.l = (long) (x); _v.f.reg = 0; 
_v.l;})
-#define __va(x)                ({xen_va _v; _v.l = (long) (x); _v.f.reg = -1; 
_v.p;})
-#else
 #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
 
 #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;})
@@ -164,9 +137,9 @@
 # define htlbpage_to_page(x)   (((unsigned long) REGION_NUMBER(x) << 61)       
                \
                                 | (REGION_OFFSET(x) >> 
(HPAGE_SHIFT-PAGE_SHIFT)))
 # define HUGETLB_PAGE_ORDER    (HPAGE_SHIFT - PAGE_SHIFT)
-# define is_hugepage_only_range(addr, len)             \
+# define is_hugepage_only_range(mm, addr, len)         \
         (REGION_NUMBER(addr) == REGION_HPAGE &&        \
-         REGION_NUMBER((addr)+(len)) == REGION_HPAGE)
+         REGION_NUMBER((addr)+(len)-1) == REGION_HPAGE)
 extern unsigned int hpage_shift;
 #endif
 
@@ -224,15 +197,15 @@
 # define __pgprot(x)   (x)
 #endif /* !STRICT_MM_TYPECHECKS */
 
-#ifdef XEN
-#define PAGE_OFFSET                    __IA64_UL_CONST(0xf000000000000000)
-#else
 #define PAGE_OFFSET                    __IA64_UL_CONST(0xe000000000000000)
-#endif
 
 #define VM_DATA_DEFAULT_FLAGS          (VM_READ | VM_WRITE |                   
                \
                                         VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC 
|                \
                                         (((current->personality & 
READ_IMPLIES_EXEC) != 0)     \
                                          ? VM_EXEC : 0))
 
+#ifdef XEN
+#include <asm/xenpage.h>
+#endif
+
 #endif /* _ASM_IA64_PAGE_H */
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/asm/pgalloc.h
--- a/xen/include/asm-ia64/linux-xen/asm/pgalloc.h      Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/pgalloc.h      Thu Sep  1 17:09:27 2005
@@ -21,176 +21,127 @@
 #include <linux/threads.h>
 
 #include <asm/mmu_context.h>
-#include <asm/processor.h>
 
-/*
- * Very stupidly, we used to get new pgd's and pmd's, init their contents
- * to point to the NULL versions of the next level page table, later on
- * completely re-init them the same way, then free them up.  This wasted
- * a lot of work and caused unnecessary memory traffic.  How broken...
- * We fix this by caching them.
- */
-#define pgd_quicklist          (local_cpu_data->pgd_quick)
-#define pmd_quicklist          (local_cpu_data->pmd_quick)
-#define pgtable_cache_size     (local_cpu_data->pgtable_cache_sz)
+#ifndef XEN
+DECLARE_PER_CPU(unsigned long *, __pgtable_quicklist);
+#define pgtable_quicklist __ia64_per_cpu_var(__pgtable_quicklist)
+DECLARE_PER_CPU(long, __pgtable_quicklist_size);
+#define pgtable_quicklist_size __ia64_per_cpu_var(__pgtable_quicklist_size)
 
-static inline pgd_t*
-pgd_alloc_one_fast (struct mm_struct *mm)
+static inline long pgtable_quicklist_total_size(void)
+{
+       long ql_size = 0;
+       int cpuid;
+
+       for_each_online_cpu(cpuid) {
+               ql_size += per_cpu(__pgtable_quicklist_size, cpuid);
+       }
+       return ql_size;
+}
+
+static inline void *pgtable_quicklist_alloc(void)
 {
        unsigned long *ret = NULL;
 
        preempt_disable();
 
-       ret = pgd_quicklist;
+       ret = pgtable_quicklist;
        if (likely(ret != NULL)) {
-               pgd_quicklist = (unsigned long *)(*ret);
+               pgtable_quicklist = (unsigned long *)(*ret);
                ret[0] = 0;
-               --pgtable_cache_size;
-       } else
-               ret = NULL;
+               --pgtable_quicklist_size;
+               preempt_enable();
+       } else {
+               preempt_enable();
+               ret = (unsigned long *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
+       }
 
-       preempt_enable();
-
-       return (pgd_t *) ret;
+       return ret;
 }
 
-static inline pgd_t*
-pgd_alloc (struct mm_struct *mm)
+static inline void pgtable_quicklist_free(void *pgtable_entry)
 {
-       /* the VM system never calls pgd_alloc_one_fast(), so we do it here. */
-       pgd_t *pgd = pgd_alloc_one_fast(mm);
+#ifdef CONFIG_NUMA
+       unsigned long nid = page_to_nid(virt_to_page(pgtable_entry));
 
-       if (unlikely(pgd == NULL)) {
-#ifdef XEN
-               pgd = (pgd_t *)alloc_xenheap_page();
-               memset(pgd,0,PAGE_SIZE);
-#else
-               pgd = (pgd_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
+       if (unlikely(nid != numa_node_id())) {
+               free_page((unsigned long)pgtable_entry);
+               return;
+       }
 #endif
-       }
-       return pgd;
+
+       preempt_disable();
+       *(unsigned long *)pgtable_entry = (unsigned long)pgtable_quicklist;
+       pgtable_quicklist = (unsigned long *)pgtable_entry;
+       ++pgtable_quicklist_size;
+       preempt_enable();
+}
+#endif
+
+static inline pgd_t *pgd_alloc(struct mm_struct *mm)
+{
+       return pgtable_quicklist_alloc();
+}
+
+static inline void pgd_free(pgd_t * pgd)
+{
+       pgtable_quicklist_free(pgd);
 }
 
 static inline void
-pgd_free (pgd_t *pgd)
-{
-       preempt_disable();
-       *(unsigned long *)pgd = (unsigned long) pgd_quicklist;
-       pgd_quicklist = (unsigned long *) pgd;
-       ++pgtable_cache_size;
-       preempt_enable();
-}
-
-static inline void
-pud_populate (struct mm_struct *mm, pud_t *pud_entry, pmd_t *pmd)
+pud_populate(struct mm_struct *mm, pud_t * pud_entry, pmd_t * pmd)
 {
        pud_val(*pud_entry) = __pa(pmd);
 }
 
-static inline pmd_t*
-pmd_alloc_one_fast (struct mm_struct *mm, unsigned long addr)
+static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
 {
-       unsigned long *ret = NULL;
-
-       preempt_disable();
-
-       ret = (unsigned long *)pmd_quicklist;
-       if (likely(ret != NULL)) {
-               pmd_quicklist = (unsigned long *)(*ret);
-               ret[0] = 0;
-               --pgtable_cache_size;
-       }
-
-       preempt_enable();
-
-       return (pmd_t *)ret;
+       return pgtable_quicklist_alloc();
 }
 
-static inline pmd_t*
-pmd_alloc_one (struct mm_struct *mm, unsigned long addr)
+static inline void pmd_free(pmd_t * pmd)
 {
-#ifdef XEN
-       pmd_t *pmd = (pmd_t *)alloc_xenheap_page();
-       memset(pmd,0,PAGE_SIZE);
-#else
-       pmd_t *pmd = (pmd_t 
*)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
-#endif
-
-       return pmd;
-}
-
-static inline void
-pmd_free (pmd_t *pmd)
-{
-       preempt_disable();
-       *(unsigned long *)pmd = (unsigned long) pmd_quicklist;
-       pmd_quicklist = (unsigned long *) pmd;
-       ++pgtable_cache_size;
-       preempt_enable();
+       pgtable_quicklist_free(pmd);
 }
 
 #define __pmd_free_tlb(tlb, pmd)       pmd_free(pmd)
 
 static inline void
-pmd_populate (struct mm_struct *mm, pmd_t *pmd_entry, struct page *pte)
+pmd_populate(struct mm_struct *mm, pmd_t * pmd_entry, struct page *pte)
 {
        pmd_val(*pmd_entry) = page_to_phys(pte);
 }
 
 static inline void
-pmd_populate_kernel (struct mm_struct *mm, pmd_t *pmd_entry, pte_t *pte)
+pmd_populate_kernel(struct mm_struct *mm, pmd_t * pmd_entry, pte_t * pte)
 {
        pmd_val(*pmd_entry) = __pa(pte);
 }
 
-static inline struct page *
-pte_alloc_one (struct mm_struct *mm, unsigned long addr)
+static inline struct page *pte_alloc_one(struct mm_struct *mm,
+                                        unsigned long addr)
 {
-#ifdef XEN
-       struct page *pte = alloc_xenheap_page();
-       memset(pte,0,PAGE_SIZE);
-#else
-       struct page *pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0);
-#endif
-
-       return pte;
+       return virt_to_page(pgtable_quicklist_alloc());
 }
 
-static inline pte_t *
-pte_alloc_one_kernel (struct mm_struct *mm, unsigned long addr)
+static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
+                                         unsigned long addr)
 {
-#ifdef XEN
-       pte_t *pte = (pte_t *)alloc_xenheap_page();
-       memset(pte,0,PAGE_SIZE);
-#else
-       pte_t *pte = (pte_t 
*)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
-#endif
-
-       return pte;
+       return pgtable_quicklist_alloc();
 }
 
-static inline void
-pte_free (struct page *pte)
+static inline void pte_free(struct page *pte)
 {
-#ifdef XEN
-       free_xenheap_page(pte);
-#else
-       __free_page(pte);
-#endif
+       pgtable_quicklist_free(page_address(pte));
 }
 
-static inline void
-pte_free_kernel (pte_t *pte)
+static inline void pte_free_kernel(pte_t * pte)
 {
-#ifdef XEN
-       free_xenheap_page((unsigned long) pte);
-#else
-       free_page((unsigned long) pte);
-#endif
+       pgtable_quicklist_free(pte);
 }
 
-#define __pte_free_tlb(tlb, pte)       tlb_remove_page((tlb), (pte))
+#define __pte_free_tlb(tlb, pte)       pte_free(pte)
 
-extern void check_pgt_cache (void);
+extern void check_pgt_cache(void);
 
-#endif /* _ASM_IA64_PGALLOC_H */
+#endif                         /* _ASM_IA64_PGALLOC_H */
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/asm/processor.h
--- a/xen/include/asm-ia64/linux-xen/asm/processor.h    Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/processor.h    Thu Sep  1 17:09:27 2005
@@ -43,14 +43,6 @@
 #define TASK_SIZE              (current->thread.task_size)
 
 /*
- * MM_VM_SIZE(mm) gives the maximum address (plus 1) which may contain a 
mapping for
- * address-space MM.  Note that with 32-bit tasks, this is still 
DEFAULT_TASK_SIZE,
- * because the kernel may have installed helper-mappings above TASK_SIZE.  For 
example,
- * for x86 emulation, the LDT and GDT are mapped above TASK_SIZE.
- */
-#define MM_VM_SIZE(mm)         DEFAULT_TASK_SIZE
-
-/*
  * This decides where the kernel will search for a free chunk of vm
  * space during mmap's.
  */
@@ -94,11 +86,10 @@
 #ifdef CONFIG_NUMA
 #include <asm/nodedata.h>
 #endif
+
 #ifdef XEN
 #include <asm/xenprocessor.h>
-#endif
-
-#ifndef XEN
+#else
 /* like above but expressed as bitfields for more efficient access: */
 struct ia64_psr {
        __u64 reserved0 : 1;
@@ -150,9 +141,6 @@
        __u64 nsec_per_cyc;     /* 
(1000000000<<IA64_NSEC_PER_CYC_SHIFT)/itc_freq */
        __u64 unimpl_va_mask;   /* mask of unimplemented virtual address bits 
(from PAL) */
        __u64 unimpl_pa_mask;   /* mask of unimplemented physical address bits 
(from PAL) */
-       __u64 *pgd_quick;
-       __u64 *pmd_quick;
-       __u64 pgtable_cache_sz;
        __u64 itc_freq;         /* frequency of ITC counter */
        __u64 proc_freq;        /* frequency of processor */
        __u64 cyc_per_usec;     /* itc_freq/1000000 */
@@ -189,22 +177,6 @@
 };
 
 DECLARE_PER_CPU(struct cpuinfo_ia64, cpu_info);
-
-typedef union {
-       struct {
-               __u64 kr0;
-               __u64 kr1;
-               __u64 kr2;
-               __u64 kr3;
-               __u64 kr4;
-               __u64 kr5;
-               __u64 kr6;
-               __u64 kr7;
-       };
-       __u64 _kr[8];
-} cpu_kr_ia64_t;
-
-DECLARE_PER_CPU(cpu_kr_ia64_t, cpu_kr);
 
 /*
  * The "local" data variable.  It refers to the per-CPU data of the currently 
executing
@@ -435,7 +407,10 @@
  * task_struct at this point.
  */
 
-/* Return TRUE if task T owns the fph partition of the CPU we're running on. */
+/*
+ * Return TRUE if task T owns the fph partition of the CPU we're running on.
+ * Must be called from code that has preemption disabled.
+ */
 #ifndef XEN
 #define ia64_is_local_fpu_owner(t)                                             
                \
 ({                                                                             
                \
@@ -445,7 +420,10 @@
 })
 #endif
 
-/* Mark task T as owning the fph partition of the CPU we're running on. */
+/*
+ * Mark task T as owning the fph partition of the CPU we're running on.
+ * Must be called from code that has preemption disabled.
+ */
 #define ia64_set_local_fpu_owner(t) do {                                       
        \
        struct task_struct *__ia64_slfo_task = (t);                             
        \
        __ia64_slfo_task->thread.last_fph_cpu = smp_processor_id();             
        \
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/asm/spinlock.h
--- a/xen/include/asm-ia64/linux-xen/asm/spinlock.h     Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/spinlock.h     Thu Sep  1 17:09:27 2005
@@ -120,35 +120,6 @@
 #define _raw_spin_trylock(x)   (cmpxchg_acq(&(x)->lock, 0, 1) == 0)
 #define spin_unlock_wait(x)    do { barrier(); } while ((x)->lock)
 
-#ifdef XEN
-/*
- * spin_[un]lock_recursive(): Use these forms when the lock can (safely!) be
- * reentered recursively on the same CPU. All critical regions that may form
- * part of a recursively-nested set must be protected by these forms. If there
- * are any critical regions that cannot form part of such a set, they can use
- * standard spin_[un]lock().
- */
-#define _raw_spin_lock_recursive(_lock)            \
-    do {                                           \
-        int cpu = smp_processor_id();              \
-        if ( likely((_lock)->recurse_cpu != cpu) ) \
-        {                                          \
-            spin_lock(_lock);                      \
-            (_lock)->recurse_cpu = cpu;            \
-        }                                          \
-        (_lock)->recurse_cnt++;                    \
-    } while ( 0 )
-
-#define _raw_spin_unlock_recursive(_lock)          \
-    do {                                           \
-        if ( likely(--(_lock)->recurse_cnt == 0) ) \
-        {                                          \
-            (_lock)->recurse_cpu = -1;             \
-            spin_unlock(_lock);                    \
-        }                                          \
-    } while ( 0 )
-#endif
-
 typedef struct {
        volatile unsigned int read_counter      : 31;
        volatile unsigned int write_lock        :  1;
@@ -238,4 +209,7 @@
        clear_bit(31, (x));                                                     
        \
 })
 
+#ifdef XEN
+#include <asm/xenspinlock.h>
+#endif
 #endif /*  _ASM_IA64_SPINLOCK_H */
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/linux-xen/asm/system.h
--- a/xen/include/asm-ia64/linux-xen/asm/system.h       Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/system.h       Thu Sep  1 17:09:27 2005
@@ -18,19 +18,14 @@
 #include <asm/page.h>
 #include <asm/pal.h>
 #include <asm/percpu.h>
-#ifdef XEN
-#include <asm/xensystem.h>
-#endif
 
 #define GATE_ADDR              __IA64_UL_CONST(0xa000000000000000)
 /*
  * 0xa000000000000000+2*PERCPU_PAGE_SIZE
  * - 0xa000000000000000+3*PERCPU_PAGE_SIZE remain unmapped (guard page)
  */
-#ifndef XEN
 #define KERNEL_START            __IA64_UL_CONST(0xa000000100000000)
 #define PERCPU_ADDR            (-PERCPU_PAGE_SIZE)
-#endif
 
 #ifndef __ASSEMBLY__
 
@@ -188,8 +183,6 @@
 
 #ifdef __KERNEL__
 
-#define prepare_to_switch()    do { } while(0)
-
 #ifdef CONFIG_IA32_SUPPORT
 # define IS_IA32_PROCESS(regs) (ia64_psr(regs)->is != 0)
 #else
@@ -223,7 +216,6 @@
 # define PERFMON_IS_SYSWIDE() (0)
 #endif
 
-#ifndef XEN
 #define IA64_HAS_EXTRA_STATE(t)                                                
        \
        ((t)->thread.flags & (IA64_THREAD_DBG_VALID|IA64_THREAD_PM_VALID)       
\
         || IS_IA32_PROCESS(ia64_task_regs(t)) || PERFMON_IS_SYSWIDE())
@@ -236,7 +228,6 @@
        ia64_psr(ia64_task_regs(next))->dfh = !ia64_is_local_fpu_owner(next);   
                 \
        (last) = ia64_switch_to((next));                                        
                 \
 } while (0)
-#endif 
 
 #ifdef CONFIG_SMP
 /*
@@ -247,9 +238,9 @@
  */
 # define switch_to(prev,next,last) do {                                        
        \
        if (ia64_psr(ia64_task_regs(prev))->mfh && 
ia64_is_local_fpu_owner(prev)) {                             \
-               /* ia64_psr(ia64_task_regs(prev))->mfh = 0; */                  
\
-               /* (prev)->thread.flags |= IA64_THREAD_FPH_VALID; */            
        \
-               /* __ia64_save_fpu((prev)->thread.fph); */                      
        \
+               ia64_psr(ia64_task_regs(prev))->mfh = 0;                        
\
+               (prev)->thread.flags |= IA64_THREAD_FPH_VALID;                  
\
+               __ia64_save_fpu((prev)->thread.fph);                            
\
        }                                                                       
\
        __switch_to(prev, next, last);                                          
\
 } while (0)
@@ -281,19 +272,20 @@
  * of that CPU which will not be released, because there we wait for the
  * tasklist_lock to become available.
  */
-#define prepare_arch_switch(rq, next)          \
-do {                                           \
-       spin_lock(&(next)->switch_lock);        \
-       spin_unlock(&(rq)->lock);               \
-} while (0)
-#define finish_arch_switch(rq, prev)   spin_unlock_irq(&(prev)->switch_lock)
-#define task_running(rq, p)            ((rq)->curr == (p) || 
spin_is_locked(&(p)->switch_lock))
+#define __ARCH_WANT_UNLOCKED_CTXSW
 
 #define ia64_platform_is(x) (strcmp(x, platform_name) == 0)
 
 void cpu_idle_wait(void);
+
+#define arch_align_stack(x) (x)
+
 #endif /* __KERNEL__ */
 
 #endif /* __ASSEMBLY__ */
 
+#ifdef XEN
+#include <asm/xensystem.h>
+#endif
+
 #endif /* _ASM_IA64_SYSTEM_H */
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/asm/tlbflush.h
--- a/xen/include/asm-ia64/linux-xen/asm/tlbflush.h     Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/tlbflush.h     Thu Sep  1 17:09:27 2005
@@ -37,6 +37,7 @@
 local_finish_flush_tlb_mm (struct mm_struct *mm)
 {
 #ifndef XEN
+// FIXME SMP?
        if (mm == current->active_mm)
                activate_context(mm);
 #endif
@@ -54,6 +55,7 @@
                return;
 
 #ifndef XEN
+// FIXME SMP?
        mm->context = 0;
 #endif
 
@@ -81,6 +83,7 @@
        if (vma->vm_mm == current->active_mm)
                ia64_ptcl(addr, (PAGE_SHIFT << 2));
 #ifndef XEN
+// FIXME SMP?
        else
                vma->vm_mm->context = 0;
 #endif
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/linux-xen/asm/types.h
--- a/xen/include/asm-ia64/linux-xen/asm/types.h        Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/types.h        Thu Sep  1 17:09:27 2005
@@ -1,12 +1,5 @@
 #ifndef _ASM_IA64_TYPES_H
 #define _ASM_IA64_TYPES_H
-#ifdef XEN
-#ifndef __ASSEMBLY__
-typedef unsigned long ssize_t;
-typedef unsigned long size_t;
-typedef long long loff_t;
-#endif
-#endif
 
 /*
  * This file is never included by application software unless explicitly 
requested (e.g.,
@@ -68,28 +61,6 @@
 typedef __s64 s64;
 typedef __u64 u64;
 
-#ifdef XEN
-/*
- * Below are truly Linux-specific types that should never collide with
- * any application/library that wants linux/types.h.
- */
-
-#ifdef __CHECKER__
-#define __bitwise __attribute__((bitwise))
-#else
-#define __bitwise
-#endif
-
-typedef __u16 __bitwise __le16;
-typedef __u16 __bitwise __be16;
-typedef __u32 __bitwise __le32;
-typedef __u32 __bitwise __be32;
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-typedef __u64 __bitwise __le64;
-typedef __u64 __bitwise __be64;
-#endif
-#endif
-
 #define BITS_PER_LONG 64
 
 /* DMA addresses are 64-bits wide, in general.  */
@@ -101,4 +72,8 @@
 # endif /* __KERNEL__ */
 #endif /* !__ASSEMBLY__ */
 
+#ifdef XEN
+#include <asm/xentypes.h>
+#endif
+
 #endif /* _ASM_IA64_TYPES_H */
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/asm/uaccess.h
--- a/xen/include/asm-ia64/linux-xen/asm/uaccess.h      Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/asm/uaccess.h      Thu Sep  1 17:09:27 2005
@@ -32,16 +32,15 @@
  *     David Mosberger-Tang <davidm@xxxxxxxxxx>
  */
 
-#ifdef CONFIG_VTI
-#include <asm/vmx_uaccess.h>
-#else // CONFIG_VTI
-
 #include <linux/compiler.h>
 #include <linux/errno.h>
 #include <linux/sched.h>
+#include <linux/page-flags.h>
+#include <linux/mm.h>
 
 #include <asm/intrinsics.h>
 #include <asm/pgtable.h>
+#include <asm/io.h>
 
 /*
  * For historical reasons, the following macros are grossly misnamed:
@@ -65,7 +64,6 @@
  * point inside the virtually mapped linear page table.
  */
 #ifdef XEN
-/* VT-i reserves bit 60 for the VMM; guest addresses have bit 60 = bit 59 */
 #define IS_VMM_ADDRESS(addr) ((((addr) >> 60) ^ ((addr) >> 59)) & 1)
 #define __access_ok(addr, size, segment) (!IS_VMM_ADDRESS((unsigned 
long)(addr)))
 #else
@@ -79,7 +77,8 @@
 #endif
 #define access_ok(type, addr, size)    __access_ok((addr), (size), get_fs())
 
-static inline int
+/* this function will go away soon - use access_ok() instead */
+static inline int __deprecated
 verify_area (int type, const void __user *addr, unsigned long size)
 {
        return access_ok(type, addr, size) ? 0 : -EFAULT;
@@ -353,7 +352,6 @@
        __su_ret;                                               \
 })
 
-#endif // CONFIG_VTI
 /* Generic code can't deal with the location-relative format that we use for 
compactness.  */
 #define ARCH_HAS_SORT_EXTABLE
 #define ARCH_HAS_SEARCH_EXTABLE
@@ -378,4 +376,40 @@
        return 0;
 }
 
+#ifndef XEN
+#define ARCH_HAS_TRANSLATE_MEM_PTR     1
+static __inline__ char *
+xlate_dev_mem_ptr (unsigned long p)
+{
+       struct page *page;
+       char * ptr;
+
+       page = pfn_to_page(p >> PAGE_SHIFT);
+       if (PageUncached(page))
+               ptr = (char *)p + __IA64_UNCACHED_OFFSET;
+       else
+               ptr = __va(p);
+
+       return ptr;
+}
+
+/*
+ * Convert a virtual cached kernel memory pointer to an uncached pointer
+ */
+static __inline__ char *
+xlate_dev_kmem_ptr (char * p)
+{
+       struct page *page;
+       char * ptr;
+
+       page = virt_to_page((unsigned long)p >> PAGE_SHIFT);
+       if (PageUncached(page))
+               ptr = (char *)__pa(p) + __IA64_UNCACHED_OFFSET;
+       else
+               ptr = p;
+
+       return ptr;
+}
+#endif
+
 #endif /* _ASM_IA64_UACCESS_H */
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/linux/cpumask.h
--- a/xen/include/asm-ia64/linux-xen/linux/cpumask.h    Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/linux/cpumask.h    Thu Sep  1 17:09:27 2005
@@ -10,6 +10,8 @@
  *
  * For details of cpumask_scnprintf() and cpumask_parse(),
  * see bitmap_scnprintf() and bitmap_parse() in lib/bitmap.c.
+ * For details of cpulist_scnprintf() and cpulist_parse(), see
+ * bitmap_scnlistprintf() and bitmap_parselist(), also in bitmap.c.
  *
  * The available cpumask operations are:
  *
@@ -46,6 +48,8 @@
  *
  * int cpumask_scnprintf(buf, len, mask) Format cpumask for printing
  * int cpumask_parse(ubuf, ulen, mask) Parse ascii string as cpumask
+ * int cpulist_scnprintf(buf, len, mask) Format cpumask as list for printing
+ * int cpulist_parse(buf, map)         Parse ascii string as cpulist
  *
  * for_each_cpu_mask(cpu, mask)                for-loop cpu over mask
  *
@@ -268,12 +272,26 @@
        return bitmap_scnprintf(buf, len, srcp->bits, nbits);
 }
 
-#define cpumask_parse(ubuf, ulen, src) \
-                       __cpumask_parse((ubuf), (ulen), &(src), NR_CPUS)
+#define cpumask_parse(ubuf, ulen, dst) \
+                       __cpumask_parse((ubuf), (ulen), &(dst), NR_CPUS)
 static inline int __cpumask_parse(const char __user *buf, int len,
                                        cpumask_t *dstp, int nbits)
 {
        return bitmap_parse(buf, len, dstp->bits, nbits);
+}
+
+#define cpulist_scnprintf(buf, len, src) \
+                       __cpulist_scnprintf((buf), (len), &(src), NR_CPUS)
+static inline int __cpulist_scnprintf(char *buf, int len,
+                                       const cpumask_t *srcp, int nbits)
+{
+       return bitmap_scnlistprintf(buf, len, srcp->bits, nbits);
+}
+
+#define cpulist_parse(buf, dst) __cpulist_parse((buf), &(dst), NR_CPUS)
+static inline int __cpulist_parse(const char *buf, cpumask_t *dstp, int nbits)
+{
+       return bitmap_parselist(buf, dstp->bits, nbits);
 }
 
 #if NR_CPUS > 1
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/linux/hardirq.h
--- a/xen/include/asm-ia64/linux-xen/linux/hardirq.h    Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/linux/hardirq.h    Thu Sep  1 17:09:27 2005
@@ -2,6 +2,7 @@
 #define LINUX_HARDIRQ_H
 
 #include <linux/config.h>
+#include <linux/preempt.h>
 #include <linux/smp_lock.h>
 #include <asm/hardirq.h>
 #include <asm/system.h>
@@ -43,12 +44,18 @@
 #define __IRQ_MASK(x)  ((1UL << (x))-1)
 
 #define PREEMPT_MASK   (__IRQ_MASK(PREEMPT_BITS) << PREEMPT_SHIFT)
+#define SOFTIRQ_MASK   (__IRQ_MASK(SOFTIRQ_BITS) << SOFTIRQ_SHIFT)
 #define HARDIRQ_MASK   (__IRQ_MASK(HARDIRQ_BITS) << HARDIRQ_SHIFT)
-#define SOFTIRQ_MASK   (__IRQ_MASK(SOFTIRQ_BITS) << SOFTIRQ_SHIFT)
 
 #define PREEMPT_OFFSET (1UL << PREEMPT_SHIFT)
 #define SOFTIRQ_OFFSET (1UL << SOFTIRQ_SHIFT)
 #define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT)
+
+#if PREEMPT_ACTIVE < (1 << (HARDIRQ_SHIFT + HARDIRQ_BITS))
+#ifndef XEN
+#error PREEMPT_ACTIVE is too low!
+#endif
+#endif
 
 #define hardirq_count()        (preempt_count() & HARDIRQ_MASK)
 #define softirq_count()        (preempt_count() & SOFTIRQ_MASK)
@@ -60,10 +67,10 @@
  */
 #define in_irq()               (hardirq_count())
 #define in_softirq()           (softirq_count())
-#ifndef XEN
+#ifdef XEN
+#define in_interrupt()         0               // FIXME SMP LATER
+#else
 #define in_interrupt()         (irq_count())
-#else
-#define in_interrupt()         0               // FIXME LATER
 #endif
 
 #if defined(CONFIG_PREEMPT) && !defined(CONFIG_PREEMPT_BKL)
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/linux/interrupt.h
--- a/xen/include/asm-ia64/linux-xen/linux/interrupt.h  Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/linux-xen/linux/interrupt.h  Thu Sep  1 17:09:27 2005
@@ -123,7 +123,9 @@
 };
 
 asmlinkage void do_softirq(void);
-//extern void open_softirq(int nr, void (*action)(struct softirq_action*), 
void *data);
+#ifndef XEN
+extern void open_softirq(int nr, void (*action)(struct softirq_action*), void 
*data);
+#endif
 extern void softirq_init(void);
 #define __raise_softirq_irqoff(nr) do { local_softirq_pending() |= 1UL << 
(nr); } while (0)
 extern void FASTCALL(raise_softirq_irqoff(unsigned int nr));
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/xenprocessor.h
--- a/xen/include/asm-ia64/xenprocessor.h       Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/xenprocessor.h       Thu Sep  1 17:09:27 2005
@@ -213,4 +213,20 @@
         ret;                            \
 })
 
+typedef union {
+       struct {
+               __u64 kr0;
+               __u64 kr1;
+               __u64 kr2;
+               __u64 kr3;
+               __u64 kr4;
+               __u64 kr5;
+               __u64 kr6;
+               __u64 kr7;
+       };
+       __u64 _kr[8];
+} cpu_kr_ia64_t;
+
+DECLARE_PER_CPU(cpu_kr_ia64_t, cpu_kr);
+
 #endif // _ASM_IA64_XENPROCESSOR_H
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/xensystem.h
--- a/xen/include/asm-ia64/xensystem.h  Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/xensystem.h  Thu Sep  1 17:09:27 2005
@@ -22,7 +22,9 @@
 #endif // CONFIG_VTI
 
 #define XEN_START_ADDR          0xf000000000000000
+#undef KERNEL_START
 #define KERNEL_START            0xf000000004000000
+#undef PERCPU_ADDR
 #define PERCPU_ADDR             0xf100000000000000-PERCPU_PAGE_SIZE
 #define SHAREDINFO_ADDR                 0xf100000000000000
 #define VHPT_ADDR               0xf200000000000000
@@ -31,8 +33,10 @@
 
 #ifndef __ASSEMBLY__
 
+#undef IA64_HAS_EXTRA_STATE
 #define IA64_HAS_EXTRA_STATE(t) 0
 
+#undef __switch_to
 #ifdef CONFIG_VTI
 extern struct task_struct *vmx_ia64_switch_to (void *next_task);
 #define __switch_to(prev,next,last) do {       \
diff -r 23217792aa3b -r d34925e4144b xen/arch/ia64/linux-xen/hpsim_ssc.h
--- /dev/null   Wed Aug 31 23:21:24 2005
+++ b/xen/arch/ia64/linux-xen/hpsim_ssc.h       Thu Sep  1 17:09:27 2005
@@ -0,0 +1,55 @@
+/*
+ * Platform dependent support for HP simulator.
+ *
+ * Copyright (C) 1998, 1999 Hewlett-Packard Co
+ * Copyright (C) 1998, 1999 David Mosberger-Tang <davidm@xxxxxxxxxx>
+ * Copyright (C) 1999 Vijay Chander <vijay@xxxxxxxxxxxx>
+ */
+#ifndef _IA64_PLATFORM_HPSIM_SSC_H
+#define _IA64_PLATFORM_HPSIM_SSC_H
+
+/* Simulator system calls: */
+
+#define SSC_CONSOLE_INIT               20
+#define SSC_GETCHAR                    21
+#define SSC_PUTCHAR                    31
+#define SSC_CONNECT_INTERRUPT          58
+#define SSC_GENERATE_INTERRUPT         59
+#define SSC_SET_PERIODIC_INTERRUPT     60
+#define SSC_GET_RTC                    65
+#define SSC_EXIT                       66
+#define SSC_LOAD_SYMBOLS               69
+#define SSC_GET_TOD                    74
+#define SSC_CTL_TRACE                  76
+
+#define SSC_NETDEV_PROBE               100
+#define SSC_NETDEV_SEND                        101
+#define SSC_NETDEV_RECV                        102
+#define SSC_NETDEV_ATTACH              103
+#define SSC_NETDEV_DETACH              104
+
+/*
+ * Simulator system call.
+ */
+extern long ia64_ssc (long arg0, long arg1, long arg2, long arg3, int nr);
+
+#ifdef XEN
+/* Note: These are declared in linux/arch/ia64/hp/sim/simscsi.c but belong
+ * in linux/include/asm-ia64/hpsim_ssc.h, hence their addition here */
+#define SSC_OPEN                       50
+#define SSC_CLOSE                      51
+#define SSC_READ                       52
+#define SSC_WRITE                      53
+#define SSC_GET_COMPLETION             54
+#define SSC_WAIT_COMPLETION            55
+
+#define SSC_WRITE_ACCESS               2
+#define SSC_READ_ACCESS                        1
+
+struct ssc_disk_req {
+       unsigned long addr;
+       unsigned long len;
+};
+#endif
+
+#endif /* _IA64_PLATFORM_HPSIM_SSC_H */
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/xengcc_intrin.h
--- /dev/null   Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/xengcc_intrin.h      Thu Sep  1 17:09:27 2005
@@ -0,0 +1,59 @@
+#ifndef _ASM_IA64_XENGCC_INTRIN_H
+#define _ASM_IA64_XENGCC_INTRIN_H
+/*
+ * Flushrs instruction stream.
+ */
+#define ia64_flushrs() asm volatile ("flushrs;;":::"memory")
+
+#define ia64_loadrs() asm volatile ("loadrs;;":::"memory")
+
+#define ia64_get_rsc()                          \
+({                                  \
+    unsigned long val;                     \
+    asm volatile ("mov %0=ar.rsc;;" : "=r"(val) :: "memory");  \
+    val;                               \
+})
+
+#define ia64_set_rsc(val)                       \
+    asm volatile ("mov ar.rsc=%0;;" :: "r"(val) : "memory")
+
+#define ia64_get_bspstore()     \
+({                                  \
+    unsigned long val;                     \
+    asm volatile ("mov %0=ar.bspstore;;" : "=r"(val) :: "memory");  \
+    val;                               \
+})
+
+#define ia64_set_bspstore(val)                       \
+    asm volatile ("mov ar.bspstore=%0;;" :: "r"(val) : "memory")
+
+#define ia64_get_rnat()     \
+({                                  \
+    unsigned long val;                     \
+    asm volatile ("mov %0=ar.rnat;" : "=r"(val) :: "memory");  \
+    val;                               \
+})
+
+#define ia64_set_rnat(val)                       \
+    asm volatile ("mov ar.rnat=%0;;" :: "r"(val) : "memory")
+
+#define ia64_ttag(addr)                                                        
\
+({                                                                             
\
+       __u64 ia64_intri_res;                                                   
\
+       asm volatile ("ttag %0=%1" : "=r"(ia64_intri_res) : "r" (addr));        
\
+       ia64_intri_res;                                                         
\
+})
+
+#define ia64_get_dcr()                          \
+({                                      \
+    __u64 result;                               \
+    asm volatile ("mov %0=cr.dcr" : "=r"(result) : );           \
+    result;                                 \
+})
+
+#define ia64_set_dcr(val)                           \
+({                                      \
+    asm volatile ("mov cr.dcr=%0" :: "r"(val) );            \
+})
+
+#endif /* _ASM_IA64_XENGCC_INTRIN_H */
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/xenia64regs.h
--- /dev/null   Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/xenia64regs.h        Thu Sep  1 17:09:27 2005
@@ -0,0 +1,31 @@
+#ifndef _ASM_IA64_XENIA64REGS_H
+#define _ASM_IA64_XENIA64REGS_H
+
+#define IA64_REG_CR_DCR   0
+#define IA64_REG_CR_ITM   1
+#define IA64_REG_CR_IVA   2
+#define IA64_REG_CR_PTA   8
+#define IA64_REG_CR_IPSR  16
+#define IA64_REG_CR_ISR   17
+#define IA64_REG_CR_IIP   19
+#define IA64_REG_CR_IFA   20
+#define IA64_REG_CR_ITIR  21
+#define IA64_REG_CR_IIPA  22
+#define IA64_REG_CR_IFS   23
+#define IA64_REG_CR_IIM   24
+#define IA64_REG_CR_IHA   25
+#define IA64_REG_CR_LID   64
+#define IA64_REG_CR_IVR   65
+#define IA64_REG_CR_TPR   66
+#define IA64_REG_CR_EOI   67
+#define IA64_REG_CR_IRR0  68
+#define IA64_REG_CR_IRR1  69
+#define IA64_REG_CR_IRR2  70
+#define IA64_REG_CR_IRR3  71
+#define IA64_REG_CR_ITV   72
+#define IA64_REG_CR_PMV   73
+#define IA64_REG_CR_CMCV  74
+#define IA64_REG_CR_LRR0  80
+#define IA64_REG_CR_LRR1  81
+
+#endif /* _ASM_IA64_XENIA64REGS_H */
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/xenkregs.h
--- /dev/null   Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/xenkregs.h   Thu Sep  1 17:09:27 2005
@@ -0,0 +1,37 @@
+#ifndef _ASM_IA64_XENKREGS_H
+#define _ASM_IA64_XENKREGS_H
+
+/*
+ * Translation registers:
+ */
+#define IA64_TR_SHARED_INFO    3       /* dtr3: page shared with domain */
+#define        IA64_TR_VHPT            4       /* dtr4: vhpt */
+#define IA64_TR_ARCH_INFO      5
+
+#ifdef CONFIG_VTI
+#define IA64_TR_VHPT_IN_DOM    5       /* dtr5: Double mapping for vhpt table 
in domain space */
+#define IA64_TR_XEN_IN_DOM     6       /* itr6, dtr6: Double mapping for xen 
image in domain space */
+#define IA64_TR_RR7_SWITCH_STUB        7       /* dtr7: mapping for rr7 switch 
stub */
+#define IA64_TEMP_PHYSICAL     8       /* itr8, dtr8: temp mapping for guest 
physical memory 256M */
+#endif // CONFIG_VTI
+
+/* Processor status register bits: */
+#define IA64_PSR_VM_BIT                46
+#define IA64_PSR_VM    (__IA64_UL(1) << IA64_PSR_VM_BIT)
+
+/* Interruption Function State */
+#define IA64_IFS_V_BIT         63
+#define IA64_IFS_V     (__IA64_UL(1) << IA64_IFS_V_BIT)
+
+/* Page Table Address */
+#define IA64_PTA_VE_BIT 0
+#define IA64_PTA_SIZE_BIT 2
+#define IA64_PTA_VF_BIT 8
+#define IA64_PTA_BASE_BIT 15
+
+#define IA64_PTA_VE     (__IA64_UL(1) << IA64_PTA_VE_BIT)
+#define IA64_PTA_SIZE   (__IA64_UL(0x3f) << IA64_PTA_SIZE_BIT)
+#define IA64_PTA_VF     (__IA64_UL(1) << IA64_PTA_VF_BIT)
+#define IA64_PTA_BASE   (__IA64_UL(0) - ((__IA64_UL(1) << IA64_PTA_BASE_BIT)))
+
+#endif /* _ASM_IA64_XENKREGS_H */
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/xenpage.h
--- /dev/null   Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/xenpage.h    Thu Sep  1 17:09:27 2005
@@ -0,0 +1,42 @@
+#ifndef _ASM_IA64_XENPAGE_H
+#define _ASM_IA64_XENPAGE_H
+
+#ifdef CONFIG_DISCONTIGMEM
+#error "xenpage.h: page macros need to be defined for CONFIG_DISCONTIGMEM"
+#endif
+
+#undef pfn_valid
+#undef page_to_pfn
+#undef pfn_to_page
+# define pfn_valid(pfn)                (0)
+# define page_to_pfn(_page)    ((unsigned long) ((_page) - frame_table))
+# define pfn_to_page(_pfn)     (frame_table + (_pfn))
+
+#undef page_to_phys
+#undef virt_to_page
+#define page_to_phys(page)     (page_to_pfn(page) << PAGE_SHIFT)
+#define virt_to_page(kaddr)    pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
+
+#define page_to_virt(_page)    phys_to_virt(page_to_phys(_page))
+#define phys_to_page(kaddr)    pfn_to_page(((kaddr) >> PAGE_SHIFT))
+
+#ifndef __ASSEMBLY__
+typedef union xen_va {
+       struct {
+               unsigned long off : 60;
+               unsigned long reg : 4;
+       } f;
+       unsigned long l;
+       void *p;
+} xen_va;
+#endif
+
+#undef __pa
+#undef __va
+#define __pa(x)                ({xen_va _v; _v.l = (long) (x); _v.f.reg = 0; 
_v.l;})
+#define __va(x)                ({xen_va _v; _v.l = (long) (x); _v.f.reg = -1; 
_v.p;})
+
+#undef PAGE_OFFSET
+#define PAGE_OFFSET    __IA64_UL_CONST(0xf000000000000000)
+
+#endif /* _ASM_IA64_XENPAGE_H */
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/xenspinlock.h
--- /dev/null   Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/xenspinlock.h        Thu Sep  1 17:09:27 2005
@@ -0,0 +1,30 @@
+#ifndef _ASM_IA64_XENSPINLOCK_H
+#define _ASM_IA64_XENSPINLOCK_H
+
+/*
+ * spin_[un]lock_recursive(): Use these forms when the lock can (safely!) be
+ * reentered recursively on the same CPU. All critical regions that may form
+ * part of a recursively-nested set must be protected by these forms. If there
+ * are any critical regions that cannot form part of such a set, they can use
+ * standard spin_[un]lock().
+ */
+#define _raw_spin_lock_recursive(_lock)            \
+    do {                                           \
+        int cpu = smp_processor_id();              \
+        if ( likely((_lock)->recurse_cpu != cpu) ) \
+        {                                          \
+            spin_lock(_lock);                      \
+            (_lock)->recurse_cpu = cpu;            \
+        }                                          \
+        (_lock)->recurse_cnt++;                    \
+    } while ( 0 )
+
+#define _raw_spin_unlock_recursive(_lock)          \
+    do {                                           \
+        if ( likely(--(_lock)->recurse_cnt == 0) ) \
+        {                                          \
+            (_lock)->recurse_cpu = -1;             \
+            spin_unlock(_lock);                    \
+        }                                          \
+    } while ( 0 )
+#endif /*  _ASM_IA64_XENSPINLOCK_H */
diff -r 23217792aa3b -r d34925e4144b xen/include/asm-ia64/xentypes.h
--- /dev/null   Wed Aug 31 23:21:24 2005
+++ b/xen/include/asm-ia64/xentypes.h   Thu Sep  1 17:09:27 2005
@@ -0,0 +1,29 @@
+#ifndef _ASM_IA64_XENTYPES_H
+#define _ASM_IA64_XENTYPES_H
+
+#ifndef __ASSEMBLY__
+typedef unsigned long ssize_t;
+typedef unsigned long size_t;
+typedef long long loff_t;
+
+#ifdef __KERNEL__
+/* these lines taken from linux/types.h.  they belong in xen/types.h */
+#ifdef __CHECKER__
+#define __bitwise __attribute__((bitwise))
+#else
+#define __bitwise
+#endif
+
+typedef __u16 __bitwise __le16;
+typedef __u16 __bitwise __be16;
+typedef __u32 __bitwise __le32;
+typedef __u32 __bitwise __be32;
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+typedef __u64 __bitwise __le64;
+typedef __u64 __bitwise __be64;
+#endif
+
+# endif /* __KERNEL__ */
+#endif /* !__ASSEMBLY__ */
+
+#endif /* _ASM_IA64_XENTYPES_H */
diff -r 23217792aa3b -r d34925e4144b 
xen/include/asm-ia64/linux-xen/asm/hpsim_ssc.h
--- a/xen/include/asm-ia64/linux-xen/asm/hpsim_ssc.h    Wed Aug 31 23:21:24 2005
+++ /dev/null   Thu Sep  1 17:09:27 2005
@@ -1,55 +0,0 @@
-/*
- * Platform dependent support for HP simulator.
- *
- * Copyright (C) 1998, 1999 Hewlett-Packard Co
- * Copyright (C) 1998, 1999 David Mosberger-Tang <davidm@xxxxxxxxxx>
- * Copyright (C) 1999 Vijay Chander <vijay@xxxxxxxxxxxx>
- */
-#ifndef _IA64_PLATFORM_HPSIM_SSC_H
-#define _IA64_PLATFORM_HPSIM_SSC_H
-
-/* Simulator system calls: */
-
-#define SSC_CONSOLE_INIT               20
-#define SSC_GETCHAR                    21
-#define SSC_PUTCHAR                    31
-#define SSC_CONNECT_INTERRUPT          58
-#define SSC_GENERATE_INTERRUPT         59
-#define SSC_SET_PERIODIC_INTERRUPT     60
-#define SSC_GET_RTC                    65
-#define SSC_EXIT                       66
-#define SSC_LOAD_SYMBOLS               69
-#define SSC_GET_TOD                    74
-#define SSC_CTL_TRACE                  76
-
-#define SSC_NETDEV_PROBE               100
-#define SSC_NETDEV_SEND                        101
-#define SSC_NETDEV_RECV                        102
-#define SSC_NETDEV_ATTACH              103
-#define SSC_NETDEV_DETACH              104
-
-/*
- * Simulator system call.
- */
-extern long ia64_ssc (long arg0, long arg1, long arg2, long arg3, int nr);
-
-#ifdef XEN
-/* Note: These are declared in linux/arch/ia64/hp/sim/simscsi.c but belong
- * in linux/include/asm-ia64/hpsim_ssc.h, hence their addition here */
-#define SSC_OPEN                       50
-#define SSC_CLOSE                      51
-#define SSC_READ                       52
-#define SSC_WRITE                      53
-#define SSC_GET_COMPLETION             54
-#define SSC_WAIT_COMPLETION            55
-
-#define SSC_WRITE_ACCESS               2
-#define SSC_READ_ACCESS                        1
-
-struct ssc_disk_req {
-       unsigned long addr;
-       unsigned long len;
-};
-#endif
-
-#endif /* _IA64_PLATFORM_HPSIM_SSC_H */

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Stil more cleanup and moving to 2.6.13 base, Xen patchbot -unstable <=