compat_mmuext hypercalls.
At the point where we translate the continuation "nat_ops" points to
the beginning of the batch of "i" entries, therefore it must be
incremented by the number of entries processed "i - left". At the same
point "cmp_uops" points to the end of the batch of entries and must
therefore be decremented by "left".
The new count value has already been set by do_mmuext_op to "left" and
therefore it is correct to add "count - i" since that is the number of
entries that remain after this batch.
Signed-off-by: Ian Campbell <ian.campbell@xensource.com>
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));
+ guest_handle_add_offset(nat_ops, i - left);
+ guest_handle_subtract_offset(cmp_uops, left);
left = 1;
BUG_ON(!hypercall_xlat_continuation(&left, 0x01, nat_ops, cmp_uops));
BUG_ON(left != arg1);
/* Offset the given guest handle into the array it refers to. */
#define guest_handle_add_offset(hnd, nr) ((hnd).p += (nr))
+#define guest_handle_subtract_offset(hnd, nr) ((hnd).p -= (nr))
/* Cast a guest handle to the specified type of handle. */
#define guest_handle_cast(hnd, type) ({ \