|
[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 |