[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC] xen/grant_table: deprecate GNTTABOP_unmap_and_replace
On Sun, Jul 21, 2013 at 06:34:59PM +0100, Stefano Stabellini wrote: > GNTTABOP_unmap_and_replace has two issues: > - it unconditionally replaces the mapping passed in new_addr with 0; OK, so the caller needs to save this. Perhaps you can also add a patch to the header file to mention this bug since this API call is quite "baked" > - it doesn't support GNTMAP_contains_pte mappings on x86, returning a > general error instead of some forms of ENOSYS. Is there a specific version of Xen that has this differently? If the generel error is replaced with a proper ENOSYS what is the fallout? > > Deprecate GNTTABOP_unmap_and_replace and introduce a new > GNTTABOP_unmap_and_replace (12) that returns GNTST_enosys for > GNTMAP_contains_pte requests and doesn't zero the mapping at new_addr. Or just introduce v2 of said call and leave the old one as is. The Linux code can try the new one during bootup and if it fails use the fallback. > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > --- > xen/arch/x86/mm.c | 12 +----------- > xen/include/public/grant_table.h | 7 ++++--- > 2 files changed, 5 insertions(+), 14 deletions(-) > > diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c > index 77dcafc..610fd09 100644 > --- a/xen/arch/x86/mm.c > +++ b/xen/arch/x86/mm.c > @@ -4064,7 +4064,7 @@ int replace_grant_host_mapping( > return destroy_grant_pte_mapping(addr, frame, curr->domain); > > MEM_LOG("Unsupported grant table operation"); > - return GNTST_general_error; > + return GNTST_enosys; > } > > if ( !new_addr ) > @@ -4102,16 +4102,6 @@ int replace_grant_host_mapping( > > ol1e = *pl1e; > > - if ( unlikely(!UPDATE_ENTRY(l1, pl1e, ol1e, l1e_empty(), > - gl1mfn, curr, 0)) ) > - { > - page_unlock(l1pg); > - put_page(l1pg); > - MEM_LOG("Cannot delete PTE entry at %p", (unsigned long *)pl1e); > - guest_unmap_l1e(curr, pl1e); > - return GNTST_general_error; > - } > - > page_unlock(l1pg); > put_page(l1pg); > guest_unmap_l1e(curr, pl1e); > diff --git a/xen/include/public/grant_table.h > b/xen/include/public/grant_table.h > index b8a3d6c..ae841ae 100644 > --- a/xen/include/public/grant_table.h > +++ b/xen/include/public/grant_table.h > @@ -303,12 +303,13 @@ typedef uint16_t grant_status_t; > #define GNTTABOP_transfer 4 > #define GNTTABOP_copy 5 > #define GNTTABOP_query_size 6 > -#define GNTTABOP_unmap_and_replace 7 > +#define GNTTABOP_unmap_and_replace_legacy 7 > #if __XEN_INTERFACE_VERSION__ >= 0x0003020a > #define GNTTABOP_set_version 8 > #define GNTTABOP_get_status_frames 9 > #define GNTTABOP_get_version 10 > #define GNTTABOP_swap_grant_ref 11 > +#define GNTTABOP_unmap_and_replace 12 > #endif /* __XEN_INTERFACE_VERSION__ */ > /* ` } */ > > @@ -489,8 +490,7 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_query_size_t); > /* > * GNTTABOP_unmap_and_replace: Destroy one or more grant-reference mappings > * tracked by <handle> but atomically replace the page table entry with one > - * pointing to the machine address under <new_addr>. <new_addr> will be > - * redirected to the null entry. > + * pointing to the machine address under <new_addr>. > * NOTES: > * 1. The call may fail in an undefined manner if either mapping is not > * tracked by <handle>. > @@ -631,6 +631,7 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_swap_grant_ref_t); > #define GNTST_bad_copy_arg (-10) /* copy arguments cross page boundary. > */ > #define GNTST_address_too_big (-11) /* transfer page address too large. > */ > #define GNTST_eagain (-12) /* Operation not done; try again. > */ > +#define GNTST_enosys (-13) /* Operation not implemented. > */ > /* ` } */ > > #define GNTTABOP_error_msgs { \ > -- > 1.7.2.5 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |