aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/xgifb/XGI_main_26.c
diff options
context:
space:
mode:
authorAaro Koskinen <aaro.koskinen@iki.fi>2011-02-17 16:29:11 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2011-02-18 15:38:17 -0500
commitbb29223453061b9b738e3659f7810c1f61165df2 (patch)
treee0b7a23023383a604cdb290913f8b763bfce3c99 /drivers/staging/xgifb/XGI_main_26.c
parentdecebabf24ca179749dcac8a3fb87f7186bdf898 (diff)
staging: xgifb: xgifb_probe() error paths missing framebuffer_release()
framebuffer_release() is missing from error paths. Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/xgifb/XGI_main_26.c')
-rw-r--r--drivers/staging/xgifb/XGI_main_26.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/drivers/staging/xgifb/XGI_main_26.c b/drivers/staging/xgifb/XGI_main_26.c
index ee008e5a0cb..c245de4fafc 100644
--- a/drivers/staging/xgifb/XGI_main_26.c
+++ b/drivers/staging/xgifb/XGI_main_26.c
@@ -2935,6 +2935,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
2935 u16 reg16; 2935 u16 reg16;
2936 u8 reg, reg1; 2936 u8 reg, reg1;
2937 u8 CR48, CR38; 2937 u8 CR48, CR38;
2938 int ret;
2939
2938 if (XGIfb_off) 2940 if (XGIfb_off)
2939 return -ENXIO; 2941 return -ENXIO;
2940 2942
@@ -2966,8 +2968,10 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
2966 printk("XGIfb: Relocate IO address: %lx [%08lx]\n", 2968 printk("XGIfb: Relocate IO address: %lx [%08lx]\n",
2967 (unsigned long)pci_resource_start(pdev, 2), XGI_Pr.RelIO); 2969 (unsigned long)pci_resource_start(pdev, 2), XGI_Pr.RelIO);
2968 2970
2969 if (pci_enable_device(pdev)) 2971 if (pci_enable_device(pdev)) {
2970 return -EIO; 2972 ret = -EIO;
2973 goto error;
2974 }
2971 2975
2972 XGIRegInit(&XGI_Pr, (unsigned long)XGIhw_ext.pjIOAddress); 2976 XGIRegInit(&XGI_Pr, (unsigned long)XGIhw_ext.pjIOAddress);
2973 2977
@@ -2976,7 +2980,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
2976 2980
2977 if (reg1 != 0xa1) { /*I/O error */ 2981 if (reg1 != 0xa1) { /*I/O error */
2978 printk("\nXGIfb: I/O error!!!"); 2982 printk("\nXGIfb: I/O error!!!");
2979 return -EIO; 2983 ret = -EIO;
2984 goto error;
2980 } 2985 }
2981 2986
2982 switch (xgi_video_info.chip_id) { 2987 switch (xgi_video_info.chip_id) {
@@ -3011,7 +3016,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
3011 XGIfb_CRT2_write_enable = IND_XGI_CRT2_WRITE_ENABLE_315; 3016 XGIfb_CRT2_write_enable = IND_XGI_CRT2_WRITE_ENABLE_315;
3012 break; 3017 break;
3013 default: 3018 default:
3014 return -ENODEV; 3019 ret = -ENODEV;
3020 goto error;
3015 } 3021 }
3016 3022
3017 printk("XGIfb:chipid = %x\n", xgi_video_info.chip); 3023 printk("XGIfb:chipid = %x\n", xgi_video_info.chip);
@@ -3052,7 +3058,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
3052 XGIhw_ext.pSR = vmalloc(sizeof(struct XGI_DSReg) * SR_BUFFER_SIZE); 3058 XGIhw_ext.pSR = vmalloc(sizeof(struct XGI_DSReg) * SR_BUFFER_SIZE);
3053 if (XGIhw_ext.pSR == NULL) { 3059 if (XGIhw_ext.pSR == NULL) {
3054 printk(KERN_ERR "XGIfb: Fatal error: Allocating SRReg space failed.\n"); 3060 printk(KERN_ERR "XGIfb: Fatal error: Allocating SRReg space failed.\n");
3055 return -ENODEV; 3061 ret = -ENODEV;
3062 goto error;
3056 } 3063 }
3057 XGIhw_ext.pSR[0].jIdx = XGIhw_ext.pSR[0].jVal = 0xFF; 3064 XGIhw_ext.pSR[0].jIdx = XGIhw_ext.pSR[0].jVal = 0xFF;
3058 3065
@@ -3060,7 +3067,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
3060 if (XGIhw_ext.pCR == NULL) { 3067 if (XGIhw_ext.pCR == NULL) {
3061 vfree(XGIhw_ext.pSR); 3068 vfree(XGIhw_ext.pSR);
3062 printk(KERN_ERR "XGIfb: Fatal error: Allocating CRReg space failed.\n"); 3069 printk(KERN_ERR "XGIfb: Fatal error: Allocating CRReg space failed.\n");
3063 return -ENODEV; 3070 ret = -ENODEV;
3071 goto error;
3064 } 3072 }
3065 XGIhw_ext.pCR[0].jIdx = XGIhw_ext.pCR[0].jVal = 0xFF; 3073 XGIhw_ext.pCR[0].jIdx = XGIhw_ext.pCR[0].jVal = 0xFF;
3066 3074
@@ -3100,7 +3108,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
3100 vfree(XGIhw_ext.pSR); 3108 vfree(XGIhw_ext.pSR);
3101 vfree(XGIhw_ext.pCR); 3109 vfree(XGIhw_ext.pCR);
3102 printk(KERN_INFO "XGIfb: Fatal error: Unable to determine RAM size.\n"); 3110 printk(KERN_INFO "XGIfb: Fatal error: Unable to determine RAM size.\n");
3103 return -ENODEV; 3111 ret = -ENODEV;
3112 goto error;
3104 } 3113 }
3105 3114
3106 if ((xgifb_mode_idx < 0) || ((XGIbios_mode[xgifb_mode_idx].mode_no) != 0xFF)) { 3115 if ((xgifb_mode_idx < 0) || ((XGIbios_mode[xgifb_mode_idx].mode_no) != 0xFF)) {
@@ -3118,7 +3127,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
3118 printk(KERN_ERR "XGIfb: Is there another framebuffer driver active?\n"); 3127 printk(KERN_ERR "XGIfb: Is there another framebuffer driver active?\n");
3119 vfree(XGIhw_ext.pSR); 3128 vfree(XGIhw_ext.pSR);
3120 vfree(XGIhw_ext.pCR); 3129 vfree(XGIhw_ext.pCR);
3121 return -ENODEV; 3130 ret = -ENODEV;
3131 goto error;
3122 } 3132 }
3123 3133
3124 if (!request_mem_region(xgi_video_info.mmio_base, XGIfb_mmio_size, "XGIfb MMIO")) { 3134 if (!request_mem_region(xgi_video_info.mmio_base, XGIfb_mmio_size, "XGIfb MMIO")) {
@@ -3126,7 +3136,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
3126 release_mem_region(xgi_video_info.video_base, xgi_video_info.video_size); 3136 release_mem_region(xgi_video_info.video_base, xgi_video_info.video_size);
3127 vfree(XGIhw_ext.pSR); 3137 vfree(XGIhw_ext.pSR);
3128 vfree(XGIhw_ext.pCR); 3138 vfree(XGIhw_ext.pCR);
3129 return -ENODEV; 3139 ret = -ENODEV;
3140 goto error;
3130 } 3141 }
3131 3142
3132 xgi_video_info.video_vbase = XGIhw_ext.pjVideoMemoryAddress = 3143 xgi_video_info.video_vbase = XGIhw_ext.pjVideoMemoryAddress =
@@ -3413,8 +3424,10 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
3413 printk(KERN_INFO "XGIfb: Added MTRRs\n"); 3424 printk(KERN_INFO "XGIfb: Added MTRRs\n");
3414#endif 3425#endif
3415 3426
3416 if (register_framebuffer(fb_info) < 0) 3427 if (register_framebuffer(fb_info) < 0) {
3417 return -EINVAL; 3428 ret = -EINVAL;
3429 goto error;
3430 }
3418 3431
3419 XGIfb_registered = 1; 3432 XGIfb_registered = 1;
3420 3433
@@ -3426,6 +3439,10 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
3426 dumpVGAReg(); 3439 dumpVGAReg();
3427 3440
3428 return 0; 3441 return 0;
3442
3443error:
3444 framebuffer_release(fb_info);
3445 return ret;
3429} 3446}
3430 3447
3431/*****************************************************/ 3448/*****************************************************/