[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] RE: [Xen-changelog] Fix MOVS instruction emulation for HVM MMIO.

Petersson, Mats wrote:
>> Subject: [Xen-changelog] Fix MOVS instruction emulation for HVM MMIO.
>> diff -r aab3cd33d2ba -r 7fdc4a8b782b xen/arch/x86/hvm/platform.c
>> --- a/xen/arch/x86/hvm/platform.c    Tue May 16 16:34:27 2006 +0100
>> +++ b/xen/arch/x86/hvm/platform.c    Tue May 16 19:50:23 2006 +0100
>> @@ -865,7 +865,7 @@ void handle_mmio(unsigned long va, unsig
>>           * copy ourself. After this copy succeeds, "rep 
>> movs" is executed
>>           * again.
>>           */
>> -        if ((addr & PAGE_MASK) != ((addr + size - 1) & PAGE_MASK)) {
>> +        if ((addr & PAGE_MASK) != ((addr + sign * (size - 1)) & 
>> + PAGE_MASK)) {
> With the risk of being wrong (again), I'd say this is incorrect: The
> MOVS instruction will start reading at ESI, and write at the address
> indicated by EDI and write with size bytes, even when it's copying
> backwards. So there should be no multiplication of sign on this line. 

I still think this is correct.  If I understand things correctly the
point of the test is to figure whenever the _next_ repz movs interation
will access another page (and if so copy just one data word and let the
emulator kick in again for the remaining data on the page above/below).



Gerd Hoffmann <kraxel@xxxxxxx>
Erst mal heiraten, ein, zwei Kinder, und wenn alles läuft
geh' ich nach drei Jahren mit der Familie an die Börse.

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.