[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [XEN] 32on64: need to take multicall context into consideration
# HG changeset patch # User Emmanuel Ackaouy <ack@xxxxxxxxxxxxx> # Date 1168450018 0 # Node ID aa127e545b7352c1923c99bf167fcd33716a690f # Parent 160ff08f8b1ff4c7dbd79d2b54efc49cc6bd079a [XEN] 32on64: need to take multicall context into consideration when determining the continuation arguments for mmuext ops. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> --- xen/arch/x86/x86_64/compat/mm.c | 20 ++++++++++++++------ 1 files changed, 14 insertions(+), 6 deletions(-) diff -r 160ff08f8b1f -r aa127e545b73 xen/arch/x86/x86_64/compat/mm.c --- a/xen/arch/x86/x86_64/compat/mm.c Wed Jan 10 16:17:35 2007 +0000 +++ b/xen/arch/x86/x86_64/compat/mm.c Wed Jan 10 17:26:58 2007 +0000 @@ -1,6 +1,7 @@ #ifdef CONFIG_COMPAT #include <xen/event.h> +#include <xen/multicall.h> #include <compat/memory.h> #include <compat/xen.h> @@ -289,20 +290,27 @@ int compat_mmuext_op(XEN_GUEST_HANDLE(mm if ( err == __HYPERVISOR_mmuext_op ) { struct cpu_user_regs *regs = guest_cpu_user_regs(); - unsigned int left = regs->ecx & ~MMU_UPDATE_PREEMPTED; - - BUG_ON(!(regs->ecx & MMU_UPDATE_PREEMPTED)); + struct mc_state *mcs = &this_cpu(mc_state); + unsigned int arg1 = !test_bit(_MCSF_in_multicall, &mcs->flags) + ? regs->ecx + : mcs->call.args[1]; + unsigned int left = arg1 & ~MMU_UPDATE_PREEMPTED; + + BUG_ON(left == arg1); BUG_ON(left > count); guest_handle_add_offset(nat_ops, count - left); BUG_ON(left + i < count); guest_handle_add_offset(cmp_uops, (signed int)(count - left - i)); left = 1; BUG_ON(!hypercall_xlat_continuation(&left, 0x01, nat_ops, cmp_uops)); - BUG_ON(left != regs->ecx); - regs->ecx += count - i; + BUG_ON(left != arg1); + if (!test_bit(_MCSF_in_multicall, &mcs->flags)) + regs->_ecx += count - i; + else + mcs->compat_call.args[1] += count - i; } else - BUG_ON(rc > 0); + BUG_ON(err > 0); rc = err; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |