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

[Xen-changelog] Changes so that Xen can be compiled with gcc 4.0.2: (by Tristan Gingold)



# HG changeset patch
# User djm@xxxxxxxxxxxxxxx
# Node ID 40fc727dd1c0095d42beaba7b8c2930f907ae58d
# Parent  36cea432bbed8f1405664835e8062646b6a96322
Changes so that Xen can be compiled with gcc 4.0.2: (by Tristan Gingold)
* functions must be declared before being called.
* a cast or a conditionnal expression is not an lvalue.
* a function cannot be declared static and redeclared extern (or reverse).
* gcc 4.0.2 missed a range optimization (ia64_setreg_unknown_kr).
* ia64_ksyms is not used (removed from Makefile).
* (added by Dan M: since now modified, move gfp.h from linux to linux-xen)

diff -r 36cea432bbed -r 40fc727dd1c0 xen/arch/ia64/Makefile
--- a/xen/arch/ia64/Makefile    Wed Nov 16 22:59:41 2005
+++ b/xen/arch/ia64/Makefile    Wed Nov 16 23:45:36 2005
@@ -2,7 +2,7 @@
 
 VPATH = xen vmx linux linux-xen
 
-OBJS = xensetup.o setup.o time.o irq.o ia64_ksyms.o process.o smp.o \
+OBJS = xensetup.o setup.o time.o irq.o process.o smp.o \
        xenmisc.o acpi.o hypercall.o \
        machvec.o dom0_ops.o domain.o hpsimserial.o pcdp.o \
        idle0_task.o pal.o hpsim.o efi.o efi_stub.o ivt.o mm_contig.o \
@@ -10,7 +10,7 @@
        extable.o linuxextable.o sort.o xenirq.o xentime.o \
        regionreg.o entry.o unaligned.o privop.o vcpu.o \
        irq_ia64.o irq_lsapic.o vhpt.o xenasm.o hyperprivop.o dom_fw.o \
-       grant_table.o sn_console.o
+       grant_table.o sn_console.o # ia64_ksyms.o 
 
 OBJS += vmx_init.o vmx_virt.o vmx_vcpu.o vmx_process.o vmx_vsa.o vmx_ivt.o\
        vmx_phy_mode.o vmx_utility.o vmx_interrupt.o vmx_entry.o vmmu.o \
@@ -45,7 +45,7 @@
 
 asm-xsi-offsets.s: asm-xsi-offsets.c 
        $(CC) $(CFLAGS) -S -o $@ $<
-       
+
 $(BASEDIR)/include/asm-ia64/asm-xsi-offsets.h: asm-xsi-offsets.s
        @(set -e; \
          echo "/*"; \
diff -r 36cea432bbed -r 40fc727dd1c0 xen/arch/ia64/vmx/mmio.c
--- a/xen/arch/ia64/vmx/mmio.c  Wed Nov 16 22:59:41 2005
+++ b/xen/arch/ia64/vmx/mmio.c  Wed Nov 16 23:45:36 2005
@@ -49,6 +49,8 @@
 #define PIB_OFST_INTA           0x1E0000
 #define PIB_OFST_XTP            0x1E0008
 
+static int write_ipi (VCPU *vcpu, uint64_t addr, uint64_t value);
+
 static void pib_write(VCPU *vcpu, void *src, uint64_t pib_off, size_t s, int 
ma)
 {
     switch (pib_off) {
diff -r 36cea432bbed -r 40fc727dd1c0 xen/arch/ia64/vmx/vmmu.c
--- a/xen/arch/ia64/vmx/vmmu.c  Wed Nov 16 22:59:41 2005
+++ b/xen/arch/ia64/vmx/vmmu.c  Wed Nov 16 23:45:36 2005
@@ -157,11 +157,13 @@
     printk("Allocate domain vhpt at 0x%lx\n", (u64)vbase);
     memset(vbase, 0, VCPU_TLB_SIZE);
     vcur = (void*)((u64)vbase + VCPU_TLB_SIZE);
-    vhpt = --((thash_cb_t*)vcur);
+    vcur -= sizeof (thash_cb_t);
+    vhpt = vcur;
     vhpt->ht = THASH_VHPT;
     vhpt->vcpu = d;
     vhpt->hash_func = machine_thash;
-    vs = --((vhpt_special *)vcur);
+    vs -= sizeof (vhpt_special);
+    vs = vcur;
 
     /* Setup guest pta */
     pta_value.val = 0;
@@ -199,10 +201,12 @@
     printk("Allocate domain tlb at 0x%lx\n", (u64)vbase);
     memset(vbase, 0, VCPU_TLB_SIZE);
     vcur = (void*)((u64)vbase + VCPU_TLB_SIZE);
-    tlb = --((thash_cb_t*)vcur);
+    vcur -= sizeof (thash_cb_t);
+    tlb = vcur;
     tlb->ht = THASH_TLB;
     tlb->vcpu = d;
-    ts = --((tlb_special_t *)vcur);
+    vcur -= sizeof (tlb_special_t);
+    ts = vcur;
     tlb->ts = ts;
     tlb->ts->vhpt = init_domain_vhpt(d);
     tlb->hash_func = machine_thash;
diff -r 36cea432bbed -r 40fc727dd1c0 xen/arch/ia64/xen/vcpu.c
--- a/xen/arch/ia64/xen/vcpu.c  Wed Nov 16 22:59:41 2005
+++ b/xen/arch/ia64/xen/vcpu.c  Wed Nov 16 23:45:36 2005
@@ -146,6 +146,9 @@
        ia64_set_kr(6, VCPU(vcpu, krs[6]));
        ia64_set_kr(7, VCPU(vcpu, krs[7]));
 }
+
+/* GCC 4.0.2 seems not to be able to suppress this call!.  */
+#define ia64_setreg_unknown_kr() return IA64_ILLOP_FAULT
 
 IA64FAULT vcpu_set_ar(VCPU *vcpu, UINT64 reg, UINT64 val)
 {
diff -r 36cea432bbed -r 40fc727dd1c0 
xen/include/asm-ia64/linux-xen/linux/README.origin
--- a/xen/include/asm-ia64/linux-xen/linux/README.origin        Wed Nov 16 
22:59:41 2005
+++ b/xen/include/asm-ia64/linux-xen/linux/README.origin        Wed Nov 16 
23:45:36 2005
@@ -6,5 +6,6 @@
 # easily updated to future versions of the corresponding Linux files.
 
 cpumask.h              -> linux/include/linux/cpumask.h
+gfp.h                  -> linux/include/linux/gfp.h
 hardirq.h              -> linux/include/linux/hardirq.h
 interrupt.h            -> linux/include/linux/interrupt.h
diff -r 36cea432bbed -r 40fc727dd1c0 
xen/include/asm-ia64/linux-xen/linux/interrupt.h
--- a/xen/include/asm-ia64/linux-xen/linux/interrupt.h  Wed Nov 16 22:59:41 2005
+++ b/xen/include/asm-ia64/linux-xen/linux/interrupt.h  Wed Nov 16 23:45:36 2005
@@ -131,7 +131,9 @@
 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));
+#ifndef XEN
 extern void FASTCALL(raise_softirq(unsigned int nr));
+#endif
 
 
 /* Tasklets --- multithreaded analogue of BHs.
diff -r 36cea432bbed -r 40fc727dd1c0 xen/include/asm-ia64/linux/README.origin
--- a/xen/include/asm-ia64/linux/README.origin  Wed Nov 16 22:59:41 2005
+++ b/xen/include/asm-ia64/linux/README.origin  Wed Nov 16 23:45:36 2005
@@ -10,7 +10,6 @@
 dma-mapping.h          ->linux/include/linux/dma-mapping.h
 efi.h                  ->linux/include/linux/efi.h
 err.h                  ->linux/include/linux/err.h
-gfp.h                  ->linux/include/linux/gfp.h
 initrd.h               ->linux/include/linux/initrd.h
 jiffies.h              ->linux/include/linux/jiffies.h
 kmalloc_sizes.h                ->linux/include/linux/kmalloc_sizes.h
diff -r 36cea432bbed -r 40fc727dd1c0 xen/include/asm-ia64/mm.h
--- a/xen/include/asm-ia64/mm.h Wed Nov 16 22:59:41 2005
+++ b/xen/include/asm-ia64/mm.h Wed Nov 16 23:45:36 2005
@@ -3,7 +3,7 @@
 
 #include <xen/config.h>
 #ifdef LINUX_2_6
-#include <xen/gfp.h>
+#include <linux/gfp.h>
 #endif
 #include <xen/list.h>
 #include <xen/spinlock.h>
diff -r 36cea432bbed -r 40fc727dd1c0 xen/include/asm-ia64/vmmu.h
--- a/xen/include/asm-ia64/vmmu.h       Wed Nov 16 22:59:41 2005
+++ b/xen/include/asm-ia64/vmmu.h       Wed Nov 16 23:45:36 2005
@@ -222,7 +222,10 @@
 #define ITR(hcb,id)             ((hcb)->ts->itr[id])
 #define DTR(hcb,id)             ((hcb)->ts->dtr[id])
 #define INVALIDATE_HASH(hcb,hash)           {   \
-           INVALID_ENTRY(hcb, hash) = 1;        \
+           if ((hcb)->ht==THASH_TLB)            \
+             INVALID_TLB(hash) = 1;             \
+           else                                 \
+             INVALID_VHPT(hash) = 1;            \
            hash->next = NULL; }
 
 #define PURGABLE_ENTRY(hcb,en)  1
diff -r 36cea432bbed -r 40fc727dd1c0 xen/include/asm-ia64/vmx_vcpu.h
--- a/xen/include/asm-ia64/vmx_vcpu.h   Wed Nov 16 22:59:41 2005
+++ b/xen/include/asm-ia64/vmx_vcpu.h   Wed Nov 16 23:45:36 2005
@@ -71,7 +71,9 @@
 extern thash_cb_t *vmx_vcpu_get_vhpt(VCPU *vcpu);
 extern ia64_rr vmx_vcpu_rr(VCPU *vcpu,UINT64 vadr);
 extern IA64FAULT vmx_vcpu_set_rr(VCPU *vcpu, UINT64 reg, UINT64 val);
+#if 0
 extern IA64FAULT vmx_vcpu_get_rr(VCPU *vcpu, UINT64 reg, UINT64 *pval);
+#endif
 extern IA64FAULT vmx_vcpu_get_pkr(VCPU *vcpu, UINT64 reg, UINT64 *pval);
 IA64FAULT vmx_vcpu_set_pkr(VCPU *vcpu, UINT64 reg, UINT64 val);
 extern IA64FAULT vmx_vcpu_itc_i(VCPU *vcpu, UINT64 pte, UINT64 itir, UINT64 
ifa);
diff -r 36cea432bbed -r 40fc727dd1c0 xen/include/asm-ia64/linux-xen/linux/gfp.h
--- /dev/null   Wed Nov 16 22:59:41 2005
+++ b/xen/include/asm-ia64/linux-xen/linux/gfp.h        Wed Nov 16 23:45:36 2005
@@ -0,0 +1,145 @@
+#ifndef __LINUX_GFP_H
+#define __LINUX_GFP_H
+
+#ifdef XEN
+#include <asm/bitops.h>
+#endif
+#include <linux/mmzone.h>
+#include <linux/stddef.h>
+#include <linux/linkage.h>
+#include <linux/config.h>
+
+struct vm_area_struct;
+
+/*
+ * GFP bitmasks..
+ */
+/* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low two bits) */
+#define __GFP_DMA      0x01u
+#define __GFP_HIGHMEM  0x02u
+
+/*
+ * Action modifiers - doesn't change the zoning
+ *
+ * __GFP_REPEAT: Try hard to allocate the memory, but the allocation attempt
+ * _might_ fail.  This depends upon the particular VM implementation.
+ *
+ * __GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller
+ * cannot handle allocation failures.
+ *
+ * __GFP_NORETRY: The VM implementation must not retry indefinitely.
+ */
+#define __GFP_WAIT     0x10u   /* Can wait and reschedule? */
+#define __GFP_HIGH     0x20u   /* Should access emergency pools? */
+#define __GFP_IO       0x40u   /* Can start physical IO? */
+#define __GFP_FS       0x80u   /* Can call down to low-level FS? */
+#define __GFP_COLD     0x100u  /* Cache-cold page required */
+#define __GFP_NOWARN   0x200u  /* Suppress page allocation failure warning */
+#define __GFP_REPEAT   0x400u  /* Retry the allocation.  Might fail */
+#define __GFP_NOFAIL   0x800u  /* Retry for ever.  Cannot fail */
+#define __GFP_NORETRY  0x1000u /* Do not retry.  Might fail */
+#define __GFP_NO_GROW  0x2000u /* Slab internal usage */
+#define __GFP_COMP     0x4000u /* Add compound page metadata */
+#define __GFP_ZERO     0x8000u /* Return zeroed page on success */
+#define __GFP_NOMEMALLOC 0x10000u /* Don't use emergency reserves */
+#define __GFP_NORECLAIM  0x20000u /* No realy zone reclaim during allocation */
+
+#define __GFP_BITS_SHIFT 20    /* Room for 20 __GFP_FOO bits */
+#define __GFP_BITS_MASK ((1 << __GFP_BITS_SHIFT) - 1)
+
+/* if you forget to add the bitmask here kernel will crash, period */
+#define GFP_LEVEL_MASK (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_FS| \
+                       __GFP_COLD|__GFP_NOWARN|__GFP_REPEAT| \
+                       __GFP_NOFAIL|__GFP_NORETRY|__GFP_NO_GROW|__GFP_COMP| \
+                       __GFP_NOMEMALLOC|__GFP_NORECLAIM)
+
+#define GFP_ATOMIC     (__GFP_HIGH)
+#define GFP_NOIO       (__GFP_WAIT)
+#define GFP_NOFS       (__GFP_WAIT | __GFP_IO)
+#define GFP_KERNEL     (__GFP_WAIT | __GFP_IO | __GFP_FS)
+#define GFP_USER       (__GFP_WAIT | __GFP_IO | __GFP_FS)
+#define GFP_HIGHUSER   (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HIGHMEM)
+
+/* Flag - indicates that the buffer will be suitable for DMA.  Ignored on some
+   platforms, used as appropriate on others */
+
+#define GFP_DMA                __GFP_DMA
+
+
+/*
+ * There is only one page-allocator function, and two main namespaces to
+ * it. The alloc_page*() variants return 'struct page *' and as such
+ * can allocate highmem pages, the *get*page*() variants return
+ * virtual kernel addresses to the allocated page(s).
+ */
+
+/*
+ * We get the zone list from the current node and the gfp_mask.
+ * This zone list contains a maximum of MAXNODES*MAX_NR_ZONES zones.
+ *
+ * For the normal case of non-DISCONTIGMEM systems the NODE_DATA() gets
+ * optimized to &contig_page_data at compile-time.
+ */
+
+#ifndef HAVE_ARCH_FREE_PAGE
+static inline void arch_free_page(struct page *page, int order) { }
+#endif
+
+extern struct page *
+FASTCALL(__alloc_pages(unsigned int, unsigned int, struct zonelist *));
+
+static inline struct page *alloc_pages_node(int nid, unsigned int __nocast 
gfp_mask,
+                                               unsigned int order)
+{
+       if (unlikely(order >= MAX_ORDER))
+               return NULL;
+
+       return __alloc_pages(gfp_mask, order,
+               NODE_DATA(nid)->node_zonelists + (gfp_mask & GFP_ZONEMASK));
+}
+
+#ifdef CONFIG_NUMA
+extern struct page *alloc_pages_current(unsigned int __nocast gfp_mask, 
unsigned order);
+
+static inline struct page *
+alloc_pages(unsigned int __nocast gfp_mask, unsigned int order)
+{
+       if (unlikely(order >= MAX_ORDER))
+               return NULL;
+
+       return alloc_pages_current(gfp_mask, order);
+}
+extern struct page *alloc_page_vma(unsigned __nocast gfp_mask,
+                       struct vm_area_struct *vma, unsigned long addr);
+#else
+#define alloc_pages(gfp_mask, order) \
+               alloc_pages_node(numa_node_id(), gfp_mask, order)
+#define alloc_page_vma(gfp_mask, vma, addr) alloc_pages(gfp_mask, 0)
+#endif
+#define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0)
+
+extern unsigned long FASTCALL(__get_free_pages(unsigned int __nocast gfp_mask, 
unsigned int order));
+extern unsigned long FASTCALL(get_zeroed_page(unsigned int __nocast gfp_mask));
+
+#define __get_free_page(gfp_mask) \
+               __get_free_pages((gfp_mask),0)
+
+#define __get_dma_pages(gfp_mask, order) \
+               __get_free_pages((gfp_mask) | GFP_DMA,(order))
+
+extern void FASTCALL(__free_pages(struct page *page, unsigned int order));
+extern void FASTCALL(free_pages(unsigned long addr, unsigned int order));
+extern void FASTCALL(free_hot_page(struct page *page));
+extern void FASTCALL(free_cold_page(struct page *page));
+
+#define __free_page(page) __free_pages((page), 0)
+#define free_page(addr) free_pages((addr),0)
+
+void page_alloc_init(void);
+#ifdef CONFIG_NUMA
+void drain_remote_pages(void);
+#else
+static inline void drain_remote_pages(void) { };
+#endif
+
+#endif /* __LINUX_GFP_H */
diff -r 36cea432bbed -r 40fc727dd1c0 xen/include/asm-ia64/linux/gfp.h
--- a/xen/include/asm-ia64/linux/gfp.h  Wed Nov 16 22:59:41 2005
+++ /dev/null   Wed Nov 16 23:45:36 2005
@@ -1,142 +0,0 @@
-#ifndef __LINUX_GFP_H
-#define __LINUX_GFP_H
-
-#include <linux/mmzone.h>
-#include <linux/stddef.h>
-#include <linux/linkage.h>
-#include <linux/config.h>
-
-struct vm_area_struct;
-
-/*
- * GFP bitmasks..
- */
-/* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low two bits) */
-#define __GFP_DMA      0x01u
-#define __GFP_HIGHMEM  0x02u
-
-/*
- * Action modifiers - doesn't change the zoning
- *
- * __GFP_REPEAT: Try hard to allocate the memory, but the allocation attempt
- * _might_ fail.  This depends upon the particular VM implementation.
- *
- * __GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller
- * cannot handle allocation failures.
- *
- * __GFP_NORETRY: The VM implementation must not retry indefinitely.
- */
-#define __GFP_WAIT     0x10u   /* Can wait and reschedule? */
-#define __GFP_HIGH     0x20u   /* Should access emergency pools? */
-#define __GFP_IO       0x40u   /* Can start physical IO? */
-#define __GFP_FS       0x80u   /* Can call down to low-level FS? */
-#define __GFP_COLD     0x100u  /* Cache-cold page required */
-#define __GFP_NOWARN   0x200u  /* Suppress page allocation failure warning */
-#define __GFP_REPEAT   0x400u  /* Retry the allocation.  Might fail */
-#define __GFP_NOFAIL   0x800u  /* Retry for ever.  Cannot fail */
-#define __GFP_NORETRY  0x1000u /* Do not retry.  Might fail */
-#define __GFP_NO_GROW  0x2000u /* Slab internal usage */
-#define __GFP_COMP     0x4000u /* Add compound page metadata */
-#define __GFP_ZERO     0x8000u /* Return zeroed page on success */
-#define __GFP_NOMEMALLOC 0x10000u /* Don't use emergency reserves */
-#define __GFP_NORECLAIM  0x20000u /* No realy zone reclaim during allocation */
-
-#define __GFP_BITS_SHIFT 20    /* Room for 20 __GFP_FOO bits */
-#define __GFP_BITS_MASK ((1 << __GFP_BITS_SHIFT) - 1)
-
-/* if you forget to add the bitmask here kernel will crash, period */
-#define GFP_LEVEL_MASK (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_FS| \
-                       __GFP_COLD|__GFP_NOWARN|__GFP_REPEAT| \
-                       __GFP_NOFAIL|__GFP_NORETRY|__GFP_NO_GROW|__GFP_COMP| \
-                       __GFP_NOMEMALLOC|__GFP_NORECLAIM)
-
-#define GFP_ATOMIC     (__GFP_HIGH)
-#define GFP_NOIO       (__GFP_WAIT)
-#define GFP_NOFS       (__GFP_WAIT | __GFP_IO)
-#define GFP_KERNEL     (__GFP_WAIT | __GFP_IO | __GFP_FS)
-#define GFP_USER       (__GFP_WAIT | __GFP_IO | __GFP_FS)
-#define GFP_HIGHUSER   (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HIGHMEM)
-
-/* Flag - indicates that the buffer will be suitable for DMA.  Ignored on some
-   platforms, used as appropriate on others */
-
-#define GFP_DMA                __GFP_DMA
-
-
-/*
- * There is only one page-allocator function, and two main namespaces to
- * it. The alloc_page*() variants return 'struct page *' and as such
- * can allocate highmem pages, the *get*page*() variants return
- * virtual kernel addresses to the allocated page(s).
- */
-
-/*
- * We get the zone list from the current node and the gfp_mask.
- * This zone list contains a maximum of MAXNODES*MAX_NR_ZONES zones.
- *
- * For the normal case of non-DISCONTIGMEM systems the NODE_DATA() gets
- * optimized to &contig_page_data at compile-time.
- */
-
-#ifndef HAVE_ARCH_FREE_PAGE
-static inline void arch_free_page(struct page *page, int order) { }
-#endif
-
-extern struct page *
-FASTCALL(__alloc_pages(unsigned int, unsigned int, struct zonelist *));
-
-static inline struct page *alloc_pages_node(int nid, unsigned int __nocast 
gfp_mask,
-                                               unsigned int order)
-{
-       if (unlikely(order >= MAX_ORDER))
-               return NULL;
-
-       return __alloc_pages(gfp_mask, order,
-               NODE_DATA(nid)->node_zonelists + (gfp_mask & GFP_ZONEMASK));
-}
-
-#ifdef CONFIG_NUMA
-extern struct page *alloc_pages_current(unsigned int __nocast gfp_mask, 
unsigned order);
-
-static inline struct page *
-alloc_pages(unsigned int __nocast gfp_mask, unsigned int order)
-{
-       if (unlikely(order >= MAX_ORDER))
-               return NULL;
-
-       return alloc_pages_current(gfp_mask, order);
-}
-extern struct page *alloc_page_vma(unsigned __nocast gfp_mask,
-                       struct vm_area_struct *vma, unsigned long addr);
-#else
-#define alloc_pages(gfp_mask, order) \
-               alloc_pages_node(numa_node_id(), gfp_mask, order)
-#define alloc_page_vma(gfp_mask, vma, addr) alloc_pages(gfp_mask, 0)
-#endif
-#define alloc_page(gfp_mask) alloc_pages(gfp_mask, 0)
-
-extern unsigned long FASTCALL(__get_free_pages(unsigned int __nocast gfp_mask, 
unsigned int order));
-extern unsigned long FASTCALL(get_zeroed_page(unsigned int __nocast gfp_mask));
-
-#define __get_free_page(gfp_mask) \
-               __get_free_pages((gfp_mask),0)
-
-#define __get_dma_pages(gfp_mask, order) \
-               __get_free_pages((gfp_mask) | GFP_DMA,(order))
-
-extern void FASTCALL(__free_pages(struct page *page, unsigned int order));
-extern void FASTCALL(free_pages(unsigned long addr, unsigned int order));
-extern void FASTCALL(free_hot_page(struct page *page));
-extern void FASTCALL(free_cold_page(struct page *page));
-
-#define __free_page(page) __free_pages((page), 0)
-#define free_page(addr) free_pages((addr),0)
-
-void page_alloc_init(void);
-#ifdef CONFIG_NUMA
-void drain_remote_pages(void);
-#else
-static inline void drain_remote_pages(void) { };
-#endif
-
-#endif /* __LINUX_GFP_H */

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


 


Rackspace

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