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-ia64-devel

[Xen-ia64-devel] PV-on-HVM driver for IPF

To: xen-ia64-devel <xen-ia64-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-ia64-devel] PV-on-HVM driver for IPF
From: DOI Tsunehisa <Doi.Tsunehisa@xxxxxxxxxxxxxx>
Date: Thu, 24 Aug 2006 22:14:11 +0900
Delivery-date: Thu, 24 Aug 2006 06:15:03 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-id: Discussion of the ia64 port of Xen <xen-ia64-devel.lists.xensource.com>
List-post: <mailto:xen-ia64-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 1.5.0.5 (Windows/20060719)
Hi all,

  I will post patches of PV-on-HVM for IPF.

  We wrote the patch under this consideration:

   * Expand hvm_op hypercall
     + Introduce HVMOP_setup_shared_info_page
       - A page allocated on HVM-guest OS is swapped original shared_info
         page with this hypercall.
       - In x86 code, original shared_info page is used after pv-on-hvm
         setup with remapping feature in arch depend HYPERVISOR_memory_op.
         But, we can't implement same feature for IPF, thus we select to
         implement with this method.
     + Introduce HVMOP_setup_gnttab_table
       - Pages allocated on HVM-guest OS is swapped original grant_table
         page frames with this hypercall.
       - Same above.
   * Change domain destroy logic
     + arch_domain_destroy() changed
       - considered for swapping shared_info page.
     + grant_table_destroy() changed
       - considered for swapping grant_frame pages.
   * Modify linux-sparse for pv-on-hvm
     + gnttab.c in linux-sparse modified at initialization
     + modify hypervisor.h for pv-on-hvm
   * Modify unmodified_drivers initialization
     + considered the different initialization with x86 code.
     + modify build rule for IPF

  This patch includes:

   * xen-hyper.patch
     - hvm_op hyprecall extension
   * xen-destroy.patch
     - domain destroy logic modification
  * linux.patch
     - linux-sparse modification
  * driver.patch
     - unmodified_drivers modification
  * build.patch
     - unmodified_drivers build rule modification

  We have tested that this patch doesn't affect dom0, domVTi without
pv-on-hvm driver attaching, and domVTi using pv-on-hvm driver works
VBD/VNIF.

Thanks,
- Tsunehisa Doi
# HG changeset patch
# User Doi.Tsunehisa@xxxxxxxxxxxxxx
# Node ID ee3c9f9b3e9f5b4ddb8999f9fc6ac0413b23f419
# Parent  3e54734e55f39419678afd1ce1a9a96669fa69ef
Expand hvm_op hypercall for PV-on-HVM/IPF

Signed-off-by: Tsunehisa Doi <Doi.Tsunehisa@xxxxxxxxxxxxxx>
Signed-off-by: Tomonari Horikoshi <t.horikoshi@xxxxxxxxxxxxxx>

diff -r 3e54734e55f3 -r ee3c9f9b3e9f xen/arch/ia64/vmx/vmx_hypercall.c
--- a/xen/arch/ia64/vmx/vmx_hypercall.c Wed Aug 23 13:26:46 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_hypercall.c Thu Aug 24 20:09:21 2006 +0900
@@ -2,6 +2,7 @@
 /*
  * vmx_hyparcall.c: handling hypercall from domain
  * Copyright (c) 2005, Intel Corporation.
+ * Copyright (c) 2006, Fujitsu Limited.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms and conditions of the GNU General Public License,
@@ -17,6 +18,8 @@
  * Place - Suite 330, Boston, MA 02111-1307 USA.
  *
  *  Xuefei Xu (Anthony Xu) (Anthony.xu@xxxxxxxxx)
+ *  Tsunehisa Doi (Doi.Tsunehisa@xxxxxxxxxxxxxx)
+ *  Tomonari Horikoshi (t.horikoshi@xxxxxxxxxxxxxx)
  */
 
 #include <xen/config.h>
@@ -34,6 +37,79 @@
 #include <public/version.h>
 #include <asm/dom_fw.h>
 #include <xen/domain.h>
+#include <xen/compile.h>
+#include <xen/event.h>
+
+static int
+vmx_gnttab_setup_table(unsigned long frame_pa, unsigned long nr_frames)
+{
+    struct domain *d = current->domain;
+    int rc = 0, i;
+    unsigned long o_grant_shared, pgaddr;
+
+    if (nr_frames != NR_GRANT_FRAMES) {
+        return -1;
+    }
+    o_grant_shared = (unsigned long)d->grant_table->shared;
+    d->grant_table->shared = (struct grant_entry *)domain_mpa_to_imva(d, 
frame_pa);
+
+    /* Copy existing grant table shared into new page */
+    if (o_grant_shared) {
+        memcpy((void*)d->grant_table->shared,
+                (void*)o_grant_shared, PAGE_SIZE * nr_frames);
+        /* If original page belongs to xen heap, then relinguish back
+         * to xen heap. Or else, leave to domain itself to decide.
+         */
+        for (i = 0; i < NR_GRANT_FRAMES; i++) {
+            pgaddr = o_grant_shared + PAGE_SIZE * i;
+            if (likely(IS_XEN_HEAP_FRAME(virt_to_page(pgaddr)))) {
+                free_domheap_page(virt_to_page(pgaddr));
+                free_xenheap_page((void *)pgaddr);
+            }
+            else {
+                put_page(virt_to_page(pgaddr));
+            }
+        }
+    }
+    else {
+        memset(d->grant_table->shared, 0, PAGE_SIZE * nr_frames);
+    }
+    return rc;
+}
+
+static int
+vmx_setup_shared_info_page(unsigned long gpa)
+{
+    VCPU *vcpu = current;
+    struct domain *d = vcpu->domain;
+    unsigned long o_info;
+    struct vcpu *v;
+
+    o_info = (u64)d->shared_info;
+    d->shared_info= (shared_info_t *)domain_mpa_to_imva(d, gpa);
+
+    /* Copy existing shared info into new page */
+    if (o_info) {
+        memcpy((void*)d->shared_info, (void*)o_info, PAGE_SIZE);
+        for_each_vcpu(d, v) {
+            v->vcpu_info = &d->shared_info->vcpu_info[v->vcpu_id];
+        }
+        /* If original page belongs to xen heap, then relinguish back
+         * to xen heap. Or else, leave to domain itself to decide.
+         */
+        if (likely(IS_XEN_HEAP_FRAME(virt_to_page(o_info)))) {
+            free_domheap_page(virt_to_page(o_info));
+            free_xenheap_page((void *)o_info);
+        }
+        else {
+            put_page(virt_to_page(o_info));
+        }
+    }
+    else {
+        memset(d->shared_info, 0, PAGE_SIZE);
+    }
+    return 0;
+}
 
 long
 do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
@@ -78,6 +154,25 @@ do_hvm_op(unsigned long op, XEN_GUEST_HA
         break;
     }
 
+    case HVMOP_setup_gnttab_table:
+    case HVMOP_setup_shared_info_page:
+    {
+        struct xen_hvm_setup a;
+
+        if (copy_from_guest(&a, arg, 1))
+            return -EFAULT;
+
+        switch (op) {
+        case HVMOP_setup_gnttab_table:
+            printk("vmx_gnttab_setup_table: frame_pa=%#lx,"
+                            "nr_frame=%ld\n", a.arg1, a.arg2);
+            return vmx_gnttab_setup_table(a.arg1, a.arg2);
+        case HVMOP_setup_shared_info_page:
+            printk("vmx_setup_shared_info_page: gpa=0x%lx\n", a.arg1);
+            return vmx_setup_shared_info_page(a.arg1);
+        }
+    }
+
     default:
         DPRINTK("Bad HVM op %ld.\n", op);
         rc = -ENOSYS;
diff -r 3e54734e55f3 -r ee3c9f9b3e9f xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h    Wed Aug 23 13:26:46 2006 -0600
+++ b/xen/include/public/arch-ia64.h    Thu Aug 24 20:09:21 2006 +0900
@@ -335,6 +335,17 @@ struct vcpu_guest_context {
 };
 typedef struct vcpu_guest_context vcpu_guest_context_t;
 DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
+
+// hvm_op expansion
+#define HVMOP_setup_gnttab_table        2
+#define HVMOP_setup_shared_info_page    3
+
+struct xen_hvm_setup {
+    unsigned long arg1;
+    unsigned long arg2;
+};
+typedef struct xen_hvm_setup xen_hvm_setup_t;
+DEFINE_XEN_GUEST_HANDLE(xen_hvm_setup_t);
 
 // dom0 vp op
 #define __HYPERVISOR_ia64_dom0vp_op     __HYPERVISOR_arch_0
# HG changeset patch
# User Doi.Tsunehisa@xxxxxxxxxxxxxx
# Node ID 64486d0c30052f603c149a9a62c9552eaaf34bca
# Parent  88304f9671b54b3e78fe111cf2142a1828eb8600
Modify unmodified_drivers build rule for PV-on-HVM/IPF

Signed-off-by: Tsunehisa Doi <Doi.Tsunehisa@xxxxxxxxxxxxxx>
Signed-off-by: Tomonari Horikoshi <t.horikoshi@xxxxxxxxxxxxxx>

diff -r 88304f9671b5 -r 64486d0c3005 unmodified_drivers/linux-2.6/mkbuildtree
--- a/unmodified_drivers/linux-2.6/mkbuildtree  Thu Aug 24 21:12:27 2006 +0900
+++ b/unmodified_drivers/linux-2.6/mkbuildtree  Thu Aug 24 21:14:32 2006 +0900
@@ -42,6 +42,12 @@ i[34567]86)
        ln -sf ${XL}/include/asm-i386/mach-xen/asm/synch_bitops.h include/asm
        ln -sf ${XL}/include/asm-i386/mach-xen/asm/maddr.h include/asm
        ;;
+"ia64")
+       ln -sf ${XL}/include/asm-ia64/hypervisor.h include/asm
+       ln -sf ${XL}/include/asm-ia64/hypercall.h include/asm
+       ln -sf ${XL}/include/asm-ia64/synch_bitops.h include/asm
+       ln -sf ${XL}/include/asm-ia64/maddr.h include/asm
+       ;;
 *)
        echo unknown architecture $uname
        exit 1
diff -r 88304f9671b5 -r 64486d0c3005 unmodified_drivers/linux-2.6/overrides.mk
--- a/unmodified_drivers/linux-2.6/overrides.mk Thu Aug 24 21:12:27 2006 +0900
+++ b/unmodified_drivers/linux-2.6/overrides.mk Thu Aug 24 21:14:32 2006 +0900
@@ -4,7 +4,9 @@
 #
 # (i.e. we need the native config for things like -mregparm, but
 # a Xen kernel to find the right headers)
+ifneq ($(ARCH),ia64)
 EXTRA_CFLAGS += -DCONFIG_VMX -DCONFIG_VMX_GUEST -DCONFIG_X86_XEN
+endif
 EXTRA_CFLAGS += -DCONFIG_XEN_SHADOW_MODE -DCONFIG_XEN_SHADOW_TRANSLATE
 EXTRA_CFLAGS += -DCONFIG_XEN_BLKDEV_GRANT -DXEN_EVTCHN_MASK_OPS
 EXTRA_CFLAGS += -DCONFIG_XEN_NETDEV_GRANT_RX -DCONFIG_XEN_NETDEV_GRANT_TX
# HG changeset patch
# User Doi.Tsunehisa@xxxxxxxxxxxxxx
# Node ID 88304f9671b54b3e78fe111cf2142a1828eb8600
# Parent  6557c022fe1c5b45f5eab7830594e4bef17a4091
Modify unmodified_drivers for PV-on-HVM/IPF

Signed-off-by: Tsunehisa Doi <Doi.Tsunehisa@xxxxxxxxxxxxxx>
Signed-off-by: Tomonari Horikoshi <t.horikoshi@xxxxxxxxxxxxxx>

diff -r 6557c022fe1c -r 88304f9671b5 
unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
--- a/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c  Thu Aug 24 
21:07:56 2006 +0900
+++ b/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c  Thu Aug 24 
21:12:27 2006 +0900
@@ -54,11 +54,15 @@ static int __init init_xen_info(void)
 static int __init init_xen_info(void)
 {
        unsigned long shared_info_frame;
+       extern void *shared_info_area;
+#ifndef __ia64__
        struct xen_add_to_physmap xatp;
-       extern void *shared_info_area;
-
+#else
+       struct xen_hvm_setup xhs;
+#endif
        setup_xen_features();
 
+#ifndef __ia64__
        shared_info_frame = alloc_xen_mmio(PAGE_SIZE) >> PAGE_SHIFT;
        xatp.domid = DOMID_SELF;
        xatp.idx = 0;
@@ -66,9 +70,17 @@ static int __init init_xen_info(void)
        xatp.gpfn = shared_info_frame;
        if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp))
                BUG();
-
        shared_info_area =
                ioremap(shared_info_frame << PAGE_SHIFT, PAGE_SIZE);
+#else /* !__ia64__ */
+        shared_info_frame = __get_free_page(GFP_KERNEL);
+        xhs.arg1 = virt_to_phys((void *)shared_info_frame);
+        xhs.arg2 = 0;
+        if (HYPERVISOR_hvm_op(HVMOP_setup_shared_info_page, &xhs))
+                BUG();
+        shared_info_area = (shared_info_t *)shared_info_frame;
+#endif /* !__ia64__ */
+
        if (shared_info_area == NULL)
                panic("can't map shared info\n");
 
@@ -96,6 +108,7 @@ static void __devexit platform_pci_remov
        free_irq(pdev->irq, pdev);
 }
 
+#ifndef __ia64__
 static unsigned long platform_mmio;
 static unsigned long platform_mmio_alloc;
 static unsigned long platform_mmiolen;
@@ -160,6 +173,7 @@ static int get_hypercall_stubs(void)
 
        return 0;
 }
+#endif /* !__ia64__ */
 
 static int __devinit platform_pci_init(struct pci_dev *pdev,
                                       const struct pci_device_id *ent)
@@ -198,13 +212,14 @@ static int __devinit platform_pci_init(s
                return -EBUSY;
        }
 
+#ifndef __ia64__
        platform_mmio = mmio_addr;
        platform_mmiolen = mmio_len;
 
        ret = get_hypercall_stubs();
        if (ret < 0)
                goto out;
-
+#endif /* __ia64__ */
        
        if ((ret = init_xen_info()))
                goto out;
diff -r 6557c022fe1c -r 88304f9671b5 
unmodified_drivers/linux-2.6/platform-pci/xen_support.c
--- a/unmodified_drivers/linux-2.6/platform-pci/xen_support.c   Thu Aug 24 
21:07:56 2006 +0900
+++ b/unmodified_drivers/linux-2.6/platform-pci/xen_support.c   Thu Aug 24 
21:12:27 2006 +0900
@@ -26,11 +26,13 @@
 #include <asm/hypervisor.h>
 #include "platform-pci.h"
 
+#ifndef __ia64__
 void xen_machphys_update(unsigned long mfn, unsigned long pfn)
 {
        BUG();
 }
 EXPORT_SYMBOL(xen_machphys_update);
+#endif /* __ia64__ */
 
 void balloon_update_driver_allowance(long delta)
 {
@@ -41,3 +43,15 @@ void balloon_release_driver_page(struct 
 {
 }
 EXPORT_SYMBOL(balloon_release_driver_page);
+
+#ifdef __ia64__
+int running_on_xen = 1;
+EXPORT_SYMBOL(running_on_xen);
+
+int ia64_xenmem_reservation_op(unsigned long op,
+                           struct xen_memory_reservation* reservation__)
+{
+        return 0;
+}
+EXPORT_SYMBOL(ia64_xenmem_reservation_op);
+#endif /* __ia64__ */
# HG changeset patch
# User Doi.Tsunehisa@xxxxxxxxxxxxxx
# Node ID 6557c022fe1c5b45f5eab7830594e4bef17a4091
# Parent  622fc5f4ca01ef808b44e368786ac0b1776f9161
Modify linux for PV-on-HVM/IPF

Signed-off-by: Tsunehisa Doi <Doi.Tsunehisa@xxxxxxxxxxxxxx>
Signed-off-by: Tomonari Horikoshi <t.horikoshi@xxxxxxxxxxxxxx>

diff -r 622fc5f4ca01 -r 6557c022fe1c 
linux-2.6-xen-sparse/drivers/xen/core/gnttab.c
--- a/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c    Thu Aug 24 20:13:03 
2006 +0900
+++ b/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c    Thu Aug 24 21:07:56 
2006 +0900
@@ -429,6 +429,7 @@ int gnttab_resume(void)
 int gnttab_resume(void)
 {
        unsigned long frames;
+#ifndef __ia64__
        struct xen_add_to_physmap xatp;
        unsigned int i;
 
@@ -448,13 +449,30 @@ int gnttab_resume(void)
                printk("error to ioremap gnttab share frames\n");
                return -1;
        }
+#else /* !__ia64__ */
+       struct xen_hvm_setup xhs;
+
+       shared = (struct grant_entry *)
+               __get_free_pages(GFP_KERNEL, get_order(PAGE_SIZE * 
NR_GRANT_FRAMES));
+       if (shared == NULL) {
+               printk("error to allocate gnttab share frames\n");
+               return -1;
+       }
+       frames = virt_to_phys((void *)shared);
+       xhs.arg1 = frames;
+       xhs.arg2 = NR_GRANT_FRAMES;
+       if (HYPERVISOR_hvm_op(HVMOP_setup_gnttab_table, &xhs))
+               BUG();
+#endif /* !__ia64__ */
 
        return 0;
 }
 
 int gnttab_suspend(void)
 {
+#ifndef __ia64__
        iounmap(shared);
+#endif /* !__ia64__ */
        return 0;
 }
 
diff -r 622fc5f4ca01 -r 6557c022fe1c 
linux-2.6-xen-sparse/include/asm-ia64/hypercall.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Thu Aug 24 20:13:03 
2006 +0900
+++ b/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Thu Aug 24 21:07:56 
2006 +0900
@@ -315,7 +315,9 @@ static inline void exit_idle(void) {}
 })
 
 #include <linux/err.h>
+#ifdef CONFIG_XEN
 #include <asm/xen/privop.h>
+#endif /* CONFIG_XEN */
 
 #define _hypercall_imm1(type, name, imm, a1)                   \
 ({                                                             \
diff -r 622fc5f4ca01 -r 6557c022fe1c 
linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h        Thu Aug 24 
20:13:03 2006 +0900
+++ b/linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h        Thu Aug 24 
21:07:56 2006 +0900
@@ -33,15 +33,9 @@
 #ifndef __HYPERVISOR_H__
 #define __HYPERVISOR_H__
 
-#ifndef CONFIG_XEN
-#define is_running_on_xen()                    (0)
-#define HYPERVISOR_ioremap(offset, size)       (offset)
-#else
 extern int running_on_xen;
 #define is_running_on_xen()                    (running_on_xen)
-#endif
 
-#ifdef CONFIG_XEN
 #include <linux/config.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
@@ -59,7 +53,11 @@ extern shared_info_t *HYPERVISOR_shared_
 extern shared_info_t *HYPERVISOR_shared_info;
 extern start_info_t *xen_start_info;
 
+#ifdef CONFIG_XEN_PRIVILEGED_GUEST
 #define is_initial_xendomain() (xen_start_info->flags & SIF_INITDOMAIN)
+#else
+#define is_initial_xendomain() 0
+#endif
 
 void force_evtchn_callback(void);
 
@@ -182,10 +180,19 @@ MULTI_update_va_mapping(
        mcl->result = 0;
 }
 
+static inline void
+MULTI_grant_table_op(multicall_entry_t *mcl, unsigned int cmd,
+                     void *uop, unsigned int count)
+{
+       mcl->op = __HYPERVISOR_grant_table_op;
+       mcl->args[0] = cmd;
+       mcl->args[1] = (unsigned long)uop;
+       mcl->args[2] = count;
+}
+
 // for debug
 asmlinkage int xprintk(const char *fmt, ...);
 #define xprintd(fmt, ...)      xprintk("%s:%d " fmt, __func__, __LINE__, \
                                        ##__VA_ARGS__)
-#endif /* CONFIG_XEN */
 
 #endif /* __HYPERVISOR_H__ */
# HG changeset patch
# User Doi.Tsunehisa@xxxxxxxxxxxxxx
# Node ID 622fc5f4ca01ef808b44e368786ac0b1776f9161
# Parent  ee3c9f9b3e9f5b4ddb8999f9fc6ac0413b23f419
Change destroy for PV-on-HVM/IPF

Signed-off-by: Tsunehisa Doi <Doi.Tsunehisa@xxxxxxxxxxxxxx>
Signed-off-by: Tomonari Horikoshi <t.horikoshi@xxxxxxxxxxxxxx>

diff -r ee3c9f9b3e9f -r 622fc5f4ca01 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Thu Aug 24 20:09:21 2006 +0900
+++ b/xen/arch/ia64/xen/domain.c        Thu Aug 24 20:13:03 2006 +0900
@@ -390,8 +390,16 @@ void arch_domain_destroy(struct domain *
 void arch_domain_destroy(struct domain *d)
 {
        BUG_ON(d->arch.mm.pgd != NULL);
-       if (d->shared_info != NULL)
-           free_xenheap_pages(d->shared_info, get_order_from_shift(XSI_SHIFT));
+       if (d->shared_info != NULL) {
+               /* If this domain is domVTi, the shared_info page may
+                * be replaced with domheap. Then the shared_info page
+                * frees in relinquish_mm().
+                */
+               if (IS_XEN_HEAP_FRAME(virt_to_page(d->shared_info))) {
+                       free_xenheap_pages(d->shared_info,
+                               get_order_from_shift(XSI_SHIFT));
+               }
+       }
        if (d->arch.shadow_bitmap != NULL)
                xfree(d->arch.shadow_bitmap);
 
diff -r ee3c9f9b3e9f -r 622fc5f4ca01 xen/common/grant_table.c
--- a/xen/common/grant_table.c  Thu Aug 24 20:09:21 2006 +0900
+++ b/xen/common/grant_table.c  Thu Aug 24 20:13:03 2006 +0900
@@ -1164,7 +1164,8 @@ grant_table_destroy(
     if ( t == NULL )
         return;
     
-    free_xenheap_pages(t->shared, ORDER_GRANT_FRAMES);
+    if (IS_XEN_HEAP_FRAME(virt_to_page(t->shared)))
+        free_xenheap_pages(t->shared, ORDER_GRANT_FRAMES);
     free_xenheap_page(t->maptrack);
     xfree(t->active);
     xfree(t);
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel