Xen 
 
Home About Xen.org Xen Xen Summit Wiki Mailing List Bug Tracker Xen Downloads
 
   
 

xen-devel

[Xen-devel] Re: [Xen-staging] [xen-unstable] linux: Add a hook before a

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] Re: [Xen-staging] [xen-unstable] linux: Add a hook before a page table entry is cleared, for use with
From: Alex Williamson <alex.williamson@xxxxxx>
Date: Sat, 31 Mar 2007 09:56:35 -0600
Delivery-date: Sat, 31 Mar 2007 16:57:53 +0100
Envelope-to: Keir.Fraser@xxxxxxxxxxxx
In-reply-to: <200703311252.l2VCqJiC019689@xxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: HP OSLO R&D
References: <200703311252.l2VCqJiC019689@xxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
   This doesn't work very well for archs that don't define
__HAVE_ARCH_PTEP_GET_AND_CLEAR_FULL as ptep_get_and_clear_full is then
defined as a macro.  I'd suggest a different name to avoid conflicts.
Thanks,

        Alex


On Sat, 2007-03-31 at 13:52 +0100, Xen staging patchbot-unstable wrote:
> # HG changeset patch
> # User Keir Fraser <keir@xxxxxxxxxxxxx>
> # Date 1175341322 -3600
> # Node ID 7180d2e61f926023e24750c53fd4203a71f2a3ae
> # Parent  2de267ba9a76e1358601505e16786969f317aa7d
> linux: Add a hook before a page table entry is cleared, for use with
> the grant-table device.
> 
> Signed-off-by: Derek Murray <Derek.Murray@xxxxxxxxxxxx>
> ---
>  linux-2.6-xen-sparse/include/linux/mm.h |    5 +++++
>  linux-2.6-xen-sparse/mm/memory.c        |   12 ++++++++++--
>  2 files changed, 15 insertions(+), 2 deletions(-)
> 
> diff -r 2de267ba9a76 -r 7180d2e61f92 linux-2.6-xen-sparse/include/linux/mm.h
> --- a/linux-2.6-xen-sparse/include/linux/mm.h Sat Mar 31 12:26:04 2007 +0100
> +++ b/linux-2.6-xen-sparse/include/linux/mm.h Sat Mar 31 12:42:02 2007 +0100
> @@ -205,6 +205,11 @@ struct vm_operations_struct {
>       /* notification that a previously read-only page is about to become
>        * writable, if an error is returned it will cause a SIGBUS */
>       int (*page_mkwrite)(struct vm_area_struct *vma, struct page *page);
> +     /* Area-specific function for clearing the PTE at @ptep. Returns the
> +      * original value of @ptep. */
> +     pte_t (*ptep_get_and_clear_full)(struct vm_area_struct *vma, 
> +                                      unsigned long addr, pte_t *ptep, 
> +                                      int is_fullmm);
>  #ifdef CONFIG_NUMA
>       int (*set_policy)(struct vm_area_struct *vma, struct mempolicy *new);
>       struct mempolicy *(*get_policy)(struct vm_area_struct *vma,
> diff -r 2de267ba9a76 -r 7180d2e61f92 linux-2.6-xen-sparse/mm/memory.c
> --- a/linux-2.6-xen-sparse/mm/memory.c        Sat Mar 31 12:26:04 2007 +0100
> +++ b/linux-2.6-xen-sparse/mm/memory.c        Sat Mar 31 12:42:02 2007 +0100
> @@ -659,8 +659,15 @@ static unsigned long zap_pte_range(struc
>                                    page->index > details->last_index))
>                                       continue;
>                       }
> -                     ptent = ptep_get_and_clear_full(mm, addr, pte,
> -                                                     tlb->fullmm);
> +                     if (unlikely(vma->vm_ops && 
> +                                  vma->vm_ops->ptep_get_and_clear_full))
> +                             ptent = vma->vm_ops->
> +                                     ptep_get_and_clear_full(vma, addr,
> +                                                             pte,
> +                                                             tlb->fullmm);
> +                     else
> +                             ptent = ptep_get_and_clear_full(mm, addr, pte,
> +                                                             tlb->fullmm);
>                       tlb_remove_tlb_entry(tlb, pte, addr);
>                       if (unlikely(!page))
>                               continue;
> @@ -755,6 +762,7 @@ static unsigned long unmap_page_range(st
>               details = NULL;
>  
>       BUG_ON(addr >= end);
> +
>       tlb_start_vma(tlb, vma);
>       pgd = pgd_offset(vma->vm_mm, addr);
>       do {
> 
> _______________________________________________
> Xen-staging mailing list
> Xen-staging@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-staging
> 
-- 
Alex Williamson                             HP Open Source & Linux Org.


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


<Prev in Thread] Current Thread [Next in Thread>