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@xxxxxxxxxx> > --- > 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; _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel