tty: The big operations rework

- Operations are now a shared const function block as with most other Linux
  objects

- Introduce wrappers for some optional functions to get consistent behaviour

- Wrap put_char which used to be patched by the tty layer

- Document which functions are needed/optional

- Make put_char report success/fail

- Cache the driver->ops pointer in the tty as tty->ops

- Remove various surplus lock calls we no longer need

- Remove proc_write method as noted by Alexey Dobriyan

- Introduce some missing sanity checks where certain driver/ldisc
  combinations would oops as they didn't check needed methods were present

[[email protected]: fix fs/compat_ioctl.c build]
[[email protected]: fix isicom]
[[email protected]: fix arch/ia64/hp/sim/simserial.c build]
[[email protected]: fix kgdb]
Signed-off-by: Alan Cox <[email protected]>
Acked-by: Greg Kroah-Hartman <[email protected]>
Cc: Jason Wessel <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
Alan Cox 2008-04-30 00:54:13 -07:00 • committed by Linus Torvalds
commit f34d7a5b70
30 changed files with 537 additions and 664 deletions

View file

@ -192,16 +192,14 @@ void proc_tty_register_driver(struct tty_driver *driver)
{
struct proc_dir_entry *ent;
if ((!driver->read_proc && !driver->write_proc) ||
!driver->driver_name ||
if (!driver->ops->read_proc || !driver->driver_name ||
driver->proc_entry)
return;
ent = create_proc_entry(driver->driver_name, 0, proc_tty_driver);
if (!ent)
return;
ent->read_proc = driver->read_proc;
ent->write_proc = driver->write_proc;
ent->read_proc = driver->ops->read_proc;
ent->owner = driver->owner;
ent->data = driver;