Commit a06630f3 authored by Antonino A. Daplas's avatar Antonino A. Daplas Committed by Linus Torvalds

[PATCH] Detaching fbcon: remove calls to pci_disable_device()

Detaching fbcon allows individual drivers to be unloaded.  However several
drivers call pci_disable_device() upon exit.  This function will disable the
BAR's which will kill VGA text mode and/or affect X/DRM.

To prevent this, remove calls to pci_disable_device() from several drivers.
Signed-off-by: default avatarAntonino Daplas <adaplas@pol.net>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 1c8ce271
...@@ -2379,7 +2379,6 @@ err_release_pci0: ...@@ -2379,7 +2379,6 @@ err_release_pci0:
err_release_fb: err_release_fb:
framebuffer_release(info); framebuffer_release(info);
err_disable: err_disable:
pci_disable_device(pdev);
err_out: err_out:
return ret; return ret;
} }
...@@ -2436,7 +2435,6 @@ static void __devexit radeonfb_pci_unregister (struct pci_dev *pdev) ...@@ -2436,7 +2435,6 @@ static void __devexit radeonfb_pci_unregister (struct pci_dev *pdev)
#endif #endif
fb_dealloc_cmap(&info->cmap); fb_dealloc_cmap(&info->cmap);
framebuffer_release(info); framebuffer_release(info);
pci_disable_device(pdev);
} }
......
...@@ -2227,7 +2227,6 @@ static void cirrusfb_pci_unmap (struct cirrusfb_info *cinfo) ...@@ -2227,7 +2227,6 @@ static void cirrusfb_pci_unmap (struct cirrusfb_info *cinfo)
release_region(0x3C0, 32); release_region(0x3C0, 32);
pci_release_regions(pdev); pci_release_regions(pdev);
framebuffer_release(cinfo->info); framebuffer_release(cinfo->info);
pci_disable_device(pdev);
} }
#endif /* CONFIG_PCI */ #endif /* CONFIG_PCI */
...@@ -2458,7 +2457,6 @@ err_release_regions: ...@@ -2458,7 +2457,6 @@ err_release_regions:
err_release_fb: err_release_fb:
framebuffer_release(info); framebuffer_release(info);
err_disable: err_disable:
pci_disable_device(pdev);
err_out: err_out:
return ret; return ret;
} }
......
...@@ -376,8 +376,6 @@ static int __init gx1fb_probe(struct pci_dev *pdev, const struct pci_device_id * ...@@ -376,8 +376,6 @@ static int __init gx1fb_probe(struct pci_dev *pdev, const struct pci_device_id *
release_mem_region(gx1_gx_base() + 0x8300, 0x100); release_mem_region(gx1_gx_base() + 0x8300, 0x100);
} }
pci_disable_device(pdev);
if (info) if (info)
framebuffer_release(info); framebuffer_release(info);
return ret; return ret;
...@@ -399,7 +397,6 @@ static void gx1fb_remove(struct pci_dev *pdev) ...@@ -399,7 +397,6 @@ static void gx1fb_remove(struct pci_dev *pdev)
iounmap(par->dc_regs); iounmap(par->dc_regs);
release_mem_region(gx1_gx_base() + 0x8300, 0x100); release_mem_region(gx1_gx_base() + 0x8300, 0x100);
pci_disable_device(pdev);
pci_set_drvdata(pdev, NULL); pci_set_drvdata(pdev, NULL);
framebuffer_release(info); framebuffer_release(info);
......
...@@ -354,8 +354,6 @@ static int __init gxfb_probe(struct pci_dev *pdev, const struct pci_device_id *i ...@@ -354,8 +354,6 @@ static int __init gxfb_probe(struct pci_dev *pdev, const struct pci_device_id *i
pci_release_region(pdev, 2); pci_release_region(pdev, 2);
} }
pci_disable_device(pdev);
if (info) if (info)
framebuffer_release(info); framebuffer_release(info);
return ret; return ret;
...@@ -377,7 +375,6 @@ static void gxfb_remove(struct pci_dev *pdev) ...@@ -377,7 +375,6 @@ static void gxfb_remove(struct pci_dev *pdev)
iounmap(par->dc_regs); iounmap(par->dc_regs);
pci_release_region(pdev, 2); pci_release_region(pdev, 2);
pci_disable_device(pdev);
pci_set_drvdata(pdev, NULL); pci_set_drvdata(pdev, NULL);
framebuffer_release(info); framebuffer_release(info);
......
...@@ -2110,9 +2110,6 @@ static void i810fb_release_resource(struct fb_info *info, ...@@ -2110,9 +2110,6 @@ static void i810fb_release_resource(struct fb_info *info,
if (par->res_flags & MMIO_REQ) if (par->res_flags & MMIO_REQ)
release_mem_region(par->mmio_start_phys, MMIO_SIZE); release_mem_region(par->mmio_start_phys, MMIO_SIZE);
if (par->res_flags & PCI_DEVICE_ENABLED)
pci_disable_device(par->dev);
framebuffer_release(info); framebuffer_release(info);
} }
......
...@@ -1219,7 +1219,7 @@ static int __devinit nvidiafb_probe(struct pci_dev *pd, ...@@ -1219,7 +1219,7 @@ static int __devinit nvidiafb_probe(struct pci_dev *pd,
if (pci_request_regions(pd, "nvidiafb")) { if (pci_request_regions(pd, "nvidiafb")) {
printk(KERN_ERR PFX "cannot request PCI regions\n"); printk(KERN_ERR PFX "cannot request PCI regions\n");
goto err_out_request; goto err_out_enable;
} }
par->FlatPanel = flatpanel; par->FlatPanel = flatpanel;
...@@ -1338,10 +1338,8 @@ err_out_free_base1: ...@@ -1338,10 +1338,8 @@ err_out_free_base1:
nvidia_delete_i2c_busses(par); nvidia_delete_i2c_busses(par);
err_out_arch: err_out_arch:
iounmap(par->REGS); iounmap(par->REGS);
err_out_free_base0: err_out_free_base0:
pci_release_regions(pd); pci_release_regions(pd);
err_out_request:
pci_disable_device(pd);
err_out_enable: err_out_enable:
kfree(info->pixmap.addr); kfree(info->pixmap.addr);
err_out_kfree: err_out_kfree:
...@@ -1371,7 +1369,6 @@ static void __exit nvidiafb_remove(struct pci_dev *pd) ...@@ -1371,7 +1369,6 @@ static void __exit nvidiafb_remove(struct pci_dev *pd)
nvidia_delete_i2c_busses(par); nvidia_delete_i2c_busses(par);
iounmap(par->REGS); iounmap(par->REGS);
pci_release_regions(pd); pci_release_regions(pd);
pci_disable_device(pd);
kfree(info->pixmap.addr); kfree(info->pixmap.addr);
framebuffer_release(info); framebuffer_release(info);
pci_set_drvdata(pd, NULL); pci_set_drvdata(pd, NULL);
......
...@@ -2152,7 +2152,6 @@ err_iounmap_ctrl_base: ...@@ -2152,7 +2152,6 @@ err_iounmap_ctrl_base:
err_release_region: err_release_region:
pci_release_regions(pd); pci_release_regions(pd);
err_disable_device: err_disable_device:
pci_disable_device(pd);
err_free_pixmap: err_free_pixmap:
kfree(info->pixmap.addr); kfree(info->pixmap.addr);
err_framebuffer_release: err_framebuffer_release:
...@@ -2187,7 +2186,6 @@ static void __exit rivafb_remove(struct pci_dev *pd) ...@@ -2187,7 +2186,6 @@ static void __exit rivafb_remove(struct pci_dev *pd)
if (par->riva.Architecture == NV_ARCH_03) if (par->riva.Architecture == NV_ARCH_03)
iounmap(par->riva.PRAMIN); iounmap(par->riva.PRAMIN);
pci_release_regions(pd); pci_release_regions(pd);
pci_disable_device(pd);
kfree(info->pixmap.addr); kfree(info->pixmap.addr);
framebuffer_release(info); framebuffer_release(info);
pci_set_drvdata(pd, NULL); pci_set_drvdata(pd, NULL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment