summaryrefslogtreecommitdiffstats
path: root/drivers/char/vt_ioctl.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-03-03 08:47:22 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2010-03-03 08:47:22 -0800
commit94468080220162f74dc6ce5c3e95e5fec8022902 (patch)
treeb1c46b83e4e731b7b4f70bd341267da519958bdb /drivers/char/vt_ioctl.c
parentfb7b096d949fa852442ed9d8f982bce526ccfe7e (diff)
parent137ee2f5d173a0e859e35bfb900261418eb88ace (diff)
downloadop-kernel-dev-94468080220162f74dc6ce5c3e95e5fec8022902.zip
op-kernel-dev-94468080220162f74dc6ce5c3e95e5fec8022902.tar.gz
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6: (36 commits) jsm: fixing error if the driver fails to load jsm: removing the uart structure and filename on error tty: Add a new VT mode which is like VT_PROCESS but doesn't require a VT_RELDISP ioctl call tty: Keep the default buffering to sub-page units tty: Fix up char drivers request_room usage tty: Fix the ldisc hangup race serial: timberdale: Remove dependancies nozomi: Tidy up the PCI table nozomi: Fix mutex handling nozomi: Add tty_port usage sdio_uart: Use kfifo instead of the messy circ stuff serial: bcm63xx_uart: allow more than one uart to be registered. serial: bcm63xx_uart: don't use kfree() on non kmalloced area. serial: bfin_5xx: pull in linux/io.h for ioremap prototypes serial: bfin_5xx: kgdboc should accept gdb break only when it is active serial: bfin_5xx: need to disable DMA TX interrupt too serial: bfin_5xx: remove useless gpio handling with hard flow control Char: synclink, remove unnecessary checks tty: declare MODULE_FIRMWARE in various drivers ip2: Add module parameter. ...
Diffstat (limited to 'drivers/char/vt_ioctl.c')
-rw-r--r--drivers/char/vt_ioctl.c39
1 files changed, 20 insertions, 19 deletions
diff --git a/drivers/char/vt_ioctl.c b/drivers/char/vt_ioctl.c
index 6aa1028..87778dc 100644
--- a/drivers/char/vt_ioctl.c
+++ b/drivers/char/vt_ioctl.c
@@ -888,7 +888,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
ret = -EFAULT;
goto out;
}
- if (tmp.mode != VT_AUTO && tmp.mode != VT_PROCESS) {
+ if (tmp.mode != VT_AUTO && tmp.mode != VT_PROCESS && tmp.mode != VT_PROCESS_AUTO) {
ret = -EINVAL;
goto out;
}
@@ -1622,7 +1622,7 @@ static void complete_change_console(struct vc_data *vc)
* telling it that it has acquired. Also check if it has died and
* clean up (similar to logic employed in change_console())
*/
- if (vc->vt_mode.mode == VT_PROCESS) {
+ if (vc->vt_mode.mode == VT_PROCESS || vc->vt_mode.mode == VT_PROCESS_AUTO) {
/*
* Send the signal as privileged - kill_pid() will
* tell us if the process has gone or something else
@@ -1682,7 +1682,7 @@ void change_console(struct vc_data *new_vc)
* vt to auto control.
*/
vc = vc_cons[fg_console].d;
- if (vc->vt_mode.mode == VT_PROCESS) {
+ if (vc->vt_mode.mode == VT_PROCESS || vc->vt_mode.mode == VT_PROCESS_AUTO) {
/*
* Send the signal as privileged - kill_pid() will
* tell us if the process has gone or something else
@@ -1693,27 +1693,28 @@ void change_console(struct vc_data *new_vc)
*/
vc->vt_newvt = new_vc->vc_num;
if (kill_pid(vc->vt_pid, vc->vt_mode.relsig, 1) == 0) {
+ if(vc->vt_mode.mode == VT_PROCESS)
+ /*
+ * It worked. Mark the vt to switch to and
+ * return. The process needs to send us a
+ * VT_RELDISP ioctl to complete the switch.
+ */
+ return;
+ } else {
/*
- * It worked. Mark the vt to switch to and
- * return. The process needs to send us a
- * VT_RELDISP ioctl to complete the switch.
+ * The controlling process has died, so we revert back to
+ * normal operation. In this case, we'll also change back
+ * to KD_TEXT mode. I'm not sure if this is strictly correct
+ * but it saves the agony when the X server dies and the screen
+ * remains blanked due to KD_GRAPHICS! It would be nice to do
+ * this outside of VT_PROCESS but there is no single process
+ * to account for and tracking tty count may be undesirable.
*/
- return;
+ reset_vc(vc);
}
/*
- * The controlling process has died, so we revert back to
- * normal operation. In this case, we'll also change back
- * to KD_TEXT mode. I'm not sure if this is strictly correct
- * but it saves the agony when the X server dies and the screen
- * remains blanked due to KD_GRAPHICS! It would be nice to do
- * this outside of VT_PROCESS but there is no single process
- * to account for and tracking tty count may be undesirable.
- */
- reset_vc(vc);
-
- /*
- * Fall through to normal (VT_AUTO) handling of the switch...
+ * Fall through to normal (VT_AUTO and VT_PROCESS_AUTO) handling of the switch...
*/
}
OpenPOWER on IntegriCloud