Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=40907d5768ab8cadd4cad97bef350820ded20338
Commit:     40907d5768ab8cadd4cad97bef350820ded20338
Parent:     e2dec939db126989808853d218e426daaeebc9e2
Author:     Avi Kivity <[EMAIL PROTECTED]>
AuthorDate: Fri Jan 5 16:36:55 2007 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Fri Jan 5 23:55:27 2007 -0800

    [PATCH] KVM: MMU: Flush guest tlb when reducing permissions on a pte
    
    If we reduce permissions on a pte, we must flush the cached copy of the pte
    from the guest's tlb.
    
    This is implemented at the moment by flushing the entire guest tlb, and can 
be
    improved by flushing just the relevant virtual address, if it is known.
    
    Signed-off-by: Avi Kivity <[EMAIL PROTECTED]>
    Acked-by: Ingo Molnar <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 drivers/kvm/mmu.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/drivers/kvm/mmu.c b/drivers/kvm/mmu.c
index 7761089..2fc2528 100644
--- a/drivers/kvm/mmu.c
+++ b/drivers/kvm/mmu.c
@@ -383,6 +383,7 @@ static void rmap_write_protect(struct kvm_vcpu *vcpu, u64 
gfn)
                BUG_ON(!(*spte & PT_WRITABLE_MASK));
                rmap_printk("rmap_write_protect: spte %p %llx\n", spte, *spte);
                rmap_remove(vcpu, spte);
+               kvm_arch_ops->tlb_flush(vcpu);
                *spte &= ~(u64)PT_WRITABLE_MASK;
        }
 }
@@ -594,6 +595,7 @@ static void kvm_mmu_page_unlink_children(struct kvm_vcpu 
*vcpu,
                                rmap_remove(vcpu, &pt[i]);
                        pt[i] = 0;
                }
+               kvm_arch_ops->tlb_flush(vcpu);
                return;
        }
 
@@ -927,7 +929,10 @@ static inline void set_pte_common(struct kvm_vcpu *vcpu,
                        pgprintk("%s: found shadow page for %lx, marking ro\n",
                                 __FUNCTION__, gfn);
                        access_bits &= ~PT_WRITABLE_MASK;
-                       *shadow_pte &= ~PT_WRITABLE_MASK;
+                       if (is_writeble_pte(*shadow_pte)) {
+                                   *shadow_pte &= ~PT_WRITABLE_MASK;
+                                   kvm_arch_ops->tlb_flush(vcpu);
+                       }
                }
        }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to