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
|