diff options
Diffstat (limited to 'drivers/tty/vt/vt.c')
| -rw-r--r-- | drivers/tty/vt/vt.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c index fbd447b390f7..740202d8a5c4 100644 --- a/drivers/tty/vt/vt.c +++ b/drivers/tty/vt/vt.c | |||
| @@ -779,7 +779,6 @@ int vc_allocate(unsigned int currcons) /* return 0 on success */ | |||
| 779 | con_set_default_unimap(vc); | 779 | con_set_default_unimap(vc); |
| 780 | vc->vc_screenbuf = kmalloc(vc->vc_screenbuf_size, GFP_KERNEL); | 780 | vc->vc_screenbuf = kmalloc(vc->vc_screenbuf_size, GFP_KERNEL); |
| 781 | if (!vc->vc_screenbuf) { | 781 | if (!vc->vc_screenbuf) { |
| 782 | tty_port_destroy(&vc->port); | ||
| 783 | kfree(vc); | 782 | kfree(vc); |
| 784 | vc_cons[currcons].d = NULL; | 783 | vc_cons[currcons].d = NULL; |
| 785 | return -ENOMEM; | 784 | return -ENOMEM; |
| @@ -986,26 +985,25 @@ static int vt_resize(struct tty_struct *tty, struct winsize *ws) | |||
| 986 | return ret; | 985 | return ret; |
| 987 | } | 986 | } |
| 988 | 987 | ||
| 989 | void vc_deallocate(unsigned int currcons) | 988 | struct vc_data *vc_deallocate(unsigned int currcons) |
| 990 | { | 989 | { |
| 990 | struct vc_data *vc = NULL; | ||
| 991 | |||
| 991 | WARN_CONSOLE_UNLOCKED(); | 992 | WARN_CONSOLE_UNLOCKED(); |
| 992 | 993 | ||
| 993 | if (vc_cons_allocated(currcons)) { | 994 | if (vc_cons_allocated(currcons)) { |
| 994 | struct vc_data *vc = vc_cons[currcons].d; | 995 | struct vt_notifier_param param; |
| 995 | struct vt_notifier_param param = { .vc = vc }; | ||
| 996 | 996 | ||
| 997 | param.vc = vc = vc_cons[currcons].d; | ||
| 997 | atomic_notifier_call_chain(&vt_notifier_list, VT_DEALLOCATE, ¶m); | 998 | atomic_notifier_call_chain(&vt_notifier_list, VT_DEALLOCATE, ¶m); |
| 998 | vcs_remove_sysfs(currcons); | 999 | vcs_remove_sysfs(currcons); |
| 999 | vc->vc_sw->con_deinit(vc); | 1000 | vc->vc_sw->con_deinit(vc); |
| 1000 | put_pid(vc->vt_pid); | 1001 | put_pid(vc->vt_pid); |
| 1001 | module_put(vc->vc_sw->owner); | 1002 | module_put(vc->vc_sw->owner); |
| 1002 | kfree(vc->vc_screenbuf); | 1003 | kfree(vc->vc_screenbuf); |
| 1003 | if (currcons >= MIN_NR_CONSOLES) { | ||
| 1004 | tty_port_destroy(&vc->port); | ||
| 1005 | kfree(vc); | ||
| 1006 | } | ||
| 1007 | vc_cons[currcons].d = NULL; | 1004 | vc_cons[currcons].d = NULL; |
| 1008 | } | 1005 | } |
| 1006 | return vc; | ||
| 1009 | } | 1007 | } |
| 1010 | 1008 | ||
| 1011 | /* | 1009 | /* |
