Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fbdev/controlfb: use vm_iomap_memory()

Use vm_iomap_memory() instead of [io_]remap_pfn_range().
vm_iomap_memory() gives us much simpler API to map memory to userspace,
and reduces possibilities for bugs.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

+18 -28
+18 -28
drivers/video/controlfb.c
··· 285 285 static int controlfb_mmap(struct fb_info *info, 286 286 struct vm_area_struct *vma) 287 287 { 288 - unsigned long off, start; 289 - u32 len; 288 + unsigned long mmio_pgoff; 289 + unsigned long start; 290 + u32 len; 290 291 291 - off = vma->vm_pgoff << PAGE_SHIFT; 292 + start = info->fix.smem_start; 293 + len = info->fix.smem_len; 294 + mmio_pgoff = PAGE_ALIGN((start & ~PAGE_MASK) + len) >> PAGE_SHIFT; 295 + if (vma->vm_pgoff >= mmio_pgoff) { 296 + if (info->var.accel_flags) 297 + return -EINVAL; 298 + vma->vm_pgoff -= mmio_pgoff; 299 + start = info->fix.mmio_start; 300 + len = info->fix.mmio_len; 301 + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); 302 + } else { 303 + /* framebuffer */ 304 + vma->vm_page_prot = pgprot_cached_wthru(vma->vm_page_prot); 305 + } 292 306 293 - /* frame buffer memory */ 294 - start = info->fix.smem_start; 295 - len = PAGE_ALIGN((start & ~PAGE_MASK)+info->fix.smem_len); 296 - if (off >= len) { 297 - /* memory mapped io */ 298 - off -= len; 299 - if (info->var.accel_flags) 300 - return -EINVAL; 301 - start = info->fix.mmio_start; 302 - len = PAGE_ALIGN((start & ~PAGE_MASK)+info->fix.mmio_len); 303 - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); 304 - } else { 305 - /* framebuffer */ 306 - vma->vm_page_prot = pgprot_cached_wthru(vma->vm_page_prot); 307 - } 308 - start &= PAGE_MASK; 309 - if ((vma->vm_end - vma->vm_start + off) > len) 310 - return -EINVAL; 311 - off += start; 312 - vma->vm_pgoff = off >> PAGE_SHIFT; 313 - if (io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT, 314 - vma->vm_end - vma->vm_start, vma->vm_page_prot)) 315 - return -EAGAIN; 316 - 317 - return 0; 307 + return vm_iomap_memory(vma, start, len); 318 308 } 319 309 320 310 static int controlfb_blank(int blank_mode, struct fb_info *info)