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

[Xen-devel] Question about grant table

  • To: "xen-devel@xxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxx>
  • From: Ruslan Nikolaev <nruslan_devel@xxxxxxxxx>
  • Date: Mon, 23 Apr 2012 14:13:53 -0700 (PDT)
  • Delivery-date: Mon, 23 Apr 2012 21:14:29 +0000
  • Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=X-YMail-OSG:Received:X-Mailer:Message-ID:Date:From:Reply-To:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=10WmB8ArKncc6Y7EHntcy9ncXHD/tZbtTQ1Q0QPxI6aGysZMfNXnq6wwloyneu62lJxxHUDyXtyqiNWNGMbqpKkU73w2/c2zVnDMewI87evojx5oxNNl3QdiPgeN2kYVDewmJePgeoYTpbKAYgK5CcjNdx+yHerOPfU4AwYdEYo=;
  • List-id: Xen developer discussion <xen-devel.lists.xen.org>


I have a question regarding a grant table. I have a case when I have some 
shared (between domains) pages mapped to the user space. I created a special 
driver which implements mmap(). That, in turns, will execute gnttab_map_refs(). 
This all works fine until I want to do something like exec().

After I do exec(), I want to mmap() the *same* pages (i.e. using the same grant 
references) to some new user address space which is chosen by mmap(). During 
exec(), it will invalidate user address space, and  release() from mmu_notifier 
will be called. This means, that my driver will execute gnttab_unmap_refs. 
After exec() succeeded, I invoke mmap() again which will do gnttab_map_refs().

At this point I get kernel errors like this:
[  198.939095] BUG: Bad page map in process a.out  pte:80000002457f1167 
[  198.939099] page:ffffea000915fc40 count:1 mapcount:-1 mapping:          
(null) index:0xffff8802d958f720
[  198.939102] page flags: 0x8000000000000814(referenced|dirty|private)
[  198.939109] addr:00007fd302f40000 vm_flags:000e00fb anon_vma:          
(null) mapping:ffff8802d782f760 index:0
[  198.939124] vma->vm_ops->fault: 0x0
[  198.939128] vma->vm_file->f_op->mmap: syscall_driver_mmap+0x0/0xc9 

So, I have two questions in this regard:
1. Does gnttab_unmap_refs removes grant references, so that I cannot use them 
any longer? What would be proper way to preserve grant references but at the 
same time unmap from the current user address space shared pages?

2. What happens to the counters like count, mapcount when I do 
gnttab_map_refs() and gnntab_unmap_refs()?


Xen-devel mailing list



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