qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] tlb_update_dirty() question


From: Johannes Luber
Subject: Re: [Qemu-devel] tlb_update_dirty() question
Date: Tue, 15 Sep 2009 13:28:16 +0200

> On Mon, Sep 14, 2009 at 12:00 PM, Johannes Luber <address@hidden> wrote:
...
> >
> > The comment is particularly insightful. p is supposed to be a host
> pointer yet the initialization code uses "(unsigned long)" in a cast for an
> expression which has the type target_phys_addr_t because the struct variable
> "addend" has this type.
> 
> The addend is target_phys_addr_t type, because then we can get back to
> host address ranges on 32 bit host. Consider for example guest address
> at 8G backed by host memory at 1G: the addend is -7G.

Looking at

int tlb_set_page_exec(CPUState *env, target_ulong vaddr,
                      target_phys_addr_t paddr, int prot,
                      int mmu_idx, int is_softmmu)
{
}

(I assume that the only place addend is set), I see these two lines:

    addend = (unsigned long)qemu_get_ram_ptr(pd & TARGET_PAGE_MASK);
    ...
    te->addend = addend - vaddr;

Assuming target_ulong and unsigned long as 32-bit values (despite being on 
64-bit system) I don't see how your example can work. There is no way to make 
addend bigger than (+/-)4G.

> 
> > This cast assumes that unsigned long is at least as big as
> target_phys_addr_t. Under Unix this may be true, but Windows C compilers 
> treat long ==
> int and int remains a 32-bit type. Why isn't simply target_phys_addr_t used
> as cast? target_phys_addr_t does support max(target pointer size, host
> pointer size), doesn't it? Or is there another option?
> 
> No, the cast assumes that sum of guest addr and addend is a valid host
> address, which should be true. For memory, the resulting address is
> simply pointer to host memory. If any of the lowest bits of the sum
> are set, the area is MMIO.
> 
All in all, I take it that Qemu basically targets only Unix (the link to the 
Windows source version is merely a patch set). At least I know that my 
assumptions have been right and so I can fix these "(unsigned long)" places for 
myself.

Thanks for your time!
Johannes
-- 
GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT!
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01




reply via email to

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