diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 34ec0ef..f424adb 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c @@ -3100,6 +3100,8 @@ static int fbcon_event_notify(struct not case FB_EVENT_NEW_MODELIST: fbcon_new_modelist(info); break; + case FB_EVENT_FB_UNREGISTER_SAFE: + ret = search_fb_in_map(info->node); } done: diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index cd14079..8e878e6 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c @@ -1362,6 +1362,10 @@ unregister_framebuffer(struct fb_info *f if (!registered_fb[i]) return -EINVAL; + event.info = fb_info; + if (fb_notifier_call_chain(FB_EVENT_FB_UNREGISTER_SAFE, &event)) + return -EINVAL; + if (fb_info->pixmap.addr && (fb_info->pixmap.flags & FB_PIXMAP_DEFAULT)) kfree(fb_info->pixmap.addr); diff --git a/include/linux/fb.h b/include/linux/fb.h index ecb8bc6..e955865 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -527,6 +527,8 @@ #define FB_EVENT_NEW_MODELIST #define FB_EVENT_MODE_CHANGE_ALL 0x0B /* A software display blank change occured */ #define FB_EVENT_CONBLANK 0x0C +/* Check if it's safe to unregister */ +#define FB_EVENT_FB_UNREGISTER_SAFE 0x0D struct fb_event { struct fb_info *info;