@@ -322,7 +322,6 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
322
322
{
323
323
struct kvm_memory_slot * slot ;
324
324
unsigned long pfn = 0 ; /* silence GCC warning */
325
- struct page * page = NULL ;
326
325
unsigned long hva ;
327
326
int pfnmap = 0 ;
328
327
int tsize = BOOK3E_PAGESZ_4K ;
@@ -444,7 +443,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
444
443
445
444
if (likely (!pfnmap )) {
446
445
tsize_pages = 1UL << (tsize + 10 - PAGE_SHIFT );
447
- pfn = __kvm_faultin_pfn (slot , gfn , FOLL_WRITE , NULL , & page );
446
+ pfn = gfn_to_pfn_memslot (slot , gfn );
448
447
if (is_error_noslot_pfn (pfn )) {
449
448
if (printk_ratelimit ())
450
449
pr_err ("%s: real page not found for gfn %lx\n" ,
@@ -489,6 +488,8 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
489
488
}
490
489
}
491
490
writable = kvmppc_e500_ref_setup (ref , gtlbe , pfn , wimg );
491
+ if (writable )
492
+ kvm_set_pfn_dirty (pfn );
492
493
493
494
kvmppc_e500_setup_stlbe (& vcpu_e500 -> vcpu , gtlbe , tsize ,
494
495
ref , gvaddr , stlbe );
@@ -497,7 +498,8 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
497
498
kvmppc_mmu_flush_icache (pfn );
498
499
499
500
out :
500
- kvm_release_faultin_page (kvm , page , !!ret , writable );
501
+ /* Drop refcount on page, so that mmu notifiers can clear it */
502
+ kvm_release_pfn_clean (pfn );
501
503
spin_unlock (& kvm -> mmu_lock );
502
504
return ret ;
503
505
}
0 commit comments