[Top][All Lists]
[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