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

Re: [Xen-devel] pagetable pinning question

> I want to use pinning for the L1/L2 pagetables.  The currently activated
> pagetable maps itself and that works great.  But I (or rather whoever wrote
> the pagetable code) also wants to map inactive pagetables and this doesn't
> work because of the following check in get_twisted_l2_table:
>     if ( (l2v >> PAGE_SHIFT) != entry_pfn )
>     {
>         MEM_LOG("L2 tables may not map _other_ L2 tables!\n");
> Are there counting or protection issues why this is disallowed or was it
> just not needed for Linux/Windows?

Interesting. I guess as well as having a linear mapping [*] of
it's current page table, NetBSD reserves a page directory slot
for creating temporary linear mappings of other page tables it
wants to manipulate (e.g. during fork etc).

Like anything to do with linear mappings, figuring this out is
going to require a damp towel wrapped around one's head...

If the other L2 is pinned, I think its safe to allow. However, if
it's not things are going to get ugly (and slow).

> I guess a work around would be to switch to the inactive pagetable and
> switch back when the mapping is no longer needed...

I suspect it wants both linear mappings in place at the same
time, e.g. for doing a PTE copy.

Can you ensure the other L2 is pinned?


[*] i.e. it uses a page directory entry to point back to the page
containing the directory. The net result is you end up with a 4MB
VA region that containing a linear mapping of all your PTEs,
which makes manipulating them very easy. Linux does not use
linear mappings at all, but XP does.

The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.