Detaching fbcon: Clean up exit code
Subsystems (2)
PATCH 5/7 Detaching fbcon: Clean up exit code
To detach fbcon, it must also clean up all resources it allocated. This was never done before because fbcon cannot be unloaded.
Signed-off-by Antonino Daplas <[email protected]>
---
drivers/video/console/fbcon.c | 43 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 43 insertions(+), 0 deletions(-)
drivers/video/console/fbcon.c +43 -0
@@ -3112,6 +3112,49 @@ static void __exit fbcon_deinit_class_de static void __exit fbcon_exit(void) { +struct fb_info *info; +int i, j, mapped; + +for (i =0 ; i <FB_MAX ; i++) { + info = registered_fb[i]; + +if (info && info->fbcon_par) +fbcon_del_cursor_timer (info); + } + +#ifdef CONFIG_ATARI +free_irq (IRQ_AUTO_4 , fbcon_vbl_handler); +#endif +#ifdef CONFIG_MAC +if (MACH_IS_MAC && vbl_detected) +free_irq (IRQ_MAC_VBL , fbcon_vbl_handler); +#endif + +kfree ((void *)softback_buf); + +for (i =0 ; i <FB_MAX ; i++) { + mapped =0 ; + info = registered_fb[i]; + +if (info ==NULL ) +continue ; + +for (j =0 ; j <MAX_NR_CONSOLES ; j++) { +if (con2fb_map[j] == i) { + con2fb_map[j] =-1 ; + mapped =1 ; + } + } + +if (mapped) { +if (info->fbops->fb_release) + info->fbops->fb_release (info,0 ); +module_put (info->fbops->owner); +kfree (info->fbcon_par); + info->fbcon_par =NULL ; + } + } +fbcon_deinit_class_device ();class_device_destroy (fb_class,MKDEV (FB_MAJOR ,FB_MAX )); }