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
|