[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86: make get_page_from_mfn() return struct page_info *
commit b13d5a4567a98870450622b1c27a60edfee0fbbc Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Fri Dec 15 11:13:49 2017 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Fri Dec 15 11:13:49 2017 +0100 x86: make get_page_from_mfn() return struct page_info * Almost all users of it want it, and it calculates it anyway. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/mm.c | 22 +++++++++++----------- xen/arch/x86/pv/grant_table.c | 19 ++++++++++--------- xen/arch/x86/pv/ro-page-fault.c | 4 ++-- xen/include/asm-x86/mm.h | 6 +++--- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 0daedec..3eb3380 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -711,7 +711,6 @@ get_##level##_linear_pagetable( \ level##_pgentry_t pde, unsigned long pde_pfn, struct domain *d) \ { \ unsigned long x, y; \ - struct page_info *page; \ unsigned long pfn; \ \ if ( !opt_pv_linear_pt ) \ @@ -730,14 +729,15 @@ get_##level##_linear_pagetable( \ \ if ( (pfn = level##e_get_pfn(pde)) != pde_pfn ) \ { \ - struct page_info *ptpg = mfn_to_page(_mfn(pde_pfn)); \ + struct page_info *page, *ptpg = mfn_to_page(_mfn(pde_pfn)); \ \ /* Make sure the page table belongs to the correct domain. */ \ if ( unlikely(page_get_owner(ptpg) != d) ) \ return 0; \ \ /* Make sure the mapped frame belongs to the correct domain. */ \ - if ( unlikely(!get_page_from_mfn(_mfn(pfn), d)) ) \ + page = get_page_from_mfn(_mfn(pfn), d); \ + if ( unlikely(!page) ) \ return 0; \ \ /* \ @@ -747,7 +747,6 @@ get_##level##_linear_pagetable( \ * elsewhere. \ * If so, atomically increment the count (checking for overflow). \ */ \ - page = mfn_to_page(_mfn(pfn)); \ if ( !inc_linear_entries(ptpg) ) \ { \ put_page(page); \ @@ -3730,7 +3729,8 @@ long do_mmu_update( xsm_checked = xsm_needed; } - if ( unlikely(!get_page_from_mfn(_mfn(mfn), pg_owner)) ) + page = get_page_from_mfn(_mfn(mfn), pg_owner); + if ( unlikely(!page) ) { gdprintk(XENLOG_WARNING, "Could not get page for mach->phys update\n"); @@ -3742,7 +3742,7 @@ long do_mmu_update( paging_mark_dirty(pg_owner, _mfn(mfn)); - put_page(mfn_to_page(_mfn(mfn))); + put_page(page); break; default: @@ -3927,10 +3927,10 @@ static int __do_update_va_mapping( rc = -EINVAL; pl1e = map_guest_l1e(va, &gl1mfn); - if ( unlikely(!pl1e || !get_page_from_mfn(gl1mfn, d)) ) + gl1pg = pl1e ? get_page_from_mfn(gl1mfn, d) : NULL; + if ( unlikely(!gl1pg) ) goto out; - gl1pg = mfn_to_page(gl1mfn); if ( !page_lock(gl1pg) ) { put_page(gl1pg); @@ -4126,10 +4126,10 @@ int xenmem_add_to_physmap_one( put_gfn(d, gfn); return -ENOMEM; } - if ( !get_page_from_mfn(_mfn(idx), d) ) - break; mfn = _mfn(idx); - page = mfn_to_page(mfn); + page = get_page_from_mfn(mfn, d); + if ( unlikely(!page) ) + mfn = INVALID_MFN; break; } case XENMAPSPACE_gmfn_foreign: diff --git a/xen/arch/x86/pv/grant_table.c b/xen/arch/x86/pv/grant_table.c index aaca228..4dbc550 100644 --- a/xen/arch/x86/pv/grant_table.c +++ b/xen/arch/x86/pv/grant_table.c @@ -80,7 +80,8 @@ int create_grant_pv_mapping(uint64_t addr, unsigned long frame, gl1mfn = _mfn(addr >> PAGE_SHIFT); - if ( !get_page_from_mfn(gl1mfn, currd) ) + page = get_page_from_mfn(gl1mfn, currd); + if ( !page ) goto out; pl1e = map_domain_page(gl1mfn) + (addr & ~PAGE_MASK); @@ -101,11 +102,11 @@ int create_grant_pv_mapping(uint64_t addr, unsigned long frame, goto out; } - if ( !get_page_from_mfn(gl1mfn, currd) ) + page = get_page_from_mfn(gl1mfn, currd); + if ( !page ) goto out_unmap; } - page = mfn_to_page(gl1mfn); if ( !page_lock(page) ) goto out_put; @@ -159,10 +160,10 @@ static bool steal_linear_address(unsigned long linear, l1_pgentry_t *out) goto out; } - if ( !get_page_from_mfn(gl1mfn, currd) ) + page = get_page_from_mfn(gl1mfn, currd); + if ( !page ) goto out_unmap; - page = mfn_to_page(gl1mfn); if ( !page_lock(page) ) goto out_put; @@ -235,7 +236,8 @@ int replace_grant_pv_mapping(uint64_t addr, unsigned long frame, gl1mfn = _mfn(addr >> PAGE_SHIFT); - if ( !get_page_from_mfn(gl1mfn, currd) ) + page = get_page_from_mfn(gl1mfn, currd); + if ( !page ) goto out; pl1e = map_domain_page(gl1mfn) + (addr & ~PAGE_MASK); @@ -263,12 +265,11 @@ int replace_grant_pv_mapping(uint64_t addr, unsigned long frame, if ( !pl1e ) goto out; - if ( !get_page_from_mfn(gl1mfn, currd) ) + page = get_page_from_mfn(gl1mfn, currd); + if ( !page ) goto out_unmap; } - page = mfn_to_page(gl1mfn); - if ( !page_lock(page) ) goto out_put; diff --git a/xen/arch/x86/pv/ro-page-fault.c b/xen/arch/x86/pv/ro-page-fault.c index 6b2976d..7e0e7e8 100644 --- a/xen/arch/x86/pv/ro-page-fault.c +++ b/xen/arch/x86/pv/ro-page-fault.c @@ -253,10 +253,10 @@ static int ptwr_do_page_fault(struct x86_emulate_ctxt *ctxt, struct page_info *page; int rc; - if ( !get_page_from_mfn(l1e_get_mfn(pte), current->domain) ) + page = get_page_from_mfn(l1e_get_mfn(pte), current->domain); + if ( !page ) return X86EMUL_UNHANDLEABLE; - page = l1e_get_page(pte); if ( !page_lock(page) ) { put_page(page); diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h index 7e9f306..4af6b23 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -382,7 +382,7 @@ int get_page_from_l1e( l1_pgentry_t l1e, struct domain *l1e_owner, struct domain *pg_owner); void put_page_from_l1e(l1_pgentry_t l1e, struct domain *l1e_owner); -static inline bool get_page_from_mfn(mfn_t mfn, struct domain *d) +static inline struct page_info *get_page_from_mfn(mfn_t mfn, struct domain *d) { struct page_info *page = __mfn_to_page(mfn_x(mfn)); @@ -390,10 +390,10 @@ static inline bool get_page_from_mfn(mfn_t mfn, struct domain *d) { gdprintk(XENLOG_WARNING, "Could not get page ref for mfn %"PRI_mfn"\n", mfn_x(mfn)); - return false; + return NULL; } - return true; + return page; } static inline void put_page_and_type(struct page_info *page) -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |