diff options
Diffstat (limited to 'arch/powerpc/kvm')
-rw-r--r-- | arch/powerpc/kvm/44x_tlb.c | 15 | ||||
-rw-r--r-- | arch/powerpc/kvm/emulate.c | 4 |
2 files changed, 18 insertions, 1 deletions
diff --git a/arch/powerpc/kvm/44x_tlb.c b/arch/powerpc/kvm/44x_tlb.c index 5a5602da5091..a207d16b9dbb 100644 --- a/arch/powerpc/kvm/44x_tlb.c +++ b/arch/powerpc/kvm/44x_tlb.c | |||
@@ -19,6 +19,7 @@ | |||
19 | 19 | ||
20 | #include <linux/types.h> | 20 | #include <linux/types.h> |
21 | #include <linux/string.h> | 21 | #include <linux/string.h> |
22 | #include <linux/kvm.h> | ||
22 | #include <linux/kvm_host.h> | 23 | #include <linux/kvm_host.h> |
23 | #include <linux/highmem.h> | 24 | #include <linux/highmem.h> |
24 | #include <asm/mmu-44x.h> | 25 | #include <asm/mmu-44x.h> |
@@ -175,6 +176,10 @@ void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 gvaddr, gfn_t gfn, u64 asid, | |||
175 | stlbe->word1 = (hpaddr & 0xfffffc00) | ((hpaddr >> 32) & 0xf); | 176 | stlbe->word1 = (hpaddr & 0xfffffc00) | ((hpaddr >> 32) & 0xf); |
176 | stlbe->word2 = kvmppc_44x_tlb_shadow_attrib(flags, | 177 | stlbe->word2 = kvmppc_44x_tlb_shadow_attrib(flags, |
177 | vcpu->arch.msr & MSR_PR); | 178 | vcpu->arch.msr & MSR_PR); |
179 | |||
180 | KVMTRACE_5D(STLB_WRITE, vcpu, victim, | ||
181 | stlbe->tid, stlbe->word0, stlbe->word1, stlbe->word2, | ||
182 | handler); | ||
178 | } | 183 | } |
179 | 184 | ||
180 | void kvmppc_mmu_invalidate(struct kvm_vcpu *vcpu, gva_t eaddr, | 185 | void kvmppc_mmu_invalidate(struct kvm_vcpu *vcpu, gva_t eaddr, |
@@ -204,6 +209,9 @@ void kvmppc_mmu_invalidate(struct kvm_vcpu *vcpu, gva_t eaddr, | |||
204 | 209 | ||
205 | kvmppc_44x_shadow_release(vcpu, i); | 210 | kvmppc_44x_shadow_release(vcpu, i); |
206 | stlbe->word0 = 0; | 211 | stlbe->word0 = 0; |
212 | KVMTRACE_5D(STLB_INVAL, vcpu, i, | ||
213 | stlbe->tid, stlbe->word0, stlbe->word1, | ||
214 | stlbe->word2, handler); | ||
207 | } | 215 | } |
208 | up_write(¤t->mm->mmap_sem); | 216 | up_write(¤t->mm->mmap_sem); |
209 | } | 217 | } |
@@ -217,8 +225,13 @@ void kvmppc_mmu_priv_switch(struct kvm_vcpu *vcpu, int usermode) | |||
217 | /* XXX Replace loop with fancy data structures. */ | 225 | /* XXX Replace loop with fancy data structures. */ |
218 | down_write(¤t->mm->mmap_sem); | 226 | down_write(¤t->mm->mmap_sem); |
219 | for (i = 0; i <= tlb_44x_hwater; i++) { | 227 | for (i = 0; i <= tlb_44x_hwater; i++) { |
228 | struct tlbe *stlbe = &vcpu->arch.shadow_tlb[i]; | ||
229 | |||
220 | kvmppc_44x_shadow_release(vcpu, i); | 230 | kvmppc_44x_shadow_release(vcpu, i); |
221 | vcpu->arch.shadow_tlb[i].word0 = 0; | 231 | stlbe->word0 = 0; |
232 | KVMTRACE_5D(STLB_INVAL, vcpu, i, | ||
233 | stlbe->tid, stlbe->word0, stlbe->word1, | ||
234 | stlbe->word2, handler); | ||
222 | } | 235 | } |
223 | up_write(¤t->mm->mmap_sem); | 236 | up_write(¤t->mm->mmap_sem); |
224 | } | 237 | } |
diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c index 8c605d0a5488..4a3e274bac12 100644 --- a/arch/powerpc/kvm/emulate.c +++ b/arch/powerpc/kvm/emulate.c | |||
@@ -170,6 +170,10 @@ static int kvmppc_emul_tlbwe(struct kvm_vcpu *vcpu, u32 inst) | |||
170 | kvmppc_mmu_map(vcpu, eaddr, raddr >> PAGE_SHIFT, asid, flags); | 170 | kvmppc_mmu_map(vcpu, eaddr, raddr >> PAGE_SHIFT, asid, flags); |
171 | } | 171 | } |
172 | 172 | ||
173 | KVMTRACE_5D(GTLB_WRITE, vcpu, index, | ||
174 | tlbe->tid, tlbe->word0, tlbe->word1, tlbe->word2, | ||
175 | handler); | ||
176 | |||
173 | return EMULATE_DONE; | 177 | return EMULATE_DONE; |
174 | } | 178 | } |
175 | 179 | ||