[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3] xen: grant-table: Simplify get_paged_frame
On 19/09/17 12:26, Wei Liu wrote: > On Tue, Sep 19, 2017 at 12:22:28PM +0100, Julien Grall wrote: >> diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c >> index c3895e6201..b7deb57b85 100644 >> --- a/xen/common/grant_table.c >> +++ b/xen/common/grant_table.c >> @@ -259,34 +259,34 @@ static int get_paged_frame(unsigned long gfn, unsigned >> long *frame, >> struct domain *rd) >> { >> int rc = GNTST_okay; >> -#if defined(P2M_PAGED_TYPES) || defined(P2M_SHARED_TYPES) >> p2m_type_t p2mt; >> >> *page = get_page_from_gfn(rd, gfn, &p2mt, >> - (readonly) ? P2M_ALLOC : P2M_UNSHARE); >> - if ( !(*page) ) >> + readonly ? P2M_ALLOC : P2M_UNSHARE); >> + if ( !*page ) >> { >> *frame = mfn_x(INVALID_MFN); >> +#ifdef P2M_SHARED_TYPES >> if ( p2m_is_shared(p2mt) ) >> return GNTST_eagain; >> +#endif >> +#ifdef P2M_PAGES_TYPES >> if ( p2m_is_paging(p2mt) ) >> { >> p2m_mem_paging_populate(rd, gfn); >> return GNTST_eagain; >> } >> +#endif >> return GNTST_bad_page; >> } >> - *frame = page_to_mfn(*page); >> -#else >> - *frame = mfn_x(gfn_to_mfn(rd, _gfn(gfn))); >> - *page = mfn_valid(_mfn(*frame)) ? mfn_to_page(*frame) : NULL; >> - if ( (!(*page)) || (!get_page(*page, rd)) ) >> + >> + if ( p2m_is_foreign(p2mt) ) >> { >> - *frame = mfn_x(INVALID_MFN); >> - *page = NULL; >> - rc = GNTST_bad_page; >> + put_page(*page); > > Please set page to NULL and frame to INVALID_MFN to match the comment of > the function. > > I suppose you can set *frame = INVALID_MFN at the beginning of the > function to avoid code duplication in two error paths. > > With that: > > Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx> Would the below patch be fine? diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c index c3895e6201..dc1bacacb0 100644 --- a/xen/common/grant_table.c +++ b/xen/common/grant_table.c @@ -259,34 +259,36 @@ static int get_paged_frame(unsigned long gfn, unsigned long *frame, struct domain *rd) { int rc = GNTST_okay; -#if defined(P2M_PAGED_TYPES) || defined(P2M_SHARED_TYPES) p2m_type_t p2mt; + *frame = mfn_x(INVALID_MFN); *page = get_page_from_gfn(rd, gfn, &p2mt, - (readonly) ? P2M_ALLOC : P2M_UNSHARE); - if ( !(*page) ) + readonly ? P2M_ALLOC : P2M_UNSHARE); + if ( !*page ) { - *frame = mfn_x(INVALID_MFN); +#ifdef P2M_SHARED_TYPES if ( p2m_is_shared(p2mt) ) return GNTST_eagain; +#endif +#ifdef P2M_PAGES_TYPES if ( p2m_is_paging(p2mt) ) { p2m_mem_paging_populate(rd, gfn); return GNTST_eagain; } +#endif return GNTST_bad_page; } - *frame = page_to_mfn(*page); -#else - *frame = mfn_x(gfn_to_mfn(rd, _gfn(gfn))); - *page = mfn_valid(_mfn(*frame)) ? mfn_to_page(*frame) : NULL; - if ( (!(*page)) || (!get_page(*page, rd)) ) + + if ( p2m_is_foreign(p2mt) ) { - *frame = mfn_x(INVALID_MFN); + put_page(*page); *page = NULL; - rc = GNTST_bad_page; + + return GNTST_bad_page; } -#endif + + *frame = page_to_mfn(*page); return rc; } -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |