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:
Yeah, you pretty much have it figured. I may just clean up for style (I
think an extra macro for this is a bit pointless), but the patch is
fundamentally good.