efifb: Disallow manual bind and unbind
Both were buggy: bind would happily scribble over a real graphics device and unbind wouldn't destroy the framebuffer. Hotplugging efifb makes no sense anyway, so just disable it. As an added benefit, we save some runtime memory. Signed-off-by: Andy Lutomirski <luto@mit.edu> Signed-off-by: Peter Jones <pjones@redhat.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
da0241f12b
commit
bb8b266272
@ -330,7 +330,7 @@ static int __init efifb_setup(char *options)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __devinit efifb_probe(struct platform_device *dev)
|
static int __init efifb_probe(struct platform_device *dev)
|
||||||
{
|
{
|
||||||
struct fb_info *info;
|
struct fb_info *info;
|
||||||
int err;
|
int err;
|
||||||
@ -500,7 +500,6 @@ static int __devinit efifb_probe(struct platform_device *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver efifb_driver = {
|
static struct platform_driver efifb_driver = {
|
||||||
.probe = efifb_probe,
|
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "efifb",
|
.name = "efifb",
|
||||||
},
|
},
|
||||||
@ -531,13 +530,21 @@ static int __init efifb_init(void)
|
|||||||
if (!screen_info.lfb_linelength)
|
if (!screen_info.lfb_linelength)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
ret = platform_driver_register(&efifb_driver);
|
|
||||||
|
|
||||||
if (!ret) {
|
|
||||||
ret = platform_device_register(&efifb_device);
|
ret = platform_device_register(&efifb_device);
|
||||||
if (ret)
|
if (ret)
|
||||||
platform_driver_unregister(&efifb_driver);
|
return ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is not just an optimization. We will interfere
|
||||||
|
* with a real driver if we get reprobed, so don't allow
|
||||||
|
* it.
|
||||||
|
*/
|
||||||
|
ret = platform_driver_probe(&efifb_driver, efifb_probe);
|
||||||
|
if (ret) {
|
||||||
|
platform_device_unregister(&efifb_driver);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
module_init(efifb_init);
|
module_init(efifb_init);
|
||||||
|
Loading…
Reference in New Issue
Block a user