diff -buNr a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c --- a/xen/arch/x86/hvm/emulate.c 2008-08-20 10:41:21.348398020 +0100 +++ b/xen/arch/x86/hvm/emulate.c 2008-08-20 12:32:22.603556476 +0100 @@ -246,7 +246,7 @@ } /* If the range does not straddle a page boundary then we're done. */ - done = reverse ? bytes_per_rep + (addr & ~PAGE_MASK) : -addr & ~PAGE_MASK; + done = reverse ? -addr & ~PAGE_MASK : bytes_per_rep + (addr & ~PAGE_MASK); todo = *reps * bytes_per_rep; if ( done >= todo ) goto done;