diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-03-15 20:14:15 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-03-19 10:17:52 -0400 |
| commit | 87a6aca504d65f242589583e04df5e74b5eae1fe (patch) | |
| tree | b95eb7e136bb57f5661e0bae4f71385fe3b55171 | |
| parent | a3d3203e4bb40f253b1541e310dc0f9305be7c84 (diff) | |
Revert "tty: Add a new VT mode which is like VT_PROCESS but doesn't require a VT_RELDISP ioctl call"
This reverts commit eec9fe7d1ab4a0dfac4cb43047a7657fffd0002f.
Ari writes as the reason this should be reverted:
The problems with this patch include:
1. There's at least one subtlety I overlooked - switching
between X servers (i.e. from one X VT to another) still requires
the cooperation of both X servers. I was assuming that KMS
eliminated this.
2. It hasn't been tested at all (no X server patch exists which
uses the new mode).
As he was the original author of the patch, I'll revert it.
Cc: Ari Entlich <atrigent@ccs.neu.edu>
Cc: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
| -rw-r--r-- | drivers/char/vt_ioctl.c | 39 | ||||
| -rw-r--r-- | include/linux/vt.h | 3 |
2 files changed, 20 insertions, 22 deletions
diff --git a/drivers/char/vt_ioctl.c b/drivers/char/vt_ioctl.c index 87778dcf8727..6aa10284104a 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, | |||
| 888 | ret = -EFAULT; | 888 | ret = -EFAULT; |
| 889 | goto out; | 889 | goto out; |
| 890 | } | 890 | } |
| 891 | if (tmp.mode != VT_AUTO && tmp.mode != VT_PROCESS && tmp.mode != VT_PROCESS_AUTO) { | 891 | if (tmp.mode != VT_AUTO && tmp.mode != VT_PROCESS) { |
| 892 | ret = -EINVAL; | 892 | ret = -EINVAL; |
| 893 | goto out; | 893 | goto out; |
| 894 | } | 894 | } |
| @@ -1622,7 +1622,7 @@ static void complete_change_console(struct vc_data *vc) | |||
| 1622 | * telling it that it has acquired. Also check if it has died and | 1622 | * telling it that it has acquired. Also check if it has died and |
| 1623 | * clean up (similar to logic employed in change_console()) | 1623 | * clean up (similar to logic employed in change_console()) |
| 1624 | */ | 1624 | */ |
| 1625 | if (vc->vt_mode.mode == VT_PROCESS || vc->vt_mode.mode == VT_PROCESS_AUTO) { | 1625 | if (vc->vt_mode.mode == VT_PROCESS) { |
| 1626 | /* | 1626 | /* |
| 1627 | * Send the signal as privileged - kill_pid() will | 1627 | * Send the signal as privileged - kill_pid() will |
| 1628 | * tell us if the process has gone or something else | 1628 | * tell us if the process has gone or something else |
| @@ -1682,7 +1682,7 @@ void change_console(struct vc_data *new_vc) | |||
| 1682 | * vt to auto control. | 1682 | * vt to auto control. |
| 1683 | */ | 1683 | */ |
| 1684 | vc = vc_cons[fg_console].d; | 1684 | vc = vc_cons[fg_console].d; |
| 1685 | if (vc->vt_mode.mode == VT_PROCESS || vc->vt_mode.mode == VT_PROCESS_AUTO) { | 1685 | if (vc->vt_mode.mode == VT_PROCESS) { |
| 1686 | /* | 1686 | /* |
| 1687 | * Send the signal as privileged - kill_pid() will | 1687 | * Send the signal as privileged - kill_pid() will |
| 1688 | * tell us if the process has gone or something else | 1688 | * tell us if the process has gone or something else |
| @@ -1693,28 +1693,27 @@ void change_console(struct vc_data *new_vc) | |||
| 1693 | */ | 1693 | */ |
| 1694 | vc->vt_newvt = new_vc->vc_num; | 1694 | vc->vt_newvt = new_vc->vc_num; |
| 1695 | if (kill_pid(vc->vt_pid, vc->vt_mode.relsig, 1) == 0) { | 1695 | if (kill_pid(vc->vt_pid, vc->vt_mode.relsig, 1) == 0) { |
| 1696 | if(vc->vt_mode.mode == VT_PROCESS) | ||
| 1697 | /* | ||
| 1698 | * It worked. Mark the vt to switch to and | ||
| 1699 | * return. The process needs to send us a | ||
| 1700 | * VT_RELDISP ioctl to complete the switch. | ||
| 1701 | */ | ||
| 1702 | return; | ||
| 1703 | } else { | ||
| 1704 | /* | 1696 | /* |
| 1705 | * The controlling process has died, so we revert back to | 1697 | * It worked. Mark the vt to switch to and |
| 1706 | * normal operation. In this case, we'll also change back | 1698 | * return. The process needs to send us a |
| 1707 | * to KD_TEXT mode. I'm not sure if this is strictly correct | 1699 | * VT_RELDISP ioctl to complete the switch. |
| 1708 | * but it saves the agony when the X server dies and the screen | ||
| 1709 | * remains blanked due to KD_GRAPHICS! It would be nice to do | ||
| 1710 | * this outside of VT_PROCESS but there is no single process | ||
| 1711 | * to account for and tracking tty count may be undesirable. | ||
| 1712 | */ | 1700 | */ |
| 1713 | reset_vc(vc); | 1701 | return; |
| 1714 | } | 1702 | } |
| 1715 | 1703 | ||
| 1716 | /* | 1704 | /* |
| 1717 | * Fall through to normal (VT_AUTO and VT_PROCESS_AUTO) handling of the switch... | 1705 | * The controlling process has died, so we revert back to |
| 1706 | * normal operation. In this case, we'll also change back | ||
| 1707 | * to KD_TEXT mode. I'm not sure if this is strictly correct | ||
| 1708 | * but it saves the agony when the X server dies and the screen | ||
| 1709 | * remains blanked due to KD_GRAPHICS! It would be nice to do | ||
| 1710 | * this outside of VT_PROCESS but there is no single process | ||
| 1711 | * to account for and tracking tty count may be undesirable. | ||
| 1712 | */ | ||
| 1713 | reset_vc(vc); | ||
| 1714 | |||
| 1715 | /* | ||
| 1716 | * Fall through to normal (VT_AUTO) handling of the switch... | ||
| 1718 | */ | 1717 | */ |
| 1719 | } | 1718 | } |
| 1720 | 1719 | ||
diff --git a/include/linux/vt.h b/include/linux/vt.h index 778b7b2a47d4..d5dd0bc408fd 100644 --- a/include/linux/vt.h +++ b/include/linux/vt.h | |||
| @@ -27,7 +27,7 @@ struct vt_mode { | |||
| 27 | #define VT_SETMODE 0x5602 /* set mode of active vt */ | 27 | #define VT_SETMODE 0x5602 /* set mode of active vt */ |
| 28 | #define VT_AUTO 0x00 /* auto vt switching */ | 28 | #define VT_AUTO 0x00 /* auto vt switching */ |
| 29 | #define VT_PROCESS 0x01 /* process controls switching */ | 29 | #define VT_PROCESS 0x01 /* process controls switching */ |
| 30 | #define VT_PROCESS_AUTO 0x02 /* process is notified of switching */ | 30 | #define VT_ACKACQ 0x02 /* acknowledge switch */ |
| 31 | 31 | ||
| 32 | struct vt_stat { | 32 | struct vt_stat { |
| 33 | unsigned short v_active; /* active vt */ | 33 | unsigned short v_active; /* active vt */ |
| @@ -38,7 +38,6 @@ struct vt_stat { | |||
| 38 | #define VT_SENDSIG 0x5604 /* signal to send to bitmask of vts */ | 38 | #define VT_SENDSIG 0x5604 /* signal to send to bitmask of vts */ |
| 39 | 39 | ||
| 40 | #define VT_RELDISP 0x5605 /* release display */ | 40 | #define VT_RELDISP 0x5605 /* release display */ |
| 41 | #define VT_ACKACQ 0x02 /* acknowledge switch */ | ||
| 42 | 41 | ||
| 43 | #define VT_ACTIVATE 0x5606 /* make vt active */ | 42 | #define VT_ACTIVATE 0x5606 /* make vt active */ |
| 44 | #define VT_WAITACTIVE 0x5607 /* wait for vt active */ | 43 | #define VT_WAITACTIVE 0x5607 /* wait for vt active */ |
