[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] x86: allow grant table originating pte-s to have their guest available bits set


  • To: Jan Beulich <jbeulich@xxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
  • Date: Tue, 04 Nov 2008 11:46:23 +0000
  • Cc:
  • Delivery-date: Tue, 04 Nov 2008 03:46:46 -0800
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: Ack+cvXuNFgAJKpmEd2w0QAX8io7RQ==
  • Thread-topic: [Xen-devel] [PATCH] x86: allow grant table originating pte-s to have their guest available bits set

Applied, thanks. I assume backport at least to 3.3 would be desirable?

 -- Keir

On 3/11/08 14:44, "Jan Beulich" <jbeulich@xxxxxxxxxx> wrote:

> 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.
> 
> While not applicable to the 2.6.18 tree, I'm nevertheless attaching our
> Linux side patch for reference.
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
> 
> Index: 2008-10-27/xen/arch/x86/mm.c
> ===================================================================
> --- 2008-10-27.orig/xen/arch/x86/mm.c 2008-10-31 16:13:56.000000000 +0100
> +++ 2008-10-27/xen/arch/x86/mm.c 2008-10-31 17:41:12.000000000 +0100
> @@ -3326,6 +3326,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 )
> Index: 2008-10-27/xen/common/kernel.c
> ===================================================================
> --- 2008-10-27.orig/xen/common/kernel.c 2008-10-27 11:25:15.000000000 +0100
> +++ 2008-10-27/xen/common/kernel.c 2008-10-31 17:17:30.000000000 +0100
> @@ -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:
> Index: 2008-10-27/xen/include/public/features.h
> ===================================================================
> --- 2008-10-27.orig/xen/include/public/features.h 2008-10-27
> 11:24:26.000000000 +0100
> +++ 2008-10-27/xen/include/public/features.h 2008-10-31 17:03:12.000000000
> +0100
> @@ -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__ */
> Index: 2008-10-27/xen/include/public/grant_table.h
> ===================================================================
> --- 2008-10-27.orig/xen/include/public/grant_table.h 2007-12-07
> 11:51:50.000000000 +0100
> +++ 2008-10-27/xen/include/public/grant_table.h 2008-10-31 17:10:21.000000000
> +0100
> @@ -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-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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