3877 ) |
3877 ) |
3878 { |
3878 { |
3879 unsigned long offset; |
3879 unsigned long offset; |
3880 struct page *page = NOPAGE_SIGBUS; |
3880 struct page *page = NOPAGE_SIGBUS; |
3881 ec_cdev_priv_t *priv = (ec_cdev_priv_t *) vma->vm_private_data; |
3881 ec_cdev_priv_t *priv = (ec_cdev_priv_t *) vma->vm_private_data; |
|
3882 ec_master_t *master = priv->cdev->master; |
3882 |
3883 |
3883 offset = (address - vma->vm_start) + (vma->vm_pgoff << PAGE_SHIFT); |
3884 offset = (address - vma->vm_start) + (vma->vm_pgoff << PAGE_SHIFT); |
3884 |
3885 |
3885 if (offset >= priv->process_data_size) |
3886 if (offset >= priv->process_data_size) |
3886 return NOPAGE_SIGBUS; |
3887 return NOPAGE_SIGBUS; |
3887 |
3888 |
3888 page = vmalloc_to_page(priv->process_data + offset); |
3889 page = vmalloc_to_page(priv->process_data + offset); |
3889 |
3890 |
3890 EC_MASTER_DBG(master, "Nopage fault vma, address = %#lx," |
3891 EC_MASTER_DBG(master, 1, "Nopage fault vma, address = %#lx," |
3891 " offset = %#lx, page = %p\n", address, offset, page); |
3892 " offset = %#lx, page = %p\n", address, offset, page); |
3892 |
3893 |
3893 get_page(page); |
3894 get_page(page); |
3894 if (type) |
3895 if (type) |
3895 *type = VM_FAULT_MINOR; |
3896 *type = VM_FAULT_MINOR; |