[Top][All Lists]
[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.
- [Qemu-devel] [PATCH 2/5] isolate io handling routing, (continued)
- [Qemu-devel] [PATCH 2/5] isolate io handling routing, Glauber Costa, 2008/12/17
- [Qemu-devel] [PATCH 3/5] replace cpu_physical_memory_rw, Glauber Costa, 2008/12/17
- [Qemu-devel] [PATCH 4/5] hook cpu_register_physical_mem, Glauber Costa, 2008/12/17
- [Qemu-devel] [PATCH 5/5] cache slot lookup, Glauber Costa, 2008/12/17
- [Qemu-devel] Re: [PATCH 5/5] cache slot lookup, Avi Kivity, 2008/12/18
- [Qemu-devel] Re: [PATCH 5/5] cache slot lookup, Glauber Costa, 2008/12/18
- Re: [Qemu-devel] Re: [PATCH 5/5] cache slot lookup, Daniel P. Berrange, 2008/12/18
- Re: [Qemu-devel] Re: [PATCH 5/5] cache slot lookup, Glauber Costa, 2008/12/18
- [Qemu-devel] Re: [PATCH 5/5] cache slot lookup, Avi Kivity, 2008/12/18
- [Qemu-devel] Re: [PATCH 3/5] replace cpu_physical_memory_rw, Anthony Liguori, 2008/12/17
- [Qemu-devel] Re: [PATCH 3/5] replace cpu_physical_memory_rw,
Glauber Costa <=
- [Qemu-devel] Re: [PATCH 2/5] isolate io handling routing, Anthony Liguori, 2008/12/17
[Qemu-devel] Re: [PATCH 1/5] re-register whole area upon lfb unmap., Anthony Liguori, 2008/12/17
Re: [Qemu-devel] [PATCH 0/5] Replace tcg memory functions, Ian Jackson, 2008/12/22