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

[Xen-ia64-devel] Porting PV-on-HVM for ia64 platform



Hi all,

My name is Tsunehisa Doi.

We have been porting PV-on-HVM feature for ia64 platform.

I will post patches for PV-on-HVM on ia64 platform. These patches modify
common code for PV-on-HVM on IPF.

We ported PV-on-HVM for IPF 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:

* destroy-common.patch
- grant_table destroy logic modification for PV-on-HVM on IPF
* linux-common.patch
- linux-sparse modification for PV-on-HVM on IPF
* unmodified-common.patch
- unmodified_drivers modification for IPF
* unmodified-build.patch
- unmodified_drivers build rule modification for IPF

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 on IPF.

Thanks,
- Tsunehisa Doi


# HG changeset patch
# User Doi.Tsunehisa@xxxxxxxxxxxxxx
# Node ID 21ac9a7848b36da95132eac54ad3cf4f1ee0f93a
# Parent  9647400b50415a7ef26729016ca11c58e3e3c5a5
Modify grant_table destroy code for PV-on-HVM on IPF

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

diff -r 9647400b5041 -r 21ac9a7848b3 xen/common/grant_table.c
--- a/xen/common/grant_table.c  Sat Aug 26 13:37:41 2006 +0900
+++ b/xen/common/grant_table.c  Sat Aug 26 13:40:55 2006 +0900
@@ -32,6 +32,7 @@
 #include <xen/guest_access.h>
 #include <xen/domain_page.h>
 #include <acm/acm_hooks.h>
+#include <xen/domain_page.h>
 
 /*
  * The first two members of a grant entry are updated as a combined pair.
@@ -1164,7 +1165,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);
# HG changeset patch
# User Doi.Tsunehisa@xxxxxxxxxxxxxx
# Node ID a0a48f19ddba0ebab21befb076eba607b8221700
# Parent  21ac9a7848b36da95132eac54ad3cf4f1ee0f93a
Modify gnttab initialization code for PV-on-HVM on IPF

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

diff -r 21ac9a7848b3 -r a0a48f19ddba 
linux-2.6-xen-sparse/drivers/xen/core/gnttab.c
--- a/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c    Sat Aug 26 13:40:55 
2006 +0900
+++ b/linux-2.6-xen-sparse/drivers/xen/core/gnttab.c    Sat Aug 26 13:44:41 
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;
 }
 
# HG changeset patch
# User Doi.Tsunehisa@xxxxxxxxxxxxxx
# Node ID bfc60efbd4f491f9c3ff494f655b4ab825f65d2c
# Parent  a0a48f19ddba0ebab21befb076eba607b8221700
Modify unmodified_drivers code for PV-on-HVM on IPF

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

diff -r a0a48f19ddba -r bfc60efbd4f4 
unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
--- a/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c  Sat Aug 26 
13:44:41 2006 +0900
+++ b/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c  Sat Aug 26 
13:50:25 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 a0a48f19ddba -r bfc60efbd4f4 
unmodified_drivers/linux-2.6/platform-pci/xen_support.c
--- a/unmodified_drivers/linux-2.6/platform-pci/xen_support.c   Sat Aug 26 
13:44:41 2006 +0900
+++ b/unmodified_drivers/linux-2.6/platform-pci/xen_support.c   Sat Aug 26 
13:50:25 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 6ea38426ce26959e78fe2ffedbcaff6085c950b2
# Parent  bfc60efbd4f491f9c3ff494f655b4ab825f65d2c
Modify unmodified_drivers build rule for PV-on-HVM on IPF

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

diff -r bfc60efbd4f4 -r 6ea38426ce26 unmodified_drivers/linux-2.6/mkbuildtree
--- a/unmodified_drivers/linux-2.6/mkbuildtree  Sat Aug 26 13:50:25 2006 +0900
+++ b/unmodified_drivers/linux-2.6/mkbuildtree  Sat Aug 26 13:53:17 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 bfc60efbd4f4 -r 6ea38426ce26 unmodified_drivers/linux-2.6/overrides.mk
--- a/unmodified_drivers/linux-2.6/overrides.mk Sat Aug 26 13:50:25 2006 +0900
+++ b/unmodified_drivers/linux-2.6/overrides.mk Sat Aug 26 13:53:17 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
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel

 


Rackspace

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