aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kvm/44x_tlb.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-07-06 08:23:39 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-06 08:23:39 -0400
commit68083e05d72d94f347293d8cc0067050ba904bfa (patch)
tree842e71365bd90866be7add181661a4039d891564 /arch/powerpc/kvm/44x_tlb.c
parent7baac8b91f9871ba8cb09af84de4ae1d86d07812 (diff)
parentb7279469d66b55119784b8b9529c99c1955fe747 (diff)
Merge commit 'v2.6.26-rc9' into cpus4096
Diffstat (limited to 'arch/powerpc/kvm/44x_tlb.c')
-rw-r--r--arch/powerpc/kvm/44x_tlb.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/arch/powerpc/kvm/44x_tlb.c b/arch/powerpc/kvm/44x_tlb.c
index f5d7a5eab96e..75dff7cfa814 100644
--- a/arch/powerpc/kvm/44x_tlb.c
+++ b/arch/powerpc/kvm/44x_tlb.c
@@ -116,8 +116,6 @@ static void kvmppc_44x_shadow_release(struct kvm_vcpu *vcpu,
116 struct tlbe *stlbe = &vcpu->arch.shadow_tlb[index]; 116 struct tlbe *stlbe = &vcpu->arch.shadow_tlb[index];
117 struct page *page = vcpu->arch.shadow_pages[index]; 117 struct page *page = vcpu->arch.shadow_pages[index];
118 118
119 kunmap(vcpu->arch.shadow_pages[index]);
120
121 if (get_tlb_v(stlbe)) { 119 if (get_tlb_v(stlbe)) {
122 if (kvmppc_44x_tlbe_is_writable(stlbe)) 120 if (kvmppc_44x_tlbe_is_writable(stlbe))
123 kvm_release_page_dirty(page); 121 kvm_release_page_dirty(page);
@@ -144,18 +142,19 @@ void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 gvaddr, gfn_t gfn, u64 asid,
144 stlbe = &vcpu->arch.shadow_tlb[victim]; 142 stlbe = &vcpu->arch.shadow_tlb[victim];
145 143
146 /* Get reference to new page. */ 144 /* Get reference to new page. */
147 down_write(&current->mm->mmap_sem); 145 down_read(&current->mm->mmap_sem);
148 new_page = gfn_to_page(vcpu->kvm, gfn); 146 new_page = gfn_to_page(vcpu->kvm, gfn);
149 if (is_error_page(new_page)) { 147 if (is_error_page(new_page)) {
150 printk(KERN_ERR "Couldn't get guest page!\n"); 148 printk(KERN_ERR "Couldn't get guest page for gfn %lx!\n", gfn);
151 kvm_release_page_clean(new_page); 149 kvm_release_page_clean(new_page);
150 up_read(&current->mm->mmap_sem);
152 return; 151 return;
153 } 152 }
154 hpaddr = page_to_phys(new_page); 153 hpaddr = page_to_phys(new_page);
155 154
156 /* Drop reference to old page. */ 155 /* Drop reference to old page. */
157 kvmppc_44x_shadow_release(vcpu, victim); 156 kvmppc_44x_shadow_release(vcpu, victim);
158 up_write(&current->mm->mmap_sem); 157 up_read(&current->mm->mmap_sem);
159 158
160 vcpu->arch.shadow_pages[victim] = new_page; 159 vcpu->arch.shadow_pages[victim] = new_page;
161 160