[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [BUGFIX][PATCH v7 1/9] vmport: The io memory region nee
From: |
Don Slutz |
Subject: |
Re: [Qemu-devel] [BUGFIX][PATCH v7 1/9] vmport: The io memory region needs to be at least a size of 4 |
Date: |
Mon, 15 Jun 2015 09:53:23 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux i686 on x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 |
On 06/12/15 18:38, Eric Blake wrote:
> On 06/12/2015 08:05 AM, Don Slutz wrote:
>> Before:
>>
>> commit c3c1bb99d1c11978d9ce94d1bdcf0705378c1459
>> Author: Peter Crosthwaite <address@hidden>
>> Date: Mon Mar 16 22:35:54 2015 -0700
>>
>> exec: Respect as_tranlsate_internal length clamp
>>
>> it did not matter. Only accept I/O that starts on 1st
>> port.
>>
>> Signed-off-by: Don Slutz <address@hidden>
>> CC: Don Slutz <address@hidden>
>> ---
>> hw/misc/vmport.c | 6 +++++-
>> 1 file changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/misc/vmport.c b/hw/misc/vmport.c
>> index 7fcc00d..51b64bc 100644
>> --- a/hw/misc/vmport.c
>> +++ b/hw/misc/vmport.c
>> @@ -69,6 +69,10 @@ static uint64_t vmport_ioport_read(void *opaque, hwaddr
>> addr,
>> unsigned char command;
>> uint32_t eax;
>>
>> + /* Only support 1 address */
>> + if (addr) {
>> + return ~0U;
>> + }
>
> Different answer on 32-bit platforms (there, ~0U is 0xffffffff, which
> then 0-extends to uint64_t rather than your desired result of
> 0xffffffffffffffffULL).
>
This is not true:
Using:
build1:~/tmp>cat zr64.c
#include <stdio.h>
#include <stdint.h>
uint64_t vmport_ioport_read(void)
{
return ~0U;
}
int
main(void)
{
uint64_t res = vmport_ioport_read();
printf("res=0x%llx\n", res);
}
On 32-bits:
build1:~/tmp>file zr64
zr64: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
build1:~/tmp>./zr64
res=0xffffffff
on 64-bits:
build2:~/tmp>file zr64
zr64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically
linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
build2:~/tmp>./zr64
res=0xffffffff
> Why can't you just 'return -1;'?
>
I/O instructions on x86 are limited to 32bits max. Also when EAX is
changed via inl, the high 32bits are 0. So the correct result is ~0U
not -1.
-Don Slutz
[Qemu-devel] [PATCH v7 2/9] vmport: Switch to trace, Don Slutz, 2015/06/12
[Qemu-devel] [BUGFIX][PATCH v7 3/9] vmport: Fix vmport_cmd_ram_size, Don Slutz, 2015/06/12
[Qemu-devel] [PATCH v7 6/9] vmport_rpc: Add QMP access to vmport_rpc object., Don Slutz, 2015/06/12
[Qemu-devel] [PATCH v7 7/9] vmport_rpc: Add migration, Don Slutz, 2015/06/12
[Qemu-devel] [PATCH v7 5/9] vmport_rpc: Add limited support of VMware's hyper-call rpc, Don Slutz, 2015/06/12
[Qemu-devel] [PATCH v7 8/9] vmport: Add VMware all ring hack, Don Slutz, 2015/06/12