Hi, folks,

as Ross mentioned four days ago, nopfn has gone from the kernel tree. Therefore we need to adapt drm_vm.c to use fault instead.
What do you think about the attached patch?

Cheers, Johannes
>From ba506005a6e7f7beaaedad7919eebf44b6e6db5b Mon Sep 17 00:00:00 2001
From: Johannes Engel <[EMAIL PROTECTED]>
Date: Tue, 29 Jul 2008 18:02:50 +0100
Subject: [PATCH 1/1] Replace nopfn by fault
 This is necessary since kernel 2.6.27 will ship whithout nopfn

Signed-off-by: Johannes Engel <[EMAIL PROTECTED]>
---
 linux-core/drm_vm.c |   27 ++++++++++++++-------------
 1 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/linux-core/drm_vm.c b/linux-core/drm_vm.c
index 6618c0a..ffe7d8a 100644
--- a/linux-core/drm_vm.c
+++ b/linux-core/drm_vm.c
@@ -699,8 +699,8 @@ EXPORT_SYMBOL(drm_mmap);
  */
 
 #ifdef DRM_FULL_MM_COMPAT
-static unsigned long drm_bo_vm_nopfn(struct vm_area_struct *vma,
-				     unsigned long address)
+static int drm_bo_vm_fault(struct vm_area_struct *vma,
+			   struct vm_fault *vmf)
 {
 	struct drm_buffer_object *bo = (struct drm_buffer_object *) vma->vm_private_data;
 	unsigned long page_offset;
@@ -708,29 +708,30 @@ static unsigned long drm_bo_vm_nopfn(struct vm_area_struct *vma,
 	struct drm_ttm *ttm;
 	struct drm_device *dev;
 	unsigned long pfn;
+	unsigned long address = (unsigned long)vmf->virtual_address;
 	int err;
 	unsigned long bus_base;
 	unsigned long bus_offset;
 	unsigned long bus_size;
-	unsigned long ret = NOPFN_REFAULT;
+	int ret = VM_FAULT_NOPAGE;
 
 	if (address > vma->vm_end)
-		return NOPFN_SIGBUS;
+		return VM_FAULT_SIGBUS;
 
 	dev = bo->dev;
 	err = drm_bo_read_lock(&dev->bm.bm_lock, 1);
 	if (err)
-		return NOPFN_REFAULT;
+		return VM_FAULT_NOPAGE;
 
 	err = mutex_lock_interruptible(&bo->mutex);
 	if (err) {
 		drm_bo_read_unlock(&dev->bm.bm_lock);
-		return NOPFN_REFAULT;
+		return VM_FAULT_NOPAGE;
 	}
 
 	err = drm_bo_wait(bo, 0, 1, 0, 1);
 	if (err) {
-		ret = (err != -EAGAIN) ? NOPFN_SIGBUS : NOPFN_REFAULT;
+		ret = (err != -EAGAIN) ? VM_FAULT_SIGBUS : VM_FAULT_NOPAGE;
 		bo->priv_flags &= ~_DRM_BO_FLAG_UNLOCKED;
 		goto out_unlock;
 	}
@@ -748,7 +749,7 @@ static unsigned long drm_bo_vm_nopfn(struct vm_area_struct *vma,
 			DRM_BO_FLAG_FORCE_MAPPABLE;
 		err = drm_bo_move_buffer(bo, new_flags, 0, 0);
 		if (err) {
-			ret = (err != -EAGAIN) ? NOPFN_SIGBUS : NOPFN_REFAULT;
+			ret = (err != -EAGAIN) ? VM_FAULT_SIGBUS : VM_FAULT_NOPAGE;
 			goto out_unlock;
 		}
 	}
@@ -757,11 +758,11 @@ static unsigned long drm_bo_vm_nopfn(struct vm_area_struct *vma,
 				&bus_size);
 
 	if (err) {
-		ret = NOPFN_SIGBUS;
+		ret = VM_FAULT_SIGBUS;
 		goto out_unlock;
 	}
 
-	page_offset = (address - vma->vm_start) >> PAGE_SHIFT;
+	page_offset = 0 >> PAGE_SHIFT;
 
 	if (bus_size) {
 		struct drm_mem_type_manager *man = &dev->bm.man[bo->mem.mem_type];
@@ -774,7 +775,7 @@ static unsigned long drm_bo_vm_nopfn(struct vm_area_struct *vma,
 		drm_ttm_fixup_caching(ttm);
 		page = drm_ttm_get_page(ttm, page_offset);
 		if (!page) {
-			ret = NOPFN_OOM;
+			ret = VM_FAULT_OOM;
 			goto out_unlock;
 		}
 		pfn = page_to_pfn(page);
@@ -785,7 +786,7 @@ static unsigned long drm_bo_vm_nopfn(struct vm_area_struct *vma,
 
 	err = vm_insert_pfn(vma, address, pfn);
 	if (err) {
-		ret = (err != -EAGAIN) ? NOPFN_OOM : NOPFN_REFAULT;
+		ret = (err != -EAGAIN) ? VM_FAULT_OOM : VM_FAULT_NOPAGE;
 		goto out_unlock;
 	}
 out_unlock:
@@ -849,7 +850,7 @@ static void drm_bo_vm_close(struct vm_area_struct *vma)
 
 static struct vm_operations_struct drm_bo_vm_ops = {
 #ifdef DRM_FULL_MM_COMPAT
-	.nopfn = drm_bo_vm_nopfn,
+	.fault = drm_bo_vm_fault,
 #else
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
 	.nopfn = drm_bo_vm_nopfn,
-- 
1.5.4.5

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to