From 016bf40f500e4fc9fb872e5e952ac02093fd65e8 Mon Sep 17 00:00:00 2001 From: Florian Pose <fp@igh-essen.com> Date: Tue, 21 Oct 2008 09:26:19 +0000 Subject: [PATCH] Fixed page fault handler. --- master/cdev.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/master/cdev.c b/master/cdev.c index 4c765011..dcd81599 100644 --- a/master/cdev.c +++ b/master/cdev.c @@ -2612,21 +2612,24 @@ static int eccdev_vma_fault( struct vm_fault *vmf /**< Fault data. */ ) { - struct page *page; + unsigned long offset = vmf->pgoff << PAGE_SHIFT; ec_cdev_priv_t *priv = (ec_cdev_priv_t *) vma->vm_private_data; + struct page *page; - if (vmf->pgoff >= priv->process_data_size) + if (offset >= priv->process_data_size) return VM_FAULT_SIGBUS; - page = vmalloc_to_page(priv->process_data + vmf->pgoff); - - if (priv->cdev->master->debug_level) - EC_DBG("Vma fault, address = %p, offset = %lu, page = %p\n", - vmf->virtual_address, vmf->pgoff, page); + page = vmalloc_to_page(priv->process_data + offset); + if (!page) + return VM_FAULT_SIGBUS; get_page(page); vmf->page = page; - vmf->flags = 0; + + if (priv->cdev->master->debug_level) + EC_DBG("Vma fault, virtual_address = %p, offset = %lu, page = %p\n", + vmf->virtual_address, offset, page); + return 0; } -- GitLab