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

drivers/video/carminefb.c: improve error handling

This code had an error handling goto to the wrong place, a misplaced
release_mem_region, and a duplicated release_mem_region.

The semantic match that finds the double release_mem_region is as follows:
(http://coccinelle.lip6.fr/)

// <smpl>
@r@
expression e1,e2,e3;
position p1,p2,p3;
@@
release_mem_region@p1(e1, e2)@p3;
... when != request_mem_region(e1,e2,e3)
release_mem_region(e1, e2)@p2;

@@
expression e <= r.e1,e3;
expression r.e1,e2;
position r.p1,r.p2,r.p3,p!=r.p1;
@@
*release_mem_region(e1, e2)@p3;
... when != e = e3
*release_mem_region@p(e1, e2)@p2;// </smpl>

Signed-off-by: Julia Lawall <julia@diku.dk>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>

authored by

Julia Lawall and committed by
Paul Mundt
e045da7d 7ee04fd5

+2 -4
+2 -4
drivers/video/carminefb.c
··· 654 654 printk(KERN_ERR "carminefb: Memory bar is only %d bytes, %d " 655 655 "are required.", carminefb_fix.smem_len, 656 656 CARMINE_TOTAL_DIPLAY_MEM); 657 - goto err_free_reg_mmio; 657 + goto err_unmap_vregs; 658 658 } 659 659 660 660 if (!request_mem_region(carminefb_fix.smem_start, ··· 667 667 carminefb_fix.smem_len); 668 668 if (!hw->screen_mem) { 669 669 printk(KERN_ERR "carmine: Can't ioremap smem area.\n"); 670 - release_mem_region(carminefb_fix.smem_start, 671 - carminefb_fix.smem_len); 672 670 goto err_reg_smem; 673 671 } 674 672 ··· 708 710 err_unmap_screen: 709 711 iounmap(hw->screen_mem); 710 712 err_reg_smem: 711 - release_mem_region(carminefb_fix.mmio_start, carminefb_fix.mmio_len); 713 + release_mem_region(carminefb_fix.smem_start, carminefb_fix.smem_len); 712 714 err_unmap_vregs: 713 715 iounmap(hw->v_regs); 714 716 err_free_reg_mmio: