|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] [XEN] 32on64: need to take multicall cont
# 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
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] [XEN] 32on64: need to take multicall context into consideration,
Xen patchbot-unstable <=
|
|
|
|
|