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

[Xen-devel] __HYPERVISOR_COMPAT_VIRT_START for HVM guest with PV drivers

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] __HYPERVISOR_COMPAT_VIRT_START for HVM guest with PV drivers
From: Chuck Anderson <chuck.anderson@xxxxxxxxxx>
Date: Thu, 20 Aug 2009 08:30:26 -0700
Delivery-date: Thu, 20 Aug 2009 08:31:11 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.22 (X11/20090608)
Do the guest virtual addresses passed by a hypervisor call on a 32-bit HVM with PV drivers guest to a 64-bit hypervisor need to lie below __HYPERVISOR_COMPAT_VIRT_START? Both HVM and PVM domains have their hv_compat_vstart set to __HYPERVISOR_COMPAT_VIRT_START. The hypervisor's compat layer is causing the balloon driver's HYPERVISOR_memory_op(XENMEM_decrease_reservation, &reservation) hypervisor call to error out in xen/common/compat/memory.c compat_memory_op(), compat_handle_ok(), because the PVHVM guest's extent_start lies above __HYPERVISOR_COMPAT_VIRT_START. The following patch appears to fix the problem but I want to make sure it is fixing the real bug:

diff -up xen-3.4.0/xen/arch/x86/domain.c.orig xen-3.4.0/xen/arch/x86/domain.c --- xen-3.4.0/xen/arch/x86/domain.c.orig 2009-08-18 13:09:30.000000000 -0700
+++ xen-3.4.0/xen/arch/x86/domain.c     2009-08-18 14:55:08.000000000 -0700
@@ -428,7 +428,12 @@ int arch_domain_create(struct domain *d,
#endif /* __x86_64__ */

#ifdef CONFIG_COMPAT
-    HYPERVISOR_COMPAT_VIRT_START(d) = __HYPERVISOR_COMPAT_VIRT_START;
+    if (is_hvm_domain(d)) {
+ HYPERVISOR_COMPAT_VIRT_START(d) = __HYPERVISOR_COMPAT_VIRT_START_NONE;
+    }
+    else {
+        HYPERVISOR_COMPAT_VIRT_START(d) = __HYPERVISOR_COMPAT_VIRT_START;
+    }
#endif

   if ( (rc = paging_domain_init(d)) != 0 )
diff -up xen-3.4.0/xen/include/asm-x86/config.h.orig xen-3.4.0/xen/include/asm-x86/config.h --- xen-3.4.0/xen/include/asm-x86/config.h.orig 2009-08-18 13:22:16.000000000 -0700 +++ xen-3.4.0/xen/include/asm-x86/config.h 2009-08-18 14:54:40.000000000 -0700
@@ -228,6 +228,7 @@ extern unsigned int video_mode, video_fl

#ifndef __ASSEMBLY__

+#define __HYPERVISOR_COMPAT_VIRT_START_NONE 0xFFFFFFFF
/* This is not a fixed value, just a lower limit. */
#define __HYPERVISOR_COMPAT_VIRT_START 0xF5800000
#define HYPERVISOR_COMPAT_VIRT_START(d) ((d)->arch.hv_compat_vstart)

Thanks,
Chuck

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

<Prev in Thread] Current Thread [Next in Thread>