diff options
author | Søren Sandmann <sandmann@redhat.com> | 2008-09-14 20:07:08 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2008-09-14 20:07:08 +0000 |
commit | b060e05909b8f99a85a3be14fc50c20dff10df1a (patch) | |
tree | 1aa82530cdcb6c16149ed03668a522560269e9e7 /module | |
parent | e11dfce31fa6f8fbcffc49939be5116671e8daf5 (diff) |
Update to work with new vm_operations interface from 2.6.23. Patch from
Sun Sep 14 16:04:17 2008 Søren Sandmann <sandmann@redhat.com>
* sysprof/module/sysprof-module.c: Update to work with new
vm_operations interface from 2.6.23. Patch from Chris Wilson.
svn path=/trunk/; revision=435
Diffstat (limited to 'module')
-rw-r--r-- | module/sysprof-module.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/module/sysprof-module.c b/module/sysprof-module.c index 81c6b10..9adc53e 100644 --- a/module/sysprof-module.c +++ b/module/sysprof-module.c @@ -459,6 +459,29 @@ sysprof_open(struct inode *inode, struct file *file) return retval; } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) +static int +sysprof_fault(struct vm_area_struct *vma, struct vm_fault *vmf) +{ + unsigned long area_start; + unsigned long virt; + +#if 0 + printk (KERN_ALERT "fault called: %p (offset: %d) area: %p\n", vmf->virtual_address, addr - vma->vm_start, area); +#endif + + area_start = (unsigned long)area; + + virt = area_start + ((unsigned long)vmf->virtual_address - vma->vm_start); + if (virt > area_start + sizeof (SysprofMmapArea)) + return VM_FAULT_SIGBUS; + + vmf->page = vmalloc_to_page ((void *)virt); + get_page (vmf->page); + + return 0; +} +#else static struct page * sysprof_nopage(struct vm_area_struct *vma, unsigned long addr, int *type) { @@ -486,12 +509,17 @@ sysprof_nopage(struct vm_area_struct *vma, unsigned long addr, int *type) return page_ptr; } +#endif static int sysprof_mmap(struct file *filp, struct vm_area_struct *vma) { static struct vm_operations_struct ops = { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) + .fault = sysprof_fault, +#else .nopage = sysprof_nopage, +#endif }; if (vma->vm_flags & (VM_WRITE | VM_EXEC)) |