summaryrefslogtreecommitdiff
path: root/module
diff options
context:
space:
mode:
authorSøren Sandmann <sandmann@redhat.com>2008-09-14 20:07:08 +0000
committerSøren Sandmann Pedersen <ssp@src.gnome.org>2008-09-14 20:07:08 +0000
commitb060e05909b8f99a85a3be14fc50c20dff10df1a (patch)
tree1aa82530cdcb6c16149ed03668a522560269e9e7 /module
parente11dfce31fa6f8fbcffc49939be5116671e8daf5 (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.c28
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))