[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86: allow grant table originating ptes to have their guest available
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1225799160 0 # Node ID 6bd021d987d7deef4b3b05def5428b53481127b8 # Parent 43a079fd50fdab01cd2be443bfef011b3b0495ae x86: allow grant table originating ptes to have their guest available bits set. In order to allow 2.6.27's get_user_pages_fast() to correctly detect granted pages (so they would be passed to get_user_pages()), it must be possible to tell the grant table code in Xen to set the three available bits in the pte-s it creates. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> --- xen/arch/x86/mm.c | 4 ++++ xen/common/kernel.c | 3 ++- xen/include/public/features.h | 6 ++++++ xen/include/public/grant_table.h | 9 ++++++++- 4 files changed, 20 insertions(+), 2 deletions(-) diff -r 43a079fd50fd -r 6bd021d987d7 xen/arch/x86/mm.c --- a/xen/arch/x86/mm.c Mon Nov 03 13:36:24 2008 +0000 +++ b/xen/arch/x86/mm.c Tue Nov 04 11:46:00 2008 +0000 @@ -3332,6 +3332,10 @@ int create_grant_host_mapping(uint64_t a if ( !(flags & GNTMAP_readonly) ) l1e_add_flags(pte,_PAGE_RW); + l1e_add_flags(pte, + ((flags >> _GNTMAP_guest_avail0) * _PAGE_AVAIL0) + & _PAGE_AVAIL); + l1e_add_flags(pte, cacheattr_to_pte_flags(cache_flags >> 5)); if ( flags & GNTMAP_contains_pte ) diff -r 43a079fd50fd -r 6bd021d987d7 xen/common/kernel.c --- a/xen/common/kernel.c Mon Nov 03 13:36:24 2008 +0000 +++ b/xen/common/kernel.c Tue Nov 04 11:46:00 2008 +0000 @@ -222,7 +222,8 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDL #ifdef CONFIG_X86 if ( !is_hvm_vcpu(current) ) fi.submap |= (1U << XENFEAT_mmu_pt_update_preserve_ad) | - (1U << XENFEAT_highmem_assist); + (1U << XENFEAT_highmem_assist) | + (1U << XENFEAT_gnttab_map_avail_bits); #endif break; default: diff -r 43a079fd50fd -r 6bd021d987d7 xen/include/public/features.h --- a/xen/include/public/features.h Mon Nov 03 13:36:24 2008 +0000 +++ b/xen/include/public/features.h Tue Nov 04 11:46:00 2008 +0000 @@ -62,6 +62,12 @@ /* x86: Does this Xen host support the MMU_{CLEAR,COPY}_PAGE hypercall? */ #define XENFEAT_highmem_assist 6 +/* + * If set, GNTTABOP_map_grant_ref honors flags to be placed into guest kernel + * available pte bits. + */ +#define XENFEAT_gnttab_map_avail_bits 7 + #define XENFEAT_NR_SUBMAPS 1 #endif /* __XEN_PUBLIC_FEATURES_H__ */ diff -r 43a079fd50fd -r 6bd021d987d7 xen/include/public/grant_table.h --- a/xen/include/public/grant_table.h Mon Nov 03 13:36:24 2008 +0000 +++ b/xen/include/public/grant_table.h Tue Nov 04 11:46:00 2008 +0000 @@ -360,7 +360,7 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_and /* - * Bitfield values for update_pin_status.flags. + * Bitfield values for gnttab_map_grant_ref.flags. */ /* Map the grant entry for access by I/O devices. */ #define _GNTMAP_device_map (0) @@ -388,6 +388,13 @@ DEFINE_XEN_GUEST_HANDLE(gnttab_unmap_and #define GNTMAP_contains_pte (1<<_GNTMAP_contains_pte) /* + * Bits to be placed in guest kernel available PTE bits (architecture + * dependent; only supported when XENFEAT_gnttab_map_avail_bits is set). + */ +#define _GNTMAP_guest_avail0 (16) +#define GNTMAP_guest_avail_mask ((uint32_t)~0 << _GNTMAP_guest_avail0) + +/* * Values for error status returns. All errors are -ve. */ #define GNTST_okay (0) /* Normal return. */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |