qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: [PATCH 3/5] replace cpu_physical_memory_rw


From: Glauber Costa
Subject: [Qemu-devel] Re: [PATCH 3/5] replace cpu_physical_memory_rw
Date: Wed, 17 Dec 2008 19:00:59 -0200
User-agent: Mutt/1.5.18 (2008-05-17)

On Wed, Dec 17, 2008 at 02:56:05PM -0600, Anthony Liguori wrote:
> Glauber Costa wrote:
>> This patch introduces a kvm version of cpu_physical_memory_rw.
>> The main motivation is to bypass tcg version, which contains
>> tcg-specific code, as well as data structures not used by kvm,
>> such as l1_phys_map.
>>
>> In this patch, I'm using a runtime selection of which function
>> to call, but the mid-term goal is to use function pointers in
>> a way very close to which QEMUAccel used to be.
>>
>> Signed-off-by: Glauber Costa <address@hidden>
>> ---
>>  exec.c    |   13 +++++++++++--
>>  kvm-all.c |   39 +++++++++++++++++++++++++++++++++++----
>>  kvm.h     |    2 ++
>>  3 files changed, 48 insertions(+), 6 deletions(-)
>>
>> diff --git a/exec.c b/exec.c
>> index 04eadfe..d5c88b1 100644
>> --- a/exec.c
>> +++ b/exec.c
>> @@ -2938,8 +2938,8 @@ int cpu_physical_memory_do_io(target_phys_addr_t addr, 
>> uint8_t *buf, int l, int
>>
>> +
>> +void kvm_cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
>> +                                int len, int is_write)
>> +{
>> +    KVMSlot *mem;
>> +    KVMState *s = kvm_state;
>> +    int l;
>> +
>> +    mem = kvm_lookup_slot(s, addr);
>> +    if (!mem)
>> +        return;
>> +
>> +    if ((mem->phys_offset & ~TARGET_PAGE_MASK) >= TLB_MMIO) {
>> +        l = 0;
>> +        while (len > l)
>> +            l += cpu_physical_memory_do_io(addr + l, buf + l, len - l, 
>> is_write, mem->phys_offset);
>> +    } else {
>> +        uint8_t *uaddr = phys_ram_base + mem->phys_offset + (addr - 
>> mem->start_addr);
>> +        if (!is_write)
>> +            memcpy(buf, uaddr, len);
>> +        else
>> +            memcpy(uaddr, buf, len);
>> +    }
>> +}
>>   
>
> I think this is a bit optimistic.  It assumes addr..len fits entirely  
> within a slot.  That's not necessarily the case though.  I think you  
> should probably limit len to whatever is left in the slot, then if  
> necessary, (tail) recursively call kvm_cpu_physical_memory_rw.
It makes sense.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]