Переглянути джерело

cirrusfb: fix error paths in cirrusfb_xxx_register()

Balance iomap and iounmap and alloc and free calls in case of error druing
device register (probing).

Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Krzysztof Helt 16 роки тому
батько
коміт
bc5d8ac02f
1 змінених файлів з 7 додано та 12 видалено
  1. 7 12
      drivers/video/cirrusfb.c

+ 7 - 12
drivers/video/cirrusfb.c

@@ -2090,8 +2090,6 @@ static int __devinit cirrusfb_register(struct fb_info *info)
 
 
 err_dealloc_cmap:
 err_dealloc_cmap:
 	fb_dealloc_cmap(&info->cmap);
 	fb_dealloc_cmap(&info->cmap);
-	cinfo->unmap(info);
-	framebuffer_release(info);
 	return err;
 	return err;
 }
 }
 
 
@@ -2328,18 +2326,15 @@ static int __devinit cirrusfb_zorro_register(struct zorro_dev *z,
 	zorro_set_drvdata(z, info);
 	zorro_set_drvdata(z, info);
 
 
 	ret = cirrusfb_register(info);
 	ret = cirrusfb_register(info);
-	if (ret) {
-		if (btype == BT_PICASSO4) {
-			iounmap(info->screen_base);
-			iounmap(cinfo->regbase - 0x600000);
-		} else if (board_addr > 0x01000000)
-			iounmap(info->screen_base);
-	}
-	return ret;
+	if (!ret)
+		return 0;
+
+	if (btype == BT_PICASSO4 || board_addr > 0x01000000)
+		iounmap(info->screen_base);
 
 
 err_unmap_regbase:
 err_unmap_regbase:
-	/* Parental advisory: explicit hack */
-	iounmap(cinfo->regbase - 0x600000);
+	if (btype == BT_PICASSO4)
+		iounmap(cinfo->regbase - 0x600000);
 err_release_region:
 err_release_region:
 	release_region(board_addr, board_size);
 	release_region(board_addr, board_size);
 err_release_fb:
 err_release_fb: