|
@@ -2263,9 +2263,12 @@ static void fbcon_generic_blank(struct vc_data *vc, struct fb_info *info,
|
|
|
}
|
|
|
|
|
|
|
|
|
+ if (!lock_fb_info(info))
|
|
|
+ return;
|
|
|
event.info = info;
|
|
|
event.data = ␣
|
|
|
fb_notifier_call_chain(FB_EVENT_CONBLANK, &event);
|
|
|
+ unlock_fb_info(info);
|
|
|
}
|
|
|
|
|
|
static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch)
|
|
@@ -2956,8 +2959,6 @@ static int fbcon_fb_unregistered(struct fb_info *info)
|
|
|
{
|
|
|
int i, idx;
|
|
|
|
|
|
- if (!lock_fb_info(info))
|
|
|
- return -ENODEV;
|
|
|
idx = info->node;
|
|
|
for (i = first_fb_vc; i <= last_fb_vc; i++) {
|
|
|
if (con2fb_map[i] == idx)
|
|
@@ -2985,8 +2986,6 @@ static int fbcon_fb_unregistered(struct fb_info *info)
|
|
|
if (primary_device == idx)
|
|
|
primary_device = -1;
|
|
|
|
|
|
- unlock_fb_info(info);
|
|
|
-
|
|
|
if (!num_registered_fb)
|
|
|
unregister_con_driver(&fb_con);
|
|
|
|
|
@@ -3027,11 +3026,8 @@ static int fbcon_fb_registered(struct fb_info *info)
|
|
|
{
|
|
|
int ret = 0, i, idx;
|
|
|
|
|
|
- if (!lock_fb_info(info))
|
|
|
- return -ENODEV;
|
|
|
idx = info->node;
|
|
|
fbcon_select_primary(info);
|
|
|
- unlock_fb_info(info);
|
|
|
|
|
|
if (info_idx == -1) {
|
|
|
for (i = first_fb_vc; i <= last_fb_vc; i++) {
|
|
@@ -3152,53 +3148,23 @@ static int fbcon_event_notify(struct notifier_block *self,
|
|
|
|
|
|
switch(action) {
|
|
|
case FB_EVENT_SUSPEND:
|
|
|
- if (!lock_fb_info(info)) {
|
|
|
- ret = -ENODEV;
|
|
|
- goto done;
|
|
|
- }
|
|
|
fbcon_suspended(info);
|
|
|
- unlock_fb_info(info);
|
|
|
break;
|
|
|
case FB_EVENT_RESUME:
|
|
|
- if (!lock_fb_info(info)) {
|
|
|
- ret = -ENODEV;
|
|
|
- goto done;
|
|
|
- }
|
|
|
fbcon_resumed(info);
|
|
|
- unlock_fb_info(info);
|
|
|
break;
|
|
|
case FB_EVENT_MODE_CHANGE:
|
|
|
- if (!lock_fb_info(info)) {
|
|
|
- ret = -ENODEV;
|
|
|
- goto done;
|
|
|
- }
|
|
|
fbcon_modechanged(info);
|
|
|
- unlock_fb_info(info);
|
|
|
break;
|
|
|
case FB_EVENT_MODE_CHANGE_ALL:
|
|
|
- if (!lock_fb_info(info)) {
|
|
|
- ret = -ENODEV;
|
|
|
- goto done;
|
|
|
- }
|
|
|
fbcon_set_all_vcs(info);
|
|
|
- unlock_fb_info(info);
|
|
|
break;
|
|
|
case FB_EVENT_MODE_DELETE:
|
|
|
mode = event->data;
|
|
|
- if (!lock_fb_info(info)) {
|
|
|
- ret = -ENODEV;
|
|
|
- goto done;
|
|
|
- }
|
|
|
ret = fbcon_mode_deleted(info, mode);
|
|
|
- unlock_fb_info(info);
|
|
|
break;
|
|
|
case FB_EVENT_FB_UNBIND:
|
|
|
- if (!lock_fb_info(info)) {
|
|
|
- ret = -ENODEV;
|
|
|
- goto done;
|
|
|
- }
|
|
|
idx = info->node;
|
|
|
- unlock_fb_info(info);
|
|
|
ret = fbcon_fb_unbind(idx);
|
|
|
break;
|
|
|
case FB_EVENT_FB_REGISTERED:
|
|
@@ -3217,29 +3183,14 @@ static int fbcon_event_notify(struct notifier_block *self,
|
|
|
con2fb->framebuffer = con2fb_map[con2fb->console - 1];
|
|
|
break;
|
|
|
case FB_EVENT_BLANK:
|
|
|
- if (!lock_fb_info(info)) {
|
|
|
- ret = -ENODEV;
|
|
|
- goto done;
|
|
|
- }
|
|
|
fbcon_fb_blanked(info, *(int *)event->data);
|
|
|
- unlock_fb_info(info);
|
|
|
break;
|
|
|
case FB_EVENT_NEW_MODELIST:
|
|
|
- if (!lock_fb_info(info)) {
|
|
|
- ret = -ENODEV;
|
|
|
- goto done;
|
|
|
- }
|
|
|
fbcon_new_modelist(info);
|
|
|
- unlock_fb_info(info);
|
|
|
break;
|
|
|
case FB_EVENT_GET_REQ:
|
|
|
caps = event->data;
|
|
|
- if (!lock_fb_info(info)) {
|
|
|
- ret = -ENODEV;
|
|
|
- goto done;
|
|
|
- }
|
|
|
fbcon_get_requirement(info, caps);
|
|
|
- unlock_fb_info(info);
|
|
|
break;
|
|
|
}
|
|
|
done:
|