@@ -210,7 +210,7 @@ long kvmppc_do_h_enter(struct kvm *kvm, unsigned long flags,
210
210
pte_t * ptep ;
211
211
unsigned int writing ;
212
212
unsigned long mmu_seq ;
213
- unsigned long rcbits , irq_flags = 0 ;
213
+ unsigned long rcbits ;
214
214
215
215
if (kvm_is_radix (kvm ))
216
216
return H_FUNCTION ;
@@ -248,17 +248,9 @@ long kvmppc_do_h_enter(struct kvm *kvm, unsigned long flags,
248
248
249
249
/* Translate to host virtual address */
250
250
hva = __gfn_to_hva_memslot (memslot , gfn );
251
- /*
252
- * If we had a page table table change after lookup, we would
253
- * retry via mmu_notifier_retry.
254
- */
255
- if (!realmode )
256
- local_irq_save (irq_flags );
257
- /*
258
- * If called in real mode we have MSR_EE = 0. Otherwise
259
- * we disable irq above.
260
- */
261
- ptep = __find_linux_pte (pgdir , hva , NULL , & hpage_shift );
251
+
252
+ arch_spin_lock (& kvm -> mmu_lock .rlock .raw_lock );
253
+ ptep = find_kvm_host_pte (kvm , mmu_seq , hva , & hpage_shift );
262
254
if (ptep ) {
263
255
pte_t pte ;
264
256
unsigned int host_pte_size ;
@@ -272,8 +264,7 @@ long kvmppc_do_h_enter(struct kvm *kvm, unsigned long flags,
272
264
* to <= host page size, if host is using hugepage
273
265
*/
274
266
if (host_pte_size < psize ) {
275
- if (!realmode )
276
- local_irq_restore (flags );
267
+ arch_spin_unlock (& kvm -> mmu_lock .rlock .raw_lock );
277
268
return H_PARAMETER ;
278
269
}
279
270
pte = kvmppc_read_update_linux_pte (ptep , writing );
@@ -287,8 +278,7 @@ long kvmppc_do_h_enter(struct kvm *kvm, unsigned long flags,
287
278
pa |= gpa & ~PAGE_MASK ;
288
279
}
289
280
}
290
- if (!realmode )
291
- local_irq_restore (irq_flags );
281
+ arch_spin_unlock (& kvm -> mmu_lock .rlock .raw_lock );
292
282
293
283
ptel &= HPTE_R_KEY | HPTE_R_PP0 | (psize - 1 );
294
284
ptel |= pa ;
0 commit comments