diff options
| -rw-r--r-- | Documentation/filesystems/proc.txt | 32 | ||||
| -rw-r--r-- | fs/proc/proc_tty.c | 158 |
2 files changed, 0 insertions, 190 deletions
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index 98223a676940..a6aca8740883 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt | |||
| @@ -1075,7 +1075,6 @@ Table 1-11: Files in /proc/tty | |||
| 1075 | drivers list of drivers and their usage | 1075 | drivers list of drivers and their usage |
| 1076 | ldiscs registered line disciplines | 1076 | ldiscs registered line disciplines |
| 1077 | driver/serial usage statistic and status of single tty lines | 1077 | driver/serial usage statistic and status of single tty lines |
| 1078 | consoles registered system console lines | ||
| 1079 | .............................................................................. | 1078 | .............................................................................. |
| 1080 | 1079 | ||
| 1081 | To see which tty's are currently in use, you can simply look into the file | 1080 | To see which tty's are currently in use, you can simply look into the file |
| @@ -1094,37 +1093,6 @@ To see which tty's are currently in use, you can simply look into the file | |||
| 1094 | /dev/tty /dev/tty 5 0 system:/dev/tty | 1093 | /dev/tty /dev/tty 5 0 system:/dev/tty |
| 1095 | unknown /dev/tty 4 1-63 console | 1094 | unknown /dev/tty 4 1-63 console |
| 1096 | 1095 | ||
| 1097 | To see which character device lines are currently used for the system console | ||
| 1098 | /dev/console, you may simply look into the file /proc/tty/consoles: | ||
| 1099 | |||
| 1100 | > cat /proc/tty/consoles | ||
| 1101 | tty0 -WU (ECp) 4:7 | ||
| 1102 | ttyS0 -W- (Ep) 4:64 | ||
| 1103 | |||
| 1104 | The columns are: | ||
| 1105 | |||
| 1106 | device name of the device | ||
| 1107 | operations R = can do read operations | ||
| 1108 | W = can do write operations | ||
| 1109 | U = can do unblank | ||
| 1110 | flags E = it is enabled | ||
| 1111 | C = it is prefered console | ||
| 1112 | B = it is primary boot console | ||
| 1113 | p = it is used for printk buffer | ||
| 1114 | b = it is not a TTY but a Braille device | ||
| 1115 | a = it is safe to use when cpu is offline | ||
| 1116 | * = it is standard input of the reading process | ||
| 1117 | major:minor major and minor number of the device separated by a colon | ||
| 1118 | |||
| 1119 | If the reading process holds /dev/console open at the regular standard input | ||
| 1120 | stream the active device will be marked by an asterisk: | ||
| 1121 | |||
| 1122 | > cat /proc/tty/consoles < /dev/console | ||
| 1123 | tty0 -WU (ECp*) 4:7 | ||
| 1124 | ttyS0 -W- (Ep) 4:64 | ||
| 1125 | > tty | ||
| 1126 | /dev/pts/3 | ||
| 1127 | |||
| 1128 | 1096 | ||
| 1129 | 1.8 Miscellaneous kernel statistics in /proc/stat | 1097 | 1.8 Miscellaneous kernel statistics in /proc/stat |
| 1130 | ------------------------------------------------- | 1098 | ------------------------------------------------- |
diff --git a/fs/proc/proc_tty.c b/fs/proc/proc_tty.c index dc44f94022f1..83adcc869437 100644 --- a/fs/proc/proc_tty.c +++ b/fs/proc/proc_tty.c | |||
| @@ -12,10 +12,7 @@ | |||
| 12 | #include <linux/proc_fs.h> | 12 | #include <linux/proc_fs.h> |
| 13 | #include <linux/stat.h> | 13 | #include <linux/stat.h> |
| 14 | #include <linux/tty.h> | 14 | #include <linux/tty.h> |
| 15 | #include <linux/tty_driver.h> | ||
| 16 | #include <linux/console.h> | ||
| 17 | #include <linux/seq_file.h> | 15 | #include <linux/seq_file.h> |
| 18 | #include <linux/fdtable.h> | ||
| 19 | #include <linux/bitops.h> | 16 | #include <linux/bitops.h> |
| 20 | 17 | ||
| 21 | /* | 18 | /* |
| @@ -140,160 +137,6 @@ static const struct file_operations proc_tty_drivers_operations = { | |||
| 140 | }; | 137 | }; |
| 141 | 138 | ||
| 142 | /* | 139 | /* |
| 143 | * The device ID of file descriptor 0 of the current reading | ||
| 144 | * task if a character device... | ||
| 145 | */ | ||
| 146 | static dev_t current_dev; | ||
| 147 | |||
| 148 | /* | ||
| 149 | * This is the handler for /proc/tty/consoles | ||
| 150 | */ | ||
| 151 | static int show_console_dev(struct seq_file *m, void *v) | ||
| 152 | { | ||
| 153 | const struct tty_driver *driver; | ||
| 154 | struct console *con; | ||
| 155 | int index, len; | ||
| 156 | char flags[10]; | ||
| 157 | dev_t dev; | ||
| 158 | |||
| 159 | if (v == SEQ_START_TOKEN) | ||
| 160 | return 0; | ||
| 161 | con = (struct console *)v; | ||
| 162 | if (!con) | ||
| 163 | return 0; | ||
| 164 | driver = con->device(con, &index); | ||
| 165 | if (!driver) | ||
| 166 | return 0; | ||
| 167 | dev = MKDEV(driver->major, driver->minor_start) + index; | ||
| 168 | |||
| 169 | index = 0; | ||
| 170 | if (con->flags & CON_ENABLED) | ||
| 171 | flags[index++] = 'E'; | ||
| 172 | if (con->flags & CON_CONSDEV) | ||
| 173 | flags[index++] = 'C'; | ||
| 174 | if (con->flags & CON_BOOT) | ||
| 175 | flags[index++] = 'B'; | ||
| 176 | if (con->flags & CON_PRINTBUFFER) | ||
| 177 | flags[index++] = 'p'; | ||
| 178 | if (con->flags & CON_BRL) | ||
| 179 | flags[index++] = 'b'; | ||
| 180 | if (con->flags & CON_ANYTIME) | ||
| 181 | flags[index++] = 'a'; | ||
| 182 | if (current_dev == dev) | ||
| 183 | flags[index++] = '*'; | ||
| 184 | flags[index] = 0; | ||
| 185 | |||
| 186 | seq_printf(m, "%s%d%n", con->name, con->index, &len); | ||
| 187 | len = 21 - len; | ||
| 188 | if (len < 1) | ||
| 189 | len = 1; | ||
| 190 | seq_printf(m, "%*c", len, ' '); | ||
| 191 | seq_printf(m, "%c%c%c (%s)%n", con->read ? 'R' : '-', | ||
| 192 | con->write ? 'W' : '-', con->unblank ? 'U' : '-', | ||
| 193 | flags, &len); | ||
| 194 | len = 13 - len; | ||
| 195 | if (len < 1) | ||
| 196 | len = 1; | ||
| 197 | seq_printf(m, "%*c%4d:%d\n", len, ' ', MAJOR(dev), MINOR(dev)); | ||
| 198 | |||
| 199 | return 0; | ||
| 200 | } | ||
| 201 | |||
| 202 | /* iterator for consoles */ | ||
| 203 | static void *c_start(struct seq_file *m, loff_t *pos) | ||
| 204 | { | ||
| 205 | struct console *con; | ||
| 206 | loff_t off = 0; | ||
| 207 | |||
| 208 | if (*pos == 0) | ||
| 209 | return SEQ_START_TOKEN; | ||
| 210 | |||
| 211 | acquire_console_sem(); | ||
| 212 | for (con = console_drivers; con; con = con->next) { | ||
| 213 | if (!con->device) | ||
| 214 | continue; | ||
| 215 | if (++off == *pos) | ||
| 216 | break; | ||
| 217 | } | ||
| 218 | release_console_sem(); | ||
| 219 | |||
| 220 | return con; | ||
| 221 | } | ||
| 222 | |||
| 223 | static void *c_next(struct seq_file *m, void *v, loff_t *pos) | ||
| 224 | { | ||
| 225 | struct console *con; | ||
| 226 | |||
| 227 | acquire_console_sem(); | ||
| 228 | if (v == SEQ_START_TOKEN) | ||
| 229 | con = console_drivers; | ||
| 230 | else | ||
| 231 | con = ((struct console *)v)->next; | ||
| 232 | for (; con; con = con->next) { | ||
| 233 | if (!con->device) | ||
| 234 | continue; | ||
| 235 | ++*pos; | ||
| 236 | break; | ||
| 237 | } | ||
| 238 | release_console_sem(); | ||
| 239 | |||
| 240 | return con; | ||
| 241 | } | ||
| 242 | |||
| 243 | static void c_stop(struct seq_file *m, void *v) | ||
| 244 | { | ||
| 245 | } | ||
| 246 | |||
| 247 | static const struct seq_operations tty_consoles_op = { | ||
| 248 | .start = c_start, | ||
| 249 | .next = c_next, | ||
| 250 | .stop = c_stop, | ||
| 251 | .show = show_console_dev | ||
| 252 | }; | ||
| 253 | |||
| 254 | /* | ||
| 255 | * Used for open /proc/tty/consoles. Before this detect | ||
| 256 | * the device ID of file descriptor 0 of the current | ||
| 257 | * reading task if a character device... | ||
| 258 | */ | ||
| 259 | static int tty_consoles_open(struct inode *inode, struct file *file) | ||
| 260 | { | ||
| 261 | struct files_struct *curfiles; | ||
| 262 | |||
| 263 | current_dev = 0; | ||
| 264 | curfiles = get_files_struct(current); | ||
| 265 | if (curfiles) { | ||
| 266 | const struct file *curfp; | ||
| 267 | spin_lock(&curfiles->file_lock); | ||
| 268 | curfp = fcheck_files(curfiles, 0); | ||
| 269 | if (curfp && curfp->private_data) { | ||
| 270 | const struct inode *inode; | ||
| 271 | dget(curfp->f_dentry); | ||
| 272 | inode = curfp->f_dentry->d_inode; | ||
| 273 | if (S_ISCHR(inode->i_mode)) { | ||
| 274 | struct tty_struct *tty; | ||
| 275 | tty = (struct tty_struct *)curfp->private_data; | ||
| 276 | if (tty && tty->magic == TTY_MAGIC) { | ||
| 277 | tty = tty_pair_get_tty(tty); | ||
| 278 | current_dev = tty_devnum(tty); | ||
| 279 | } | ||
| 280 | } | ||
| 281 | dput(curfp->f_dentry); | ||
| 282 | } | ||
| 283 | spin_unlock(&curfiles->file_lock); | ||
| 284 | put_files_struct(curfiles); | ||
| 285 | } | ||
| 286 | return seq_open(file, &tty_consoles_op); | ||
| 287 | } | ||
| 288 | |||
| 289 | static const struct file_operations proc_tty_consoles_operations = { | ||
| 290 | .open = tty_consoles_open, | ||
| 291 | .read = seq_read, | ||
| 292 | .llseek = seq_lseek, | ||
| 293 | .release = seq_release, | ||
| 294 | }; | ||
| 295 | |||
| 296 | /* | ||
| 297 | * This function is called by tty_register_driver() to handle | 140 | * This function is called by tty_register_driver() to handle |
| 298 | * registering the driver's /proc handler into /proc/tty/driver/<foo> | 141 | * registering the driver's /proc handler into /proc/tty/driver/<foo> |
| 299 | */ | 142 | */ |
| @@ -343,5 +186,4 @@ void __init proc_tty_init(void) | |||
| 343 | proc_tty_driver = proc_mkdir_mode("tty/driver", S_IRUSR|S_IXUSR, NULL); | 186 | proc_tty_driver = proc_mkdir_mode("tty/driver", S_IRUSR|S_IXUSR, NULL); |
| 344 | proc_create("tty/ldiscs", 0, NULL, &tty_ldiscs_proc_fops); | 187 | proc_create("tty/ldiscs", 0, NULL, &tty_ldiscs_proc_fops); |
| 345 | proc_create("tty/drivers", 0, NULL, &proc_tty_drivers_operations); | 188 | proc_create("tty/drivers", 0, NULL, &proc_tty_drivers_operations); |
| 346 | proc_create("tty/consoles", 0, NULL, &proc_tty_consoles_operations); | ||
| 347 | } | 189 | } |
