ptep_set_access_flags and ptep_set_wrprotect are doing direct pte updates ignoring the paravirt interface.
The wrprotect change is especially important since it allows full batching of fork() on COW mappings. There are still a few PTE update interfaces bypassing paravirt, such as ptep_get_and_clear_full and ptep_get_and_clear. Signed-off-by: Marcelo Tosatti <[EMAIL PROTECTED]> Index: linux-2.6-x86-kvm/include/asm-x86/paravirt.h =================================================================== --- linux-2.6-x86-kvm.orig/include/asm-x86/paravirt.h +++ linux-2.6-x86-kvm/include/asm-x86/paravirt.h @@ -1004,6 +1004,13 @@ static inline void set_pte(pte_t *ptep, pte.pte); } +static inline void pte_clear_bit(unsigned int bit, pte_t *ptep) +{ + pte_t pte = *ptep; + clear_bit(bit, (unsigned long *)&pte.pte); + set_pte(ptep, pte); +} + static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep, pte_t pte) { Index: linux-2.6-x86-kvm/include/asm-x86/pgtable.h =================================================================== --- linux-2.6-x86-kvm.orig/include/asm-x86/pgtable.h +++ linux-2.6-x86-kvm/include/asm-x86/pgtable.h @@ -227,6 +227,8 @@ void native_pagetable_setup_done(pgd_t * #define pte_update(mm, addr, ptep) do { } while (0) #define pte_update_defer(mm, addr, ptep) do { } while (0) +#define pte_clear_bit(bit, ptep) clear_bit(bit, (unsigned long *)&ptep->pte) + static inline void paravirt_pagetable_setup_start(pgd_t *base) { native_pagetable_setup_start(base); @@ -302,7 +304,7 @@ static inline void native_set_pte_at(str ({ \ int __changed = !pte_same(*(ptep), entry); \ if (__changed && dirty) { \ - *ptep = entry; \ + set_pte(ptep, entry); \ pte_update_defer((vma)->vm_mm, (address), (ptep)); \ flush_tlb_page(vma, address); \ } \ @@ -357,7 +359,7 @@ static inline pte_t ptep_get_and_clear_f #define __HAVE_ARCH_PTEP_SET_WRPROTECT static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep) { - clear_bit(_PAGE_BIT_RW, (unsigned long *)&ptep->pte); + pte_clear_bit(_PAGE_BIT_RW, ptep); pte_update(mm, addr, ptep); } -- ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel