mirror of https://gitee.com/openkylin/linux.git
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
|
@ -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")) {
|
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");
|
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;
|
ret = -ENODEV;
|
||||||
goto error;
|
goto error_0;
|
||||||
}
|
}
|
||||||
|
|
||||||
xgi_video_info.video_vbase = XGIhw_ext.pjVideoMemoryAddress =
|
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) {
|
if (register_framebuffer(fb_info) < 0) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto error;
|
goto error_1;
|
||||||
}
|
}
|
||||||
|
|
||||||
XGIfb_registered = 1;
|
XGIfb_registered = 1;
|
||||||
|
@ -3408,6 +3407,13 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
|
||||||
|
|
||||||
return 0;
|
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:
|
error:
|
||||||
vfree(XGIhw_ext.pjVirtualRomBase);
|
vfree(XGIhw_ext.pjVirtualRomBase);
|
||||||
vfree(XGIhw_ext.pSR);
|
vfree(XGIhw_ext.pSR);
|
||||||
|
@ -3425,6 +3431,11 @@ static void __devexit xgifb_remove(struct pci_dev *pdev)
|
||||||
/* Unregister the framebuffer */
|
/* Unregister the framebuffer */
|
||||||
/* if (xgi_video_info.registered) { */
|
/* if (xgi_video_info.registered) { */
|
||||||
unregister_framebuffer(fb_info);
|
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);
|
vfree(XGIhw_ext.pjVirtualRomBase);
|
||||||
framebuffer_release(fb_info);
|
framebuffer_release(fb_info);
|
||||||
/* } */
|
/* } */
|
||||||
|
|
Loading…
Reference in New Issue