staging: xgifb: release and unmap I/O memory
Release and unmap memory on probe error paths and when the module is removed. The patch enables unloading and reloading the xgifb module. Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
d80aaa01ae
commit
5c0ef2ac36
1 changed files with 14 additions and 3 deletions
|
@ -3103,9 +3103,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
|
|||
|
||||
if (!request_mem_region(xgi_video_info.mmio_base, XGIfb_mmio_size, "XGIfb MMIO")) {
|
||||
printk(KERN_ERR "XGIfb: Fatal error: Unable to reserve MMIO region\n");
|
||||
release_mem_region(xgi_video_info.video_base, xgi_video_info.video_size);
|
||||
ret = -ENODEV;
|
||||
goto error;
|
||||
goto error_0;
|
||||
}
|
||||
|
||||
xgi_video_info.video_vbase = XGIhw_ext.pjVideoMemoryAddress =
|
||||
|
@ -3394,7 +3393,7 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
|
|||
|
||||
if (register_framebuffer(fb_info) < 0) {
|
||||
ret = -EINVAL;
|
||||
goto error;
|
||||
goto error_1;
|
||||
}
|
||||
|
||||
XGIfb_registered = 1;
|
||||
|
@ -3408,6 +3407,13 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
|
|||
|
||||
return 0;
|
||||
|
||||
error_1:
|
||||
iounmap(xgi_video_info.mmio_vbase);
|
||||
iounmap(xgi_video_info.video_vbase);
|
||||
release_mem_region(xgi_video_info.mmio_base, XGIfb_mmio_size);
|
||||
error_0:
|
||||
release_mem_region(xgi_video_info.video_base,
|
||||
xgi_video_info.video_size);
|
||||
error:
|
||||
vfree(XGIhw_ext.pjVirtualRomBase);
|
||||
vfree(XGIhw_ext.pSR);
|
||||
|
@ -3425,6 +3431,11 @@ static void __devexit xgifb_remove(struct pci_dev *pdev)
|
|||
/* Unregister the framebuffer */
|
||||
/* if (xgi_video_info.registered) { */
|
||||
unregister_framebuffer(fb_info);
|
||||
iounmap(xgi_video_info.mmio_vbase);
|
||||
iounmap(xgi_video_info.video_vbase);
|
||||
release_mem_region(xgi_video_info.mmio_base, XGIfb_mmio_size);
|
||||
release_mem_region(xgi_video_info.video_base,
|
||||
xgi_video_info.video_size);
|
||||
vfree(XGIhw_ext.pjVirtualRomBase);
|
||||
framebuffer_release(fb_info);
|
||||
/* } */
|
||||
|
|
Loading…
Reference in a new issue