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 [akpm@linux-foundation.org: fix fs/compat_ioctl.c build] [akpm@linux-foundation.org: fix isicom] [akpm@linux-foundation.org: fix arch/ia64/hp/sim/simserial.c build] [akpm@linux-foundation.org: fix kgdb] Signed-off-by: Alan Cox <alan@redhat.com> Acked-by: Greg Kroah-Hartman <gregkh@suse.de> Cc: Jason Wessel <jason.wessel@windriver.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
@@ -207,6 +207,9 @@ ppp_sync_open(struct tty_struct *tty)
|
||||
struct syncppp *ap;
|
||||
int err;
|
||||
|
||||
if (tty->ops->write == NULL)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
ap = kzalloc(sizeof(*ap), GFP_KERNEL);
|
||||
err = -ENOMEM;
|
||||
if (!ap)
|
||||
@@ -399,8 +402,8 @@ ppp_sync_receive(struct tty_struct *tty, const unsigned char *buf,
|
||||
tasklet_schedule(&ap->tsk);
|
||||
sp_put(ap);
|
||||
if (test_and_clear_bit(TTY_THROTTLED, &tty->flags)
|
||||
&& tty->driver->unthrottle)
|
||||
tty->driver->unthrottle(tty);
|
||||
&& tty->ops->unthrottle)
|
||||
tty->ops->unthrottle(tty);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -653,7 +656,7 @@ ppp_sync_push(struct syncppp *ap)
|
||||
tty_stuffed = 0;
|
||||
if (!tty_stuffed && ap->tpkt) {
|
||||
set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
|
||||
sent = tty->driver->write(tty, ap->tpkt->data, ap->tpkt->len);
|
||||
sent = tty->ops->write(tty, ap->tpkt->data, ap->tpkt->len);
|
||||
if (sent < 0)
|
||||
goto flush; /* error, e.g. loss of CD */
|
||||
if (sent < ap->tpkt->len) {
|
||||
|
Reference in New Issue
Block a user