master/cdev.c
changeset 1284 283aab089eb5
parent 1272 288c982acd23
child 1312 74853e018898
equal deleted inserted replaced
1283:e539c765f6a6 1284:283aab089eb5
  2610 static int eccdev_vma_fault(
  2610 static int eccdev_vma_fault(
  2611         struct vm_area_struct *vma, /**< Virtual memory area. */
  2611         struct vm_area_struct *vma, /**< Virtual memory area. */
  2612         struct vm_fault *vmf /**< Fault data. */
  2612         struct vm_fault *vmf /**< Fault data. */
  2613         )
  2613         )
  2614 {
  2614 {
       
  2615     unsigned long offset = vmf->pgoff << PAGE_SHIFT;
       
  2616     ec_cdev_priv_t *priv = (ec_cdev_priv_t *) vma->vm_private_data;
  2615     struct page *page;
  2617     struct page *page;
  2616     ec_cdev_priv_t *priv = (ec_cdev_priv_t *) vma->vm_private_data;
  2618 
  2617 
  2619     if (offset >= priv->process_data_size)
  2618     if (vmf->pgoff >= priv->process_data_size)
       
  2619         return VM_FAULT_SIGBUS;
  2620         return VM_FAULT_SIGBUS;
  2620 
  2621 
  2621     page = vmalloc_to_page(priv->process_data + vmf->pgoff);
  2622     page = vmalloc_to_page(priv->process_data + offset);
  2622 
  2623     if (!page)
  2623     if (priv->cdev->master->debug_level)
  2624         return VM_FAULT_SIGBUS;
  2624         EC_DBG("Vma fault, address = %p, offset = %lu, page = %p\n",
       
  2625                 vmf->virtual_address, vmf->pgoff, page);
       
  2626 
  2625 
  2627     get_page(page);
  2626     get_page(page);
  2628     vmf->page = page;
  2627     vmf->page = page;
  2629     vmf->flags = 0;
  2628 
       
  2629     if (priv->cdev->master->debug_level)
       
  2630         EC_DBG("Vma fault, virtual_address = %p, offset = %lu, page = %p\n",
       
  2631                 vmf->virtual_address, offset, page);
       
  2632 
  2630     return 0;
  2633     return 0;
  2631 }
  2634 }
  2632 
  2635 
  2633 #else
  2636 #else
  2634 
  2637