2 messages in com.xensource.lists.xen-develRe: [Xen-devel] When to emulate writi...
FromSent OnAttachments
Tom Creck02 Jul 2008 23:32 
Jeremy Fitzhardinge02 Jul 2008 23:43 
Subject:Re: [Xen-devel] When to emulate writing page table page and when to do_update_va_mapping()?
From:Jeremy Fitzhardinge (jer@goop.org)
Date:07/02/2008 11:43:40 PM
List:com.xensource.lists.xen-devel

Tom Creck wrote:

Hello, everyone:

I know that x86_emulate_memop() is used to emulate writing to page table pages as Xen intentionally write protect page table pages.

Also, the hypercall Hypervisor_update_va_mapping() -> mod_l2/l1_entry() is also used to modify page table pages.

So I get confused about their difference. My questions are:

(1) When are the above two routines of modifying page table pages invoked respectively?

(2) What’s the difference in functionality among the two?

Writing directly to pagetables is a good idea if you think it's likely that the pagetable is unpinned. That is, when it's still just an ordinary RW page while the pagetable is under construction (fork/exec) or destruction (exit). In this case, a simple memory-write is much more efficient than doing a hypercall.

On the other hand, if you're likely to be updating an active pinned pagetable, a hypercall is more efficient than trapping and emulating a write (especially if you can batch multiple updates together with a multicall).

J