All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	xen-devel@lists.xensource.com,
	Ian Campbell <Ian.Campbell@citrix.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [Xen-devel] [PATCH] xen: set vma flag VM_PFNMAP in the privcmd mmap file_op
Date: Thu, 11 Nov 2010 09:21:34 -0800	[thread overview]
Message-ID: <4CDC261E.5060106@goop.org> (raw)
In-Reply-To: <20101111164029.GB29405@dumpdata.com>

On 11/11/2010 08:40 AM, Konrad Rzeszutek Wilk wrote:
> 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?

It is already set unconditionally earlier in mmap_region().  The
writenotify stuff will knobble the mapping to be RO so we can track the
first write with faults, but we don't want that in this case.

The VM_PFNMAP flag is generally correct anyway, since it means that the
mapping is of a random PFN which no corresponding struct page.

    J

>> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
>>
>> 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@lists.xensource.com
>> http://lists.xensource.com/xen-devel
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>


  reply	other threads:[~2010-11-11 17:21 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-11 15:55 [PATCH] xen: set vma flag VM_PFNMAP in the privcmd mmap file_op Stefano Stabellini
2010-11-11 16:40 ` [Xen-devel] " Konrad Rzeszutek Wilk
2010-11-11 17:21   ` Jeremy Fitzhardinge [this message]
2010-11-11 17:42     ` Stefano Stabellini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CDC261E.5060106@goop.org \
    --to=jeremy@goop.org \
    --cc=Ian.Campbell@citrix.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.