Update to work with new vm_operations interface from 2.6.23. Patch from
authorSøren Sandmann <sandmann@redhat.com>
Sun, 14 Sep 2008 20:07:08 +0000 (20:07 +0000)
committerSøren Sandmann Pedersen <ssp@src.gnome.org>
Sun, 14 Sep 2008 20:07:08 +0000 (20:07 +0000)
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

ChangeLog
module/sysprof-module.c

index b501193..0b2c85c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+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.
+
 Wed Jun  4 21:52:17 2008  Søren Sandmann  <sandmann@redhat.com>
 
        * demangle.c: Apply patch from binutils to demangle local-source
index 81c6b10..9adc53e 100644 (file)
@@ -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))