WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] xen: set vma flag VM_PFNMAP in the privcmd mmap

To: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] xen: set vma flag VM_PFNMAP in the privcmd mmap file_op
From: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Date: Thu, 11 Nov 2010 11:40:29 -0500
Cc: Jeremy Fitzhardinge <jeremy@xxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxx, Ian Campbell <Ian.Campbell@xxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx
Delivery-date: Thu, 11 Nov 2010 08:41:30 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <alpine.DEB.2.00.1011111550230.1407@kaball-desktop>
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/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <alpine.DEB.2.00.1011111550230.1407@kaball-desktop>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.20 (2009-06-14)
On Thu, Nov 11, 2010 at 03:55:49PM +0000, Stefano Stabellini wrote:
> Hi all,
> this patch fixes the dom0 kernel crash when creating a VM.
> Now I am able to create VMs successfully on 2.6.37 rc1, even though
> without disk or network access.
> 
> ---
> 
> xen: set vma flag VM_PFNMAP in the privcmd mmap file_op
> 
> Set VM_PFNMAP in the privcmd mmap file_op, rather than later in
> xen_remap_domain_mfn_range when it is too late because
> vma_wants_writenotify has already been called and vm_page_prot has

So vma_wants_writenotify sets the invalid flags on vma->vm_flags?
> already been modified.

By whom? vma_wants_writenotify looks to just return 0 or 1

Ah, depending on that return value it sets vma->vm_page_prot.
That looks odd, so if this:

1215         if (vma_wants_writenotify(vma))
1216                 vma->vm_page_prot = vm_get_page_prot(vm_flags & 
~VM_SHARED);
1217 

does not set the vma->vm_page_prot we never set the vm_page_prot?

.. and it looks to not set that value earlier on either.

So VM_PFNMAP inhibits the mmap code from setting the vm_page_prot.
Is that what we want, not have vma->vm_page_prot set anything? Why?

> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> 
> diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
> index c237b81..2be1f36 100644
> --- a/arch/x86/xen/mmu.c
> +++ b/arch/x86/xen/mmu.c
> @@ -2627,7 +2627,7 @@ int xen_remap_domain_mfn_range(struct vm_area_struct 
> *vma,
>  
>       prot = __pgprot(pgprot_val(prot) | _PAGE_IOMAP);
>  
> -     vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
> +     BUG_ON(!(vma->vm_flags & (VM_PFNMAP | VM_RESERVED | VM_IO)));
>  
>       rmd.mfn = mfn;
>       rmd.prot = prot;
> diff --git a/drivers/xen/xenfs/privcmd.c b/drivers/xen/xenfs/privcmd.c
> index f80be7f..9aab216 100644
> --- a/drivers/xen/xenfs/privcmd.c
> +++ b/drivers/xen/xenfs/privcmd.c
> @@ -385,7 +385,7 @@ static int privcmd_mmap(struct file *file, struct 
> vm_area_struct *vma)
>               return -ENOSYS;
>  
>       /* DONTCOPY is essential for Xen as copy_page_range is broken. */
> -     vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY;
> +     vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY | VM_PFNMAP;
>       vma->vm_ops = &privcmd_vm_ops;
>       vma->vm_private_data = NULL;
>  
> 
> _______________________________________________
> 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

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