From b060e05909b8f99a85a3be14fc50c20dff10df1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann?= Date: Sun, 14 Sep 2008 20:07:08 +0000 Subject: [PATCH] Update to work with new vm_operations interface from 2.6.23. Patch from MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sun Sep 14 16:04:17 2008 Søren Sandmann * 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 --- ChangeLog | 5 +++++ module/sysprof-module.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/ChangeLog b/ChangeLog index b5011930..0b2c85c3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sun Sep 14 16:04:17 2008 Søren Sandmann + + * sysprof/module/sysprof-module.c: Update to work with new + vm_operations interface from 2.6.23. Patch from Chris Wilson. + Wed Jun 4 21:52:17 2008 Søren Sandmann * demangle.c: Apply patch from binutils to demangle local-source diff --git a/module/sysprof-module.c b/module/sysprof-module.c index 81c6b102..9adc53e9 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))