# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1292411861 0
# Node ID 532d4a2d197ecc81343d98ed97c71d7cd12cef63
# Parent 4c180ed8d04440864eea5ffd1707b6bfb2d6cb22
x86 hvm: Enable 6-argument hypercalls
Enable 6 argument hypercalls for HVMs. The hypercall code handles a
sixth argument in EBP or R9 but the HVM code is not passing the value.
Signed-off-by: Ross Philipson <ross.philipson@xxxxxxxxxx>
---
xen/arch/x86/hvm/hvm.c | 18 +++++++++++-------
1 files changed, 11 insertions(+), 7 deletions(-)
diff -r 4c180ed8d044 -r 532d4a2d197e xen/arch/x86/hvm/hvm.c
--- a/xen/arch/x86/hvm/hvm.c Wed Dec 15 11:09:02 2010 +0000
+++ b/xen/arch/x86/hvm/hvm.c Wed Dec 15 11:17:41 2010 +0000
@@ -2522,7 +2522,8 @@ static long hvm_vcpu_op(
}
typedef unsigned long hvm_hypercall_t(
- unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
+ unsigned long, unsigned long, unsigned long, unsigned long, unsigned long,
+ unsigned long);
#define HYPERCALL(x) \
[ __HYPERVISOR_ ## x ] = (hvm_hypercall_t *) do_ ## x
@@ -2672,30 +2673,33 @@ int hvm_do_hypercall(struct cpu_user_reg
#ifdef __x86_64__
if ( mode == 8 )
{
- HVM_DBG_LOG(DBG_LEVEL_HCALL, "hcall%u(%lx, %lx, %lx, %lx, %lx)", eax,
- regs->rdi, regs->rsi, regs->rdx, regs->r10, regs->r8);
+ HVM_DBG_LOG(DBG_LEVEL_HCALL, "hcall%u(%lx, %lx, %lx, %lx, %lx, %lx)",
+ eax, regs->rdi, regs->rsi, regs->rdx,
+ regs->r10, regs->r8, regs->r9);
curr->arch.hvm_vcpu.hcall_64bit = 1;
regs->rax = hvm_hypercall64_table[eax](regs->rdi,
regs->rsi,
regs->rdx,
regs->r10,
- regs->r8);
+ regs->r8,
+ regs->r9);
curr->arch.hvm_vcpu.hcall_64bit = 0;
}
else
#endif
{
- HVM_DBG_LOG(DBG_LEVEL_HCALL, "hcall%u(%x, %x, %x, %x, %x)", eax,
+ HVM_DBG_LOG(DBG_LEVEL_HCALL, "hcall%u(%x, %x, %x, %x, %x, %x)", eax,
(uint32_t)regs->ebx, (uint32_t)regs->ecx,
(uint32_t)regs->edx, (uint32_t)regs->esi,
- (uint32_t)regs->edi);
+ (uint32_t)regs->edi, (uint32_t)regs->ebp);
regs->eax = hvm_hypercall32_table[eax]((uint32_t)regs->ebx,
(uint32_t)regs->ecx,
(uint32_t)regs->edx,
(uint32_t)regs->esi,
- (uint32_t)regs->edi);
+ (uint32_t)regs->edi,
+ (uint32_t)regs->ebp);
}
HVM_DBG_LOG(DBG_LEVEL_HCALL, "hcall%u -> %lx",
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|