Skip to content

Commit

Permalink
[PATCH] Detaching fbcon: clean up exit code
Browse files Browse the repository at this point in the history
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 <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Antonino A. Daplas authored and Linus Torvalds committed Jun 26, 2006
1 parent 9a17917 commit e55186f
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions drivers/video/console/fbcon.c
Original file line number Diff line number Diff line change
Expand Up @@ -3112,6 +3112,49 @@ static void __exit fbcon_deinit_class_device(void)

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));
}
Expand Down

0 comments on commit e55186f

Please sign in to comment.