On 2013/4/15 20:48, Libin wrote:
(*->vm_end - *->vm_start) >> PAGE_SHIFT operation is implemented as a inline funcion vma_pages() in linux/mm.h, so using it.
Signed-off-by: Libin huawei.libin@huawei.com
drivers/char/mspec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/char/mspec.c b/drivers/char/mspec.c index e1f60f9..ed0703f 100644 --- a/drivers/char/mspec.c +++ b/drivers/char/mspec.c @@ -168,7 +168,7 @@ mspec_close(struct vm_area_struct *vma) if (!atomic_dec_and_test(&vdata->refcnt)) return;
- last_index = (vdata->vm_end - vdata->vm_start) >> PAGE_SHIFT;
- last_index = vma_pages(vdata); for (index = 0; index < last_index; index++) { if (vdata->maddr[index] == 0) continue;
This function mspec_mmap also need modification... And you can change int to unsigned long.
static int mspec_mmap(struct file *file, struct vm_area_struct *vma, enum mspec_page_type type) { struct vma_data *vdata; int pages, vdata_size, flags = 0;
if (vma->vm_pgoff != 0) return -EINVAL;
if ((vma->vm_flags & VM_SHARED) == 0) return -EINVAL;
if ((vma->vm_flags & VM_WRITE) == 0) return -EPERM;
pages = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; vdata_size = sizeof(struct vma_data) + pages * sizeof(long); if (vdata_size <= PAGE_SIZE) vdata = kzalloc(vdata_size, GFP_KERNEL); else { vdata = vzalloc(vdata_size); flags = VMD_VMALLOCED; } if (!vdata) return -ENOMEM;