[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.