2011/7/18 Tim Deegan <Tim.Deegan@xxxxxxxxxx>
Guest PFN-space is not contiguous. Like a real PC, there are some
At 21:57 +0800 on 18 Jul (1311026244), YAO wrote:
> First, I used "xm debug-key D" to dump ept mappings. But I have a doubt
> about the mapping.
> I started a 32bit HVM which memory is 512, so the max gfn should be 0x1ffff.
> But the result of "xm dmesg" showed gfn->mfn mapping until 0xfffff.
> Output looked like below:
> (XEN) gfn: fc012 mfn: 179e6
> (XEN) gfn: fc013 mfn: 179e5
> (XEN) gfn: fee00 mfn: 2e8
> (XEN) gfn: feffb mfn: 178fd
> (XEN) gfn: feffc mfn: 178fc
> (XEN) gfn: feffd mfn: 178fb
> (XEN) gfn: feffe mfn: 178fa
> (XEN) gfn: fefff mfn: 178f9
> (XEN) gfn: fffff mfn: 2eb
> What I think is every HVM has one EPT table and the table maps the allocated
> memory like from 0 to 0x1ffff, why does the HVM ept map all the 4G space?
> Isn't it unneccessary and waste of memory?
areas of the address space just below 4GB that are used for special
things like MMIO. So you should see RAM up to about 512MiB, then a big
gap, and then the entries above.
As you noticed there are some entries that are not in the bottom
> Second, I want to copy the system ept and used the copy for later
> translation. Since the HVM is 512M, so I need one PML4 pointed by eptp, one
> PDP pointed by PML4 entry, one PD pointed by PDP entry, 512 PT's
> pointed by all PD entries. After all settings are done, I'v got gfn->mfn
> mapping of 1G memory. I think it should be working, but not. Where am I
> wrong? What would I pay attention to?
512MiB; you'll need to handle those as well.
Other than that it's hard to tell from your description. What are you
trying to achieve by copying the p2m?
Thanks for your reply. Copying the ept table is my first step, next I want to switch between system ept and my own ept smoothly.
Attach is my code of copying ept and switching ept, I wish you could take a look at it.
I copied exactly every mapping one by one, but when I dumped the gfn->mfn mapping(I've modified ept_dump_p2m_table to find unequal entry),
there are some strange output like this:
(XEN) gfn: 200 mfn: 117def my_mfn: 10d600
(XEN) gfn: 400 mfn: 117dee my_mfn: 111200
(XEN) gfn: 600 mfn: 117ded my_mfn: 111000
(XEN) gfn: 800 mfn: 117dec my_mfn: 10de00
(XEN) gfn: 14a00 mfn: 1176bb my_mfn: 10800
(XEN) gfn: 14c00 mfn: 1176ba my_mfn: 10600
(XEN) gfn: 14e00 mfn: 1176b9 my_mfn: 10400
(XEN) gfn: 15000 mfn: 1176b8 my_mfn: 10200
(XEN) gfn: 1f600 mfn: 117b46 my_mfn: 4200
(XEN) gfn: 1f800 mfn: 117b45 my_mfn: 4000
It shouldn't have any unequal entry, I thought...and
Every mismatch has a step of 0x200 until 0x1f800, which really confused me.
Tim Deegan <Tim.Deegan@xxxxxxxxxx>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd. (Company #02937203, SL9 0BG)