Hi 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 pmd:245094067 [ 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 [syscall_driver] 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()? Thanks, Ruslan
>>> On 23.04.12 at 23:13, Ruslan Nikolaev <nruslan_devel@yahoo.com> wrote: > Hi > > 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 > pmd:245094067 > [ 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 > [syscall_driver]This I cannot spot in the upstream kernel (and you also didn''t indicate that you use something different), so I think you need to start investigation at that end. Jan> 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()? > > Thanks, > Ruslan > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel
Ok. Can you tell what ''clear_pte'' for gnttab_unmap_refs exactly do? Ruslan. ----- Original Message ----- From: Jan Beulich <JBeulich@suse.com> To: Ruslan Nikolaev <nruslan_devel@yahoo.com> Cc: "xen-devel@lists.xen.org" <xen-devel@lists.xen.org> Sent: Tuesday, April 24, 2012 3:58 AM Subject: Re: [Xen-devel] Question about grant table>>> On 23.04.12 at 23:13, Ruslan Nikolaev <nruslan_devel@yahoo.com> wrote: > Hi > > 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 > pmd:245094067 > [ 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 > [syscall_driver]This I cannot spot in the upstream kernel (and you also didn''t indicate that you use something different), so I think you need to start investigation at that end. Jan> 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()? > > Thanks, > Ruslan > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel