Sfoglia il codice sorgente

fbdev: bfin-t350mcqb-fb: fix fbmem allocation with blanking lines

The current allocation does not include the memory required for blanking
lines.  So avoid memory corruption when multiple devices are using the DMA
memory near each other.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Michael Hennerich 15 anni fa
parent
commit
de145b44b9
1 ha cambiato i file con 8 aggiunte e 7 eliminazioni
  1. 8 7
      drivers/video/bfin-t350mcqb-fb.c

+ 8 - 7
drivers/video/bfin-t350mcqb-fb.c

@@ -488,9 +488,9 @@ static int __devinit bfin_t350mcqb_probe(struct platform_device *pdev)
 	fbinfo->fbops = &bfin_t350mcqb_fb_ops;
 	fbinfo->fbops = &bfin_t350mcqb_fb_ops;
 	fbinfo->flags = FBINFO_FLAG_DEFAULT;
 	fbinfo->flags = FBINFO_FLAG_DEFAULT;
 
 
-	info->fb_buffer =
-	    dma_alloc_coherent(NULL, fbinfo->fix.smem_len, &info->dma_handle,
-			       GFP_KERNEL);
+	info->fb_buffer = dma_alloc_coherent(NULL, fbinfo->fix.smem_len +
+				ACTIVE_VIDEO_MEM_OFFSET,
+				&info->dma_handle, GFP_KERNEL);
 
 
 	if (NULL == info->fb_buffer) {
 	if (NULL == info->fb_buffer) {
 		printk(KERN_ERR DRIVER_NAME
 		printk(KERN_ERR DRIVER_NAME
@@ -568,8 +568,8 @@ out7:
 out6:
 out6:
 	fb_dealloc_cmap(&fbinfo->cmap);
 	fb_dealloc_cmap(&fbinfo->cmap);
 out4:
 out4:
-	dma_free_coherent(NULL, fbinfo->fix.smem_len, info->fb_buffer,
-			  info->dma_handle);
+	dma_free_coherent(NULL, fbinfo->fix.smem_len + ACTIVE_VIDEO_MEM_OFFSET,
+			 info->fb_buffer, info->dma_handle);
 out3:
 out3:
 	framebuffer_release(fbinfo);
 	framebuffer_release(fbinfo);
 out2:
 out2:
@@ -592,8 +592,9 @@ static int __devexit bfin_t350mcqb_remove(struct platform_device *pdev)
 	free_irq(info->irq, info);
 	free_irq(info->irq, info);
 
 
 	if (info->fb_buffer != NULL)
 	if (info->fb_buffer != NULL)
-		dma_free_coherent(NULL, fbinfo->fix.smem_len, info->fb_buffer,
-				  info->dma_handle);
+		dma_free_coherent(NULL, fbinfo->fix.smem_len +
+			ACTIVE_VIDEO_MEM_OFFSET, info->fb_buffer,
+			info->dma_handle);
 
 
 	fb_dealloc_cmap(&fbinfo->cmap);
 	fb_dealloc_cmap(&fbinfo->cmap);