diff mbox series

[22/35] tty: make tty_operations::write_room return uint

Message ID 20210505091928.22010-23-jslaby@suse.cz
State New
Headers show
Series None | expand

Commit Message

Jiri Slaby May 5, 2021, 9:19 a.m. UTC
Line disciplines expect a positive value or zero returned from
tty->ops->write_room (invoked by tty_write_room). So make this
assumption explicit by using unsigned int as a return value. Both of
tty->ops->write_room and tty_write_room.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Matt Turner <mattst88@gmail.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: Helge Deller <deller@gmx.de>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
Cc: Chris Zankel <chris@zankel.net>
Cc: Max Filippov <jcmvbkbc@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
Cc: Jens Taprogge <jens.taprogge@taprogge.org>
Cc: Karsten Keil <isdn@linux-pingi.de>
Cc: Scott Branden <scott.branden@broadcom.com>
Cc: Ulf Hansson <ulf.hansson@linaro.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: David Lin <dtwlin@gmail.com>
Cc: Johan Hovold <johan@kernel.org>
Cc: Alex Elder <elder@kernel.org>
Cc: Laurentiu Tudor <laurentiu.tudor@nxp.com>
Cc: Jiri Kosina <jikos@kernel.org>
Cc: David Sterba <dsterba@suse.com>
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Oliver Neukum <oneukum@suse.com>
Cc: Felipe Balbi <balbi@kernel.org>
Cc: Mathias Nyman <mathias.nyman@intel.com>
Cc: Marcel Holtmann <marcel@holtmann.org>
Cc: Johan Hedberg <johan.hedberg@gmail.com>
Cc: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
---
 arch/alpha/kernel/srmcons.c            | 2 +-
 arch/m68k/emu/nfcon.c                  | 2 +-
 arch/parisc/kernel/pdc_cons.c          | 2 +-
 arch/um/drivers/line.c                 | 6 +++---
 arch/um/drivers/line.h                 | 2 +-
 arch/xtensa/platforms/iss/console.c    | 2 +-
 drivers/char/pcmcia/synclink_cs.c      | 2 +-
 drivers/char/ttyprintk.c               | 2 +-
 drivers/ipack/devices/ipoctal.c        | 2 +-
 drivers/isdn/capi/capi.c               | 6 +++---
 drivers/misc/bcm-vk/bcm_vk_tty.c       | 2 +-
 drivers/mmc/core/sdio_uart.c           | 2 +-
 drivers/net/usb/hso.c                  | 4 ++--
 drivers/s390/char/con3215.c            | 2 +-
 drivers/s390/char/sclp_tty.c           | 4 ++--
 drivers/s390/char/sclp_vt220.c         | 4 ++--
 drivers/s390/char/tty3270.c            | 2 +-
 drivers/staging/fwserial/fwserial.c    | 6 +++---
 drivers/staging/gdm724x/gdm_tty.c      | 2 +-
 drivers/staging/greybus/uart.c         | 2 +-
 drivers/tty/amiserial.c                | 2 +-
 drivers/tty/ehv_bytechan.c             | 4 ++--
 drivers/tty/goldfish.c                 | 2 +-
 drivers/tty/hvc/hvc_console.c          | 2 +-
 drivers/tty/hvc/hvcs.c                 | 2 +-
 drivers/tty/hvc/hvsi.c                 | 4 ++--
 drivers/tty/ipwireless/tty.c           | 2 +-
 drivers/tty/mips_ejtag_fdc.c           | 4 ++--
 drivers/tty/moxa.c                     | 8 ++++----
 drivers/tty/mxser.c                    | 2 +-
 drivers/tty/n_gsm.c                    | 2 +-
 drivers/tty/nozomi.c                   | 4 ++--
 drivers/tty/pty.c                      | 2 +-
 drivers/tty/serial/kgdb_nmi.c          | 2 +-
 drivers/tty/serial/serial_core.c       | 4 ++--
 drivers/tty/synclink_gt.c              | 6 +++---
 drivers/tty/tty_ioctl.c                | 2 +-
 drivers/tty/ttynull.c                  | 2 +-
 drivers/tty/vcc.c                      | 4 ++--
 drivers/tty/vt/vt.c                    | 2 +-
 drivers/usb/class/cdc-acm.c            | 2 +-
 drivers/usb/gadget/function/u_serial.c | 6 +++---
 drivers/usb/host/xhci-dbgtty.c         | 4 ++--
 drivers/usb/serial/usb-serial.c        | 2 +-
 include/linux/tty.h                    | 2 +-
 include/linux/tty_driver.h             | 4 ++--
 net/bluetooth/rfcomm/tty.c             | 2 +-
 47 files changed, 71 insertions(+), 71 deletions(-)

Comments

Anton Ivanov May 5, 2021, 10:34 a.m. UTC | #1
On 05/05/2021 10:19, Jiri Slaby wrote:
> Line disciplines expect a positive value or zero returned from
> tty->ops->write_room (invoked by tty_write_room). So make this
> assumption explicit by using unsigned int as a return value. Both of
> tty->ops->write_room and tty_write_room.
> 
> Signed-off-by: Jiri Slaby <jslaby@suse.cz>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
> Cc: Matt Turner <mattst88@gmail.com>
> Cc: Geert Uytterhoeven <geert@linux-m68k.org>
> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> Cc: Helge Deller <deller@gmx.de>
> Cc: Jeff Dike <jdike@addtoit.com>
> Cc: Richard Weinberger <richard@nod.at>
> Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
> Cc: Chris Zankel <chris@zankel.net>
> Cc: Max Filippov <jcmvbkbc@gmail.com>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
> Cc: Jens Taprogge <jens.taprogge@taprogge.org>
> Cc: Karsten Keil <isdn@linux-pingi.de>
> Cc: Scott Branden <scott.branden@broadcom.com>
> Cc: Ulf Hansson <ulf.hansson@linaro.org>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Heiko Carstens <hca@linux.ibm.com>
> Cc: Vasily Gorbik <gor@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> Cc: David Lin <dtwlin@gmail.com>
> Cc: Johan Hovold <johan@kernel.org>
> Cc: Alex Elder <elder@kernel.org>
> Cc: Laurentiu Tudor <laurentiu.tudor@nxp.com>
> Cc: Jiri Kosina <jikos@kernel.org>
> Cc: David Sterba <dsterba@suse.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Oliver Neukum <oneukum@suse.com>
> Cc: Felipe Balbi <balbi@kernel.org>
> Cc: Mathias Nyman <mathias.nyman@intel.com>
> Cc: Marcel Holtmann <marcel@holtmann.org>
> Cc: Johan Hedberg <johan.hedberg@gmail.com>
> Cc: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
> ---
>   arch/alpha/kernel/srmcons.c            | 2 +-
>   arch/m68k/emu/nfcon.c                  | 2 +-
>   arch/parisc/kernel/pdc_cons.c          | 2 +-
>   arch/um/drivers/line.c                 | 6 +++---
>   arch/um/drivers/line.h                 | 2 +-
>   arch/xtensa/platforms/iss/console.c    | 2 +-
>   drivers/char/pcmcia/synclink_cs.c      | 2 +-
>   drivers/char/ttyprintk.c               | 2 +-
>   drivers/ipack/devices/ipoctal.c        | 2 +-
>   drivers/isdn/capi/capi.c               | 6 +++---
>   drivers/misc/bcm-vk/bcm_vk_tty.c       | 2 +-
>   drivers/mmc/core/sdio_uart.c           | 2 +-
>   drivers/net/usb/hso.c                  | 4 ++--
>   drivers/s390/char/con3215.c            | 2 +-
>   drivers/s390/char/sclp_tty.c           | 4 ++--
>   drivers/s390/char/sclp_vt220.c         | 4 ++--
>   drivers/s390/char/tty3270.c            | 2 +-
>   drivers/staging/fwserial/fwserial.c    | 6 +++---
>   drivers/staging/gdm724x/gdm_tty.c      | 2 +-
>   drivers/staging/greybus/uart.c         | 2 +-
>   drivers/tty/amiserial.c                | 2 +-
>   drivers/tty/ehv_bytechan.c             | 4 ++--
>   drivers/tty/goldfish.c                 | 2 +-
>   drivers/tty/hvc/hvc_console.c          | 2 +-
>   drivers/tty/hvc/hvcs.c                 | 2 +-
>   drivers/tty/hvc/hvsi.c                 | 4 ++--
>   drivers/tty/ipwireless/tty.c           | 2 +-
>   drivers/tty/mips_ejtag_fdc.c           | 4 ++--
>   drivers/tty/moxa.c                     | 8 ++++----
>   drivers/tty/mxser.c                    | 2 +-
>   drivers/tty/n_gsm.c                    | 2 +-
>   drivers/tty/nozomi.c                   | 4 ++--
>   drivers/tty/pty.c                      | 2 +-
>   drivers/tty/serial/kgdb_nmi.c          | 2 +-
>   drivers/tty/serial/serial_core.c       | 4 ++--
>   drivers/tty/synclink_gt.c              | 6 +++---
>   drivers/tty/tty_ioctl.c                | 2 +-
>   drivers/tty/ttynull.c                  | 2 +-
>   drivers/tty/vcc.c                      | 4 ++--
>   drivers/tty/vt/vt.c                    | 2 +-
>   drivers/usb/class/cdc-acm.c            | 2 +-
>   drivers/usb/gadget/function/u_serial.c | 6 +++---
>   drivers/usb/host/xhci-dbgtty.c         | 4 ++--
>   drivers/usb/serial/usb-serial.c        | 2 +-
>   include/linux/tty.h                    | 2 +-
>   include/linux/tty_driver.h             | 4 ++--
>   net/bluetooth/rfcomm/tty.c             | 2 +-
>   47 files changed, 71 insertions(+), 71 deletions(-)
> 
> diff --git a/arch/alpha/kernel/srmcons.c b/arch/alpha/kernel/srmcons.c
> index 438b10c44d73..2110b7e7f988 100644
> --- a/arch/alpha/kernel/srmcons.c
> +++ b/arch/alpha/kernel/srmcons.c
> @@ -142,7 +142,7 @@ srmcons_write(struct tty_struct *tty,
>   	return count;
>   }
>   
> -static int
> +static unsigned int
>   srmcons_write_room(struct tty_struct *tty)
>   {
>   	return 512;
> diff --git a/arch/m68k/emu/nfcon.c b/arch/m68k/emu/nfcon.c
> index 57e8c8fb5eba..92636c89d65b 100644
> --- a/arch/m68k/emu/nfcon.c
> +++ b/arch/m68k/emu/nfcon.c
> @@ -85,7 +85,7 @@ static int nfcon_tty_put_char(struct tty_struct *tty, unsigned char ch)
>   	return 1;
>   }
>   
> -static int nfcon_tty_write_room(struct tty_struct *tty)
> +static unsigned int nfcon_tty_write_room(struct tty_struct *tty)
>   {
>   	return 64;
>   }
> diff --git a/arch/parisc/kernel/pdc_cons.c b/arch/parisc/kernel/pdc_cons.c
> index 7ed404c60a9e..fe2ed0bbd07e 100644
> --- a/arch/parisc/kernel/pdc_cons.c
> +++ b/arch/parisc/kernel/pdc_cons.c
> @@ -103,7 +103,7 @@ static int pdc_console_tty_write(struct tty_struct *tty, const unsigned char *bu
>   	return count;
>   }
>   
> -static int pdc_console_tty_write_room(struct tty_struct *tty)
> +static unsigned int pdc_console_tty_write_room(struct tty_struct *tty)
>   {
>   	return 32768; /* no limit, no buffer used */
>   }
> diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c
> index 1c70a31e7c5b..2b8810ba5470 100644
> --- a/arch/um/drivers/line.c
> +++ b/arch/um/drivers/line.c
> @@ -32,7 +32,7 @@ static irqreturn_t line_interrupt(int irq, void *data)
>    *
>    * Should be called while holding line->lock (this does not modify data).
>    */
> -static int write_room(struct line *line)
> +static unsigned int write_room(struct line *line)
>   {
>   	int n;
>   
> @@ -47,11 +47,11 @@ static int write_room(struct line *line)
>   	return n - 1;
>   }
>   
> -int line_write_room(struct tty_struct *tty)
> +unsigned int line_write_room(struct tty_struct *tty)
>   {
>   	struct line *line = tty->driver_data;
>   	unsigned long flags;
> -	int room;
> +	unsigned int room;
>   
>   	spin_lock_irqsave(&line->lock, flags);
>   	room = write_room(line);
> diff --git a/arch/um/drivers/line.h b/arch/um/drivers/line.h
> index 01d21e76144f..861edf329569 100644
> --- a/arch/um/drivers/line.h
> +++ b/arch/um/drivers/line.h
> @@ -70,7 +70,7 @@ extern void line_set_termios(struct tty_struct *tty, struct ktermios * old);
>   extern int line_chars_in_buffer(struct tty_struct *tty);
>   extern void line_flush_buffer(struct tty_struct *tty);
>   extern void line_flush_chars(struct tty_struct *tty);
> -extern int line_write_room(struct tty_struct *tty);
> +extern unsigned int line_write_room(struct tty_struct *tty);
>   extern void line_throttle(struct tty_struct *tty);
>   extern void line_unthrottle(struct tty_struct *tty);
>   
> diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c
> index a3dda25a4e45..98ac3a7fdb0a 100644
> --- a/arch/xtensa/platforms/iss/console.c
> +++ b/arch/xtensa/platforms/iss/console.c
> @@ -100,7 +100,7 @@ static void rs_flush_chars(struct tty_struct *tty)
>   {
>   }
>   
> -static int rs_write_room(struct tty_struct *tty)
> +static unsigned int rs_write_room(struct tty_struct *tty)
>   {
>   	/* Let's say iss can always accept 2K characters.. */
>   	return 2 * 1024;
> diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
> index b4707bc3aee8..e4b2c68f44f5 100644
> --- a/drivers/char/pcmcia/synclink_cs.c
> +++ b/drivers/char/pcmcia/synclink_cs.c
> @@ -1609,7 +1609,7 @@ static int mgslpc_write(struct tty_struct * tty,
>   
>   /* Return the count of free bytes in transmit buffer
>    */
> -static int mgslpc_write_room(struct tty_struct *tty)
> +static unsigned int mgslpc_write_room(struct tty_struct *tty)
>   {
>   	MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data;
>   	int ret;
> diff --git a/drivers/char/ttyprintk.c b/drivers/char/ttyprintk.c
> index 93f5d11c830b..e93b0af92339 100644
> --- a/drivers/char/ttyprintk.c
> +++ b/drivers/char/ttyprintk.c
> @@ -132,7 +132,7 @@ static int tpk_write(struct tty_struct *tty,
>   /*
>    * TTY operations write_room function.
>    */
> -static int tpk_write_room(struct tty_struct *tty)
> +static unsigned int tpk_write_room(struct tty_struct *tty)
>   {
>   	return TPK_MAX_ROOM;
>   }
> diff --git a/drivers/ipack/devices/ipoctal.c b/drivers/ipack/devices/ipoctal.c
> index 3940714e4397..ea0f1aeaaa06 100644
> --- a/drivers/ipack/devices/ipoctal.c
> +++ b/drivers/ipack/devices/ipoctal.c
> @@ -460,7 +460,7 @@ static int ipoctal_write_tty(struct tty_struct *tty,
>   	return char_copied;
>   }
>   
> -static int ipoctal_write_room(struct tty_struct *tty)
> +static unsigned int ipoctal_write_room(struct tty_struct *tty)
>   {
>   	struct ipoctal_channel *channel = tty->driver_data;
>   
> diff --git a/drivers/isdn/capi/capi.c b/drivers/isdn/capi/capi.c
> index fdf87acccd06..c50c454006b3 100644
> --- a/drivers/isdn/capi/capi.c
> +++ b/drivers/isdn/capi/capi.c
> @@ -1175,14 +1175,14 @@ static void capinc_tty_flush_chars(struct tty_struct *tty)
>   	handle_minor_recv(mp);
>   }
>   
> -static int capinc_tty_write_room(struct tty_struct *tty)
> +static unsigned int capinc_tty_write_room(struct tty_struct *tty)
>   {
>   	struct capiminor *mp = tty->driver_data;
> -	int room;
> +	unsigned int room;
>   
>   	room = CAPINC_MAX_SENDQUEUE-skb_queue_len(&mp->outqueue);
>   	room *= CAPI_MAX_BLKSIZE;
> -	pr_debug("capinc_tty_write_room = %d\n", room);
> +	pr_debug("capinc_tty_write_room = %u\n", room);
>   	return room;
>   }
>   
> diff --git a/drivers/misc/bcm-vk/bcm_vk_tty.c b/drivers/misc/bcm-vk/bcm_vk_tty.c
> index 4d02692ecfc7..dae9eeed84a2 100644
> --- a/drivers/misc/bcm-vk/bcm_vk_tty.c
> +++ b/drivers/misc/bcm-vk/bcm_vk_tty.c
> @@ -214,7 +214,7 @@ static int bcm_vk_tty_write(struct tty_struct *tty,
>   	return count;
>   }
>   
> -static int bcm_vk_tty_write_room(struct tty_struct *tty)
> +static unsigned int bcm_vk_tty_write_room(struct tty_struct *tty)
>   {
>   	struct bcm_vk *vk = dev_get_drvdata(tty->dev);
>   
> diff --git a/drivers/mmc/core/sdio_uart.c b/drivers/mmc/core/sdio_uart.c
> index dbcac2b7f2fe..c8f4eca7aad4 100644
> --- a/drivers/mmc/core/sdio_uart.c
> +++ b/drivers/mmc/core/sdio_uart.c
> @@ -797,7 +797,7 @@ static int sdio_uart_write(struct tty_struct *tty, const unsigned char *buf,
>   	return ret;
>   }
>   
> -static int sdio_uart_write_room(struct tty_struct *tty)
> +static unsigned int sdio_uart_write_room(struct tty_struct *tty)
>   {
>   	struct sdio_uart_port *port = tty->driver_data;
>   	return FIFO_SIZE - kfifo_len(&port->xmit_fifo);
> diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
> index 3ef4b2841402..bb8bb85308ab 100644
> --- a/drivers/net/usb/hso.c
> +++ b/drivers/net/usb/hso.c
> @@ -1357,10 +1357,10 @@ static int hso_serial_write(struct tty_struct *tty, const unsigned char *buf,
>   }
>   
>   /* how much room is there for writing */
> -static int hso_serial_write_room(struct tty_struct *tty)
> +static unsigned int hso_serial_write_room(struct tty_struct *tty)
>   {
>   	struct hso_serial *serial = tty->driver_data;
> -	int room;
> +	unsigned int room;
>   	unsigned long flags;
>   
>   	spin_lock_irqsave(&serial->serial_lock, flags);
> diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c
> index 1fd5bca9fa20..c9fd4a05931a 100644
> --- a/drivers/s390/char/con3215.c
> +++ b/drivers/s390/char/con3215.c
> @@ -924,7 +924,7 @@ static void tty3215_close(struct tty_struct *tty, struct file * filp)
>   /*
>    * Returns the amount of free space in the output buffer.
>    */
> -static int tty3215_write_room(struct tty_struct *tty)
> +static unsigned int tty3215_write_room(struct tty_struct *tty)
>   {
>   	struct raw3215_info *raw = tty->driver_data;
>   
> diff --git a/drivers/s390/char/sclp_tty.c b/drivers/s390/char/sclp_tty.c
> index 4456ceb23bd2..ea1e43fd16bc 100644
> --- a/drivers/s390/char/sclp_tty.c
> +++ b/drivers/s390/char/sclp_tty.c
> @@ -86,12 +86,12 @@ sclp_tty_close(struct tty_struct *tty, struct file *filp)
>    * a string of newlines. Every newline creates a new message which
>    * needs 82 bytes.
>    */
> -static int
> +static unsigned int
>   sclp_tty_write_room (struct tty_struct *tty)
>   {
>   	unsigned long flags;
>   	struct list_head *l;
> -	int count;
> +	unsigned int count;
>   
>   	spin_lock_irqsave(&sclp_tty_lock, flags);
>   	count = 0;
> diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c
> index 7f4445b0f819..b621adee35f0 100644
> --- a/drivers/s390/char/sclp_vt220.c
> +++ b/drivers/s390/char/sclp_vt220.c
> @@ -609,12 +609,12 @@ sclp_vt220_flush_chars(struct tty_struct *tty)
>    * to change as output buffers get emptied, or if the output flow
>    * control is acted.
>    */
> -static int
> +static unsigned int
>   sclp_vt220_write_room(struct tty_struct *tty)
>   {
>   	unsigned long flags;
>   	struct list_head *l;
> -	int count;
> +	unsigned int count;
>   
>   	spin_lock_irqsave(&sclp_vt220_lock, flags);
>   	count = 0;
> diff --git a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c
> index 1b68564799fa..82d4c961ed06 100644
> --- a/drivers/s390/char/tty3270.c
> +++ b/drivers/s390/char/tty3270.c
> @@ -1071,7 +1071,7 @@ static void tty3270_cleanup(struct tty_struct *tty)
>   /*
>    * We always have room.
>    */
> -static int
> +static unsigned int
>   tty3270_write_room(struct tty_struct *tty)
>   {
>   	return INT_MAX;
> diff --git a/drivers/staging/fwserial/fwserial.c b/drivers/staging/fwserial/fwserial.c
> index 4245532d2fe0..a151cd76d24e 100644
> --- a/drivers/staging/fwserial/fwserial.c
> +++ b/drivers/staging/fwserial/fwserial.c
> @@ -1113,16 +1113,16 @@ static int fwtty_write(struct tty_struct *tty, const unsigned char *buf, int c)
>   	return (n < 0) ? 0 : n;
>   }
>   
> -static int fwtty_write_room(struct tty_struct *tty)
> +static unsigned int fwtty_write_room(struct tty_struct *tty)
>   {
>   	struct fwtty_port *port = tty->driver_data;
> -	int n;
> +	unsigned int n;
>   
>   	spin_lock_bh(&port->lock);
>   	n = dma_fifo_avail(&port->tx_fifo);
>   	spin_unlock_bh(&port->lock);
>   
> -	fwtty_dbg(port, "%d\n", n);
> +	fwtty_dbg(port, "%u\n", n);
>   
>   	return n;
>   }
> diff --git a/drivers/staging/gdm724x/gdm_tty.c b/drivers/staging/gdm724x/gdm_tty.c
> index 0ccc8c24e754..279de2cd9c4a 100644
> --- a/drivers/staging/gdm724x/gdm_tty.c
> +++ b/drivers/staging/gdm724x/gdm_tty.c
> @@ -183,7 +183,7 @@ static int gdm_tty_write(struct tty_struct *tty, const unsigned char *buf,
>   	return len;
>   }
>   
> -static int gdm_tty_write_room(struct tty_struct *tty)
> +static unsigned int gdm_tty_write_room(struct tty_struct *tty)
>   {
>   	struct gdm *gdm = tty->driver_data;
>   
> diff --git a/drivers/staging/greybus/uart.c b/drivers/staging/greybus/uart.c
> index b1e63f7798b0..529eccb99b6c 100644
> --- a/drivers/staging/greybus/uart.c
> +++ b/drivers/staging/greybus/uart.c
> @@ -440,7 +440,7 @@ static int gb_tty_write(struct tty_struct *tty, const unsigned char *buf,
>   	return count;
>   }
>   
> -static int gb_tty_write_room(struct tty_struct *tty)
> +static unsigned int gb_tty_write_room(struct tty_struct *tty)
>   {
>   	struct gb_tty *gb_tty = tty->driver_data;
>   	unsigned long flags;
> diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
> index a4b8876091d2..ee1f4d72cd5e 100644
> --- a/drivers/tty/amiserial.c
> +++ b/drivers/tty/amiserial.c
> @@ -827,7 +827,7 @@ static int rs_write(struct tty_struct * tty, const unsigned char *buf, int count
>   	return ret;
>   }
>   
> -static int rs_write_room(struct tty_struct *tty)
> +static unsigned int rs_write_room(struct tty_struct *tty)
>   {
>   	struct serial_state *info = tty->driver_data;
>   
> diff --git a/drivers/tty/ehv_bytechan.c b/drivers/tty/ehv_bytechan.c
> index 3c6dd06ec5fb..445e5ff9b36d 100644
> --- a/drivers/tty/ehv_bytechan.c
> +++ b/drivers/tty/ehv_bytechan.c
> @@ -536,11 +536,11 @@ static void ehv_bc_tty_close(struct tty_struct *ttys, struct file *filp)
>    * how much write room the driver can guarantee will be sent OR BUFFERED.  This
>    * driver MUST honor the return value.
>    */
> -static int ehv_bc_tty_write_room(struct tty_struct *ttys)
> +static unsigned int ehv_bc_tty_write_room(struct tty_struct *ttys)
>   {
>   	struct ehv_bc_data *bc = ttys->driver_data;
>   	unsigned long flags;
> -	int count;
> +	unsigned int count;
>   
>   	spin_lock_irqsave(&bc->lock, flags);
>   	count = CIRC_SPACE(bc->head, bc->tail, BUF_SIZE);
> diff --git a/drivers/tty/goldfish.c b/drivers/tty/goldfish.c
> index cd23a4b05c8f..e4f9a60dcc18 100644
> --- a/drivers/tty/goldfish.c
> +++ b/drivers/tty/goldfish.c
> @@ -193,7 +193,7 @@ static int goldfish_tty_write(struct tty_struct *tty, const unsigned char *buf,
>   	return count;
>   }
>   
> -static int goldfish_tty_write_room(struct tty_struct *tty)
> +static unsigned int goldfish_tty_write_room(struct tty_struct *tty)
>   {
>   	return 0x10000;
>   }
> diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c
> index cdcc64ea2554..a3725eb69cd3 100644
> --- a/drivers/tty/hvc/hvc_console.c
> +++ b/drivers/tty/hvc/hvc_console.c
> @@ -586,7 +586,7 @@ static void hvc_set_winsz(struct work_struct *work)
>    * how much write room the driver can guarantee will be sent OR BUFFERED.  This
>    * driver MUST honor the return value.
>    */
> -static int hvc_write_room(struct tty_struct *tty)
> +static unsigned int hvc_write_room(struct tty_struct *tty)
>   {
>   	struct hvc_struct *hp = tty->driver_data;
>   
> diff --git a/drivers/tty/hvc/hvcs.c b/drivers/tty/hvc/hvcs.c
> index 197988c55e0c..f43f2f94d8bd 100644
> --- a/drivers/tty/hvc/hvcs.c
> +++ b/drivers/tty/hvc/hvcs.c
> @@ -1376,7 +1376,7 @@ static int hvcs_write(struct tty_struct *tty,
>    * absolutely WILL BUFFER if we can't send it.  This driver MUST honor the
>    * return value, hence the reason for hvcs_struct buffering.
>    */
> -static int hvcs_write_room(struct tty_struct *tty)
> +static unsigned int hvcs_write_room(struct tty_struct *tty)
>   {
>   	struct hvcs_struct *hvcsd = tty->driver_data;
>   
> diff --git a/drivers/tty/hvc/hvsi.c b/drivers/tty/hvc/hvsi.c
> index e8c58f9bd263..0a56f44e6b12 100644
> --- a/drivers/tty/hvc/hvsi.c
> +++ b/drivers/tty/hvc/hvsi.c
> @@ -890,7 +890,7 @@ static void hvsi_write_worker(struct work_struct *work)
>   	spin_unlock_irqrestore(&hp->lock, flags);
>   }
>   
> -static int hvsi_write_room(struct tty_struct *tty)
> +static unsigned int hvsi_write_room(struct tty_struct *tty)
>   {
>   	struct hvsi_struct *hp = tty->driver_data;
>   
> @@ -929,7 +929,7 @@ static int hvsi_write(struct tty_struct *tty,
>   	 * will see there is no room in outbuf and return.
>   	 */
>   	while ((count > 0) && (hvsi_write_room(tty) > 0)) {
> -		int chunksize = min(count, hvsi_write_room(tty));
> +		int chunksize = min_t(int, count, hvsi_write_room(tty));
>   
>   		BUG_ON(hp->n_outbuf < 0);
>   		memcpy(hp->outbuf + hp->n_outbuf, source, chunksize);
> diff --git a/drivers/tty/ipwireless/tty.c b/drivers/tty/ipwireless/tty.c
> index 99bb2f149ff5..ab562838313b 100644
> --- a/drivers/tty/ipwireless/tty.c
> +++ b/drivers/tty/ipwireless/tty.c
> @@ -228,7 +228,7 @@ static int ipw_write(struct tty_struct *linux_tty,
>   	return count;
>   }
>   
> -static int ipw_write_room(struct tty_struct *linux_tty)
> +static unsigned int ipw_write_room(struct tty_struct *linux_tty)
>   {
>   	struct ipw_tty *tty = linux_tty->driver_data;
>   	int room;
> diff --git a/drivers/tty/mips_ejtag_fdc.c b/drivers/tty/mips_ejtag_fdc.c
> index a8e19b4833bf..f427e8e154d7 100644
> --- a/drivers/tty/mips_ejtag_fdc.c
> +++ b/drivers/tty/mips_ejtag_fdc.c
> @@ -840,11 +840,11 @@ static int mips_ejtag_fdc_tty_write(struct tty_struct *tty,
>   	return total;
>   }
>   
> -static int mips_ejtag_fdc_tty_write_room(struct tty_struct *tty)
> +static unsigned int mips_ejtag_fdc_tty_write_room(struct tty_struct *tty)
>   {
>   	struct mips_ejtag_fdc_tty_port *dport = tty->driver_data;
>   	struct mips_ejtag_fdc_tty *priv = dport->driver;
> -	int room;
> +	unsigned int room;
>   
>   	/* Report the space in the xmit buffer */
>   	spin_lock(&dport->xmit_lock);
> diff --git a/drivers/tty/moxa.c b/drivers/tty/moxa.c
> index 847ad3dac107..e4fe9315de29 100644
> --- a/drivers/tty/moxa.c
> +++ b/drivers/tty/moxa.c
> @@ -188,7 +188,7 @@ module_param(ttymajor, int, 0);
>   static int moxa_open(struct tty_struct *, struct file *);
>   static void moxa_close(struct tty_struct *, struct file *);
>   static int moxa_write(struct tty_struct *, const unsigned char *, int);
> -static int moxa_write_room(struct tty_struct *);
> +static unsigned int moxa_write_room(struct tty_struct *);
>   static void moxa_flush_buffer(struct tty_struct *);
>   static int moxa_chars_in_buffer(struct tty_struct *);
>   static void moxa_set_termios(struct tty_struct *, struct ktermios *);
> @@ -218,7 +218,7 @@ static int MoxaPortWriteData(struct tty_struct *, const unsigned char *, int);
>   static int MoxaPortReadData(struct moxa_port *);
>   static int MoxaPortTxQueue(struct moxa_port *);
>   static int MoxaPortRxQueue(struct moxa_port *);
> -static int MoxaPortTxFree(struct moxa_port *);
> +static unsigned int MoxaPortTxFree(struct moxa_port *);
>   static void MoxaPortTxDisable(struct moxa_port *);
>   static void MoxaPortTxEnable(struct moxa_port *);
>   static int moxa_get_serial_info(struct tty_struct *, struct serial_struct *);
> @@ -1217,7 +1217,7 @@ static int moxa_write(struct tty_struct *tty,
>   	return len;
>   }
>   
> -static int moxa_write_room(struct tty_struct *tty)
> +static unsigned int moxa_write_room(struct tty_struct *tty)
>   {
>   	struct moxa_port *ch;
>   
> @@ -1992,7 +1992,7 @@ static int MoxaPortTxQueue(struct moxa_port *port)
>   	return (wptr - rptr) & mask;
>   }
>   
> -static int MoxaPortTxFree(struct moxa_port *port)
> +static unsigned int MoxaPortTxFree(struct moxa_port *port)
>   {
>   	void __iomem *ofsAddr = port->tableAddr;
>   	u16 rptr, wptr, mask;
> diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
> index 85271e109014..5851a45d828c 100644
> --- a/drivers/tty/mxser.c
> +++ b/drivers/tty/mxser.c
> @@ -1183,7 +1183,7 @@ static void mxser_flush_chars(struct tty_struct *tty)
>   	spin_unlock_irqrestore(&info->slock, flags);
>   }
>   
> -static int mxser_write_room(struct tty_struct *tty)
> +static unsigned int mxser_write_room(struct tty_struct *tty)
>   {
>   	struct mxser_port *info = tty->driver_data;
>   	int ret;
> diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
> index 157b26ef6259..06f0c6d39620 100644
> --- a/drivers/tty/n_gsm.c
> +++ b/drivers/tty/n_gsm.c
> @@ -3056,7 +3056,7 @@ static int gsmtty_write(struct tty_struct *tty, const unsigned char *buf,
>   	return sent;
>   }
>   
> -static int gsmtty_write_room(struct tty_struct *tty)
> +static unsigned int gsmtty_write_room(struct tty_struct *tty)
>   {
>   	struct gsm_dlci *dlci = tty->driver_data;
>   	if (dlci->state == DLCI_CLOSED)
> diff --git a/drivers/tty/nozomi.c b/drivers/tty/nozomi.c
> index 9a2d78ace49b..c55475a9a184 100644
> --- a/drivers/tty/nozomi.c
> +++ b/drivers/tty/nozomi.c
> @@ -1636,10 +1636,10 @@ static int ntty_write(struct tty_struct *tty, const unsigned char *buffer,
>    * If the port is unplugged report lots of room and let the bits
>    * dribble away so we don't block anything.
>    */
> -static int ntty_write_room(struct tty_struct *tty)
> +static unsigned int ntty_write_room(struct tty_struct *tty)
>   {
>   	struct port *port = tty->driver_data;
> -	int room = 4096;
> +	unsigned int room = 4096;
>   	const struct nozomi *dc = get_dc_by_tty(tty);
>   
>   	if (dc)
> diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
> index 3e7b5c811f9b..eb8556b19592 100644
> --- a/drivers/tty/pty.c
> +++ b/drivers/tty/pty.c
> @@ -136,7 +136,7 @@ static int pty_write(struct tty_struct *tty, const unsigned char *buf, int c)
>    *	the other device.
>    */
>   
> -static int pty_write_room(struct tty_struct *tty)
> +static unsigned int pty_write_room(struct tty_struct *tty)
>   {
>   	if (tty->flow.stopped)
>   		return 0;
> diff --git a/drivers/tty/serial/kgdb_nmi.c b/drivers/tty/serial/kgdb_nmi.c
> index db059b66438e..b193bbc666d4 100644
> --- a/drivers/tty/serial/kgdb_nmi.c
> +++ b/drivers/tty/serial/kgdb_nmi.c
> @@ -298,7 +298,7 @@ static void kgdb_nmi_tty_hangup(struct tty_struct *tty)
>   	tty_port_hangup(&priv->port);
>   }
>   
> -static int kgdb_nmi_tty_write_room(struct tty_struct *tty)
> +static unsigned int kgdb_nmi_tty_write_room(struct tty_struct *tty)
>   {
>   	/* Actually, we can handle any amount as we use polled writes. */
>   	return 2048;
> diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
> index 87f7127b57e6..cb46a65a5dd8 100644
> --- a/drivers/tty/serial/serial_core.c
> +++ b/drivers/tty/serial/serial_core.c
> @@ -616,12 +616,12 @@ static int uart_write(struct tty_struct *tty,
>   	return ret;
>   }
>   
> -static int uart_write_room(struct tty_struct *tty)
> +static unsigned int uart_write_room(struct tty_struct *tty)
>   {
>   	struct uart_state *state = tty->driver_data;
>   	struct uart_port *port;
>   	unsigned long flags;
> -	int ret;
> +	unsigned int ret;
>   
>   	port = uart_port_lock(state, flags);
>   	ret = uart_circ_chars_free(&state->xmit);
> diff --git a/drivers/tty/synclink_gt.c b/drivers/tty/synclink_gt.c
> index 1555dccc28af..583aa8342112 100644
> --- a/drivers/tty/synclink_gt.c
> +++ b/drivers/tty/synclink_gt.c
> @@ -868,15 +868,15 @@ static void wait_until_sent(struct tty_struct *tty, int timeout)
>   	DBGINFO(("%s wait_until_sent exit\n", info->device_name));
>   }
>   
> -static int write_room(struct tty_struct *tty)
> +static unsigned int write_room(struct tty_struct *tty)
>   {
>   	struct slgt_info *info = tty->driver_data;
> -	int ret;
> +	unsigned int ret;
>   
>   	if (sanity_check(info, tty->name, "write_room"))
>   		return 0;
>   	ret = (info->tx_active) ? 0 : HDLC_MAX_FRAME_SIZE;
> -	DBGINFO(("%s write_room=%d\n", info->device_name, ret));
> +	DBGINFO(("%s write_room=%u\n", info->device_name, ret));
>   	return ret;
>   }
>   
> diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c
> index 07c88ccfb17a..d8834784b586 100644
> --- a/drivers/tty/tty_ioctl.c
> +++ b/drivers/tty/tty_ioctl.c
> @@ -73,7 +73,7 @@ EXPORT_SYMBOL(tty_chars_in_buffer);
>    *	returned and data may be lost as there will be no flow control.
>    */
>    
> -int tty_write_room(struct tty_struct *tty)
> +unsigned int tty_write_room(struct tty_struct *tty)
>   {
>   	if (tty->ops->write_room)
>   		return tty->ops->write_room(tty);
> diff --git a/drivers/tty/ttynull.c b/drivers/tty/ttynull.c
> index 17f05b7eb6d3..af3311a24917 100644
> --- a/drivers/tty/ttynull.c
> +++ b/drivers/tty/ttynull.c
> @@ -35,7 +35,7 @@ static int ttynull_write(struct tty_struct *tty, const unsigned char *buf,
>   	return count;
>   }
>   
> -static int ttynull_write_room(struct tty_struct *tty)
> +static unsigned int ttynull_write_room(struct tty_struct *tty)
>   {
>   	return 65536;
>   }
> diff --git a/drivers/tty/vcc.c b/drivers/tty/vcc.c
> index 0a3a71e14df4..d82ce3bb82c3 100644
> --- a/drivers/tty/vcc.c
> +++ b/drivers/tty/vcc.c
> @@ -870,10 +870,10 @@ static int vcc_write(struct tty_struct *tty, const unsigned char *buf,
>   	return total_sent ? total_sent : rv;
>   }
>   
> -static int vcc_write_room(struct tty_struct *tty)
> +static unsigned int vcc_write_room(struct tty_struct *tty)
>   {
>   	struct vcc_port *port;
> -	u64 num;
> +	unsigned int num;
>   
>   	port = vcc_get_ne(tty->index);
>   	if (unlikely(!port)) {
> diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
> index 706f066eb711..96c130714930 100644
> --- a/drivers/tty/vt/vt.c
> +++ b/drivers/tty/vt/vt.c
> @@ -3263,7 +3263,7 @@ static int con_put_char(struct tty_struct *tty, unsigned char ch)
>   	return do_con_write(tty, &ch, 1);
>   }
>   
> -static int con_write_room(struct tty_struct *tty)
> +static unsigned int con_write_room(struct tty_struct *tty)
>   {
>   	if (tty->flow.stopped)
>   		return 0;
> diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
> index ca7a61190dd9..76b7fd234238 100644
> --- a/drivers/usb/class/cdc-acm.c
> +++ b/drivers/usb/class/cdc-acm.c
> @@ -838,7 +838,7 @@ static int acm_tty_write(struct tty_struct *tty,
>   	return count;
>   }
>   
> -static int acm_tty_write_room(struct tty_struct *tty)
> +static unsigned int acm_tty_write_room(struct tty_struct *tty)
>   {
>   	struct acm *acm = tty->driver_data;
>   	/*
> diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c
> index 1e59204ec7aa..676a920d9d6b 100644
> --- a/drivers/usb/gadget/function/u_serial.c
> +++ b/drivers/usb/gadget/function/u_serial.c
> @@ -774,18 +774,18 @@ static void gs_flush_chars(struct tty_struct *tty)
>   	spin_unlock_irqrestore(&port->port_lock, flags);
>   }
>   
> -static int gs_write_room(struct tty_struct *tty)
> +static unsigned int gs_write_room(struct tty_struct *tty)
>   {
>   	struct gs_port	*port = tty->driver_data;
>   	unsigned long	flags;
> -	int		room = 0;
> +	unsigned int room = 0;
>   
>   	spin_lock_irqsave(&port->port_lock, flags);
>   	if (port->port_usb)
>   		room = kfifo_avail(&port->port_write_buf);
>   	spin_unlock_irqrestore(&port->port_lock, flags);
>   
> -	pr_vdebug("gs_write_room: (%d,%p) room=%d\n",
> +	pr_vdebug("gs_write_room: (%d,%p) room=%u\n",
>   		port->port_num, tty, room);
>   
>   	return room;
> diff --git a/drivers/usb/host/xhci-dbgtty.c b/drivers/usb/host/xhci-dbgtty.c
> index ae4e4ab638b5..cd3ab35dd689 100644
> --- a/drivers/usb/host/xhci-dbgtty.c
> +++ b/drivers/usb/host/xhci-dbgtty.c
> @@ -240,11 +240,11 @@ static void dbc_tty_flush_chars(struct tty_struct *tty)
>   	spin_unlock_irqrestore(&port->port_lock, flags);
>   }
>   
> -static int dbc_tty_write_room(struct tty_struct *tty)
> +static unsigned int dbc_tty_write_room(struct tty_struct *tty)
>   {
>   	struct dbc_port		*port = tty->driver_data;
>   	unsigned long		flags;
> -	int			room = 0;
> +	unsigned int		room;
>   
>   	spin_lock_irqsave(&port->port_lock, flags);
>   	room = kfifo_avail(&port->write_fifo);
> diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
> index 98b33b1b5357..055096831daf 100644
> --- a/drivers/usb/serial/usb-serial.c
> +++ b/drivers/usb/serial/usb-serial.c
> @@ -376,7 +376,7 @@ static int serial_write(struct tty_struct *tty, const unsigned char *buf,
>   	return retval;
>   }
>   
> -static int serial_write_room(struct tty_struct *tty)
> +static unsigned int serial_write_room(struct tty_struct *tty)
>   {
>   	struct usb_serial_port *port = tty->driver_data;
>   
> diff --git a/include/linux/tty.h b/include/linux/tty.h
> index e18a4f1ac39d..d18fc34d3054 100644
> --- a/include/linux/tty.h
> +++ b/include/linux/tty.h
> @@ -459,7 +459,7 @@ extern void tty_write_message(struct tty_struct *tty, char *msg);
>   extern int tty_send_xchar(struct tty_struct *tty, char ch);
>   extern int tty_put_char(struct tty_struct *tty, unsigned char c);
>   extern int tty_chars_in_buffer(struct tty_struct *tty);
> -extern int tty_write_room(struct tty_struct *tty);
> +extern unsigned int tty_write_room(struct tty_struct *tty);
>   extern void tty_driver_flush_buffer(struct tty_struct *tty);
>   extern void tty_throttle(struct tty_struct *tty);
>   extern void tty_unthrottle(struct tty_struct *tty);
> diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h
> index 653fa5af3a22..ea5b15c72764 100644
> --- a/include/linux/tty_driver.h
> +++ b/include/linux/tty_driver.h
> @@ -89,7 +89,7 @@
>    *
>    *	Note: Do not call this function directly, call tty_driver_flush_chars
>    *
> - * int  (*write_room)(struct tty_struct *tty);
> + * unsigned int  (*write_room)(struct tty_struct *tty);
>    *
>    * 	This routine returns the numbers of characters the tty driver
>    * 	will accept for queuing to be written.  This number is subject
> @@ -256,7 +256,7 @@ struct tty_operations {
>   		      const unsigned char *buf, int count);
>   	int  (*put_char)(struct tty_struct *tty, unsigned char ch);
>   	void (*flush_chars)(struct tty_struct *tty);
> -	int  (*write_room)(struct tty_struct *tty);
> +	unsigned int (*write_room)(struct tty_struct *tty);
>   	int  (*chars_in_buffer)(struct tty_struct *tty);
>   	int  (*ioctl)(struct tty_struct *tty,
>   		    unsigned int cmd, unsigned long arg);
> diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c
> index a58584949a95..a5e3d957f20f 100644
> --- a/net/bluetooth/rfcomm/tty.c
> +++ b/net/bluetooth/rfcomm/tty.c
> @@ -807,7 +807,7 @@ static int rfcomm_tty_write(struct tty_struct *tty, const unsigned char *buf, in
>   	return sent;
>   }
>   
> -static int rfcomm_tty_write_room(struct tty_struct *tty)
> +static unsigned int rfcomm_tty_write_room(struct tty_struct *tty)
>   {
>   	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
>   	int room = 0;
> 

Acked-By: Anton Ivanov <anton.ivanov@cambridgegreys.com>
Alex Elder May 5, 2021, 12:15 p.m. UTC | #2
On 5/5/21 4:19 AM, Jiri Slaby wrote:
> Line disciplines expect a positive value or zero returned from
> tty->ops->write_room (invoked by tty_write_room). So make this
> assumption explicit by using unsigned int as a return value. Both of
> tty->ops->write_room and tty_write_room.
> 
> Signed-off-by: Jiri Slaby <jslaby@suse.cz>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
> Cc: Matt Turner <mattst88@gmail.com>
> Cc: Geert Uytterhoeven <geert@linux-m68k.org>
> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> Cc: Helge Deller <deller@gmx.de>
> Cc: Jeff Dike <jdike@addtoit.com>
> Cc: Richard Weinberger <richard@nod.at>
> Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
> Cc: Chris Zankel <chris@zankel.net>
> Cc: Max Filippov <jcmvbkbc@gmail.com>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
> Cc: Jens Taprogge <jens.taprogge@taprogge.org>
> Cc: Karsten Keil <isdn@linux-pingi.de>
> Cc: Scott Branden <scott.branden@broadcom.com>
> Cc: Ulf Hansson <ulf.hansson@linaro.org>
> Cc: "David S. Miller" <davem@davemloft.net>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Heiko Carstens <hca@linux.ibm.com>
> Cc: Vasily Gorbik <gor@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> Cc: David Lin <dtwlin@gmail.com>
> Cc: Johan Hovold <johan@kernel.org>
> Cc: Alex Elder <elder@kernel.org>
> Cc: Laurentiu Tudor <laurentiu.tudor@nxp.com>
> Cc: Jiri Kosina <jikos@kernel.org>
> Cc: David Sterba <dsterba@suse.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Oliver Neukum <oneukum@suse.com>
> Cc: Felipe Balbi <balbi@kernel.org>
> Cc: Mathias Nyman <mathias.nyman@intel.com>
> Cc: Marcel Holtmann <marcel@holtmann.org>
> Cc: Johan Hedberg <johan.hedberg@gmail.com>
> Cc: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
> ---
>   arch/alpha/kernel/srmcons.c            | 2 +-
>   arch/m68k/emu/nfcon.c                  | 2 +-
>   arch/parisc/kernel/pdc_cons.c          | 2 +-
>   arch/um/drivers/line.c                 | 6 +++---
>   arch/um/drivers/line.h                 | 2 +-
>   arch/xtensa/platforms/iss/console.c    | 2 +-
>   drivers/char/pcmcia/synclink_cs.c      | 2 +-
>   drivers/char/ttyprintk.c               | 2 +-
>   drivers/ipack/devices/ipoctal.c        | 2 +-
>   drivers/isdn/capi/capi.c               | 6 +++---
>   drivers/misc/bcm-vk/bcm_vk_tty.c       | 2 +-
>   drivers/mmc/core/sdio_uart.c           | 2 +-
>   drivers/net/usb/hso.c                  | 4 ++--
>   drivers/s390/char/con3215.c            | 2 +-
>   drivers/s390/char/sclp_tty.c           | 4 ++--
>   drivers/s390/char/sclp_vt220.c         | 4 ++--
>   drivers/s390/char/tty3270.c            | 2 +-
>   drivers/staging/fwserial/fwserial.c    | 6 +++---
>   drivers/staging/gdm724x/gdm_tty.c      | 2 +-
>   drivers/staging/greybus/uart.c         | 2 +-
>   drivers/tty/amiserial.c                | 2 +-
>   drivers/tty/ehv_bytechan.c             | 4 ++--
>   drivers/tty/goldfish.c                 | 2 +-
>   drivers/tty/hvc/hvc_console.c          | 2 +-
>   drivers/tty/hvc/hvcs.c                 | 2 +-
>   drivers/tty/hvc/hvsi.c                 | 4 ++--
>   drivers/tty/ipwireless/tty.c           | 2 +-
>   drivers/tty/mips_ejtag_fdc.c           | 4 ++--
>   drivers/tty/moxa.c                     | 8 ++++----
>   drivers/tty/mxser.c                    | 2 +-
>   drivers/tty/n_gsm.c                    | 2 +-
>   drivers/tty/nozomi.c                   | 4 ++--
>   drivers/tty/pty.c                      | 2 +-
>   drivers/tty/serial/kgdb_nmi.c          | 2 +-
>   drivers/tty/serial/serial_core.c       | 4 ++--
>   drivers/tty/synclink_gt.c              | 6 +++---
>   drivers/tty/tty_ioctl.c                | 2 +-
>   drivers/tty/ttynull.c                  | 2 +-
>   drivers/tty/vcc.c                      | 4 ++--
>   drivers/tty/vt/vt.c                    | 2 +-
>   drivers/usb/class/cdc-acm.c            | 2 +-
>   drivers/usb/gadget/function/u_serial.c | 6 +++---
>   drivers/usb/host/xhci-dbgtty.c         | 4 ++--
>   drivers/usb/serial/usb-serial.c        | 2 +-
>   include/linux/tty.h                    | 2 +-
>   include/linux/tty_driver.h             | 4 ++--
>   net/bluetooth/rfcomm/tty.c             | 2 +-
>   47 files changed, 71 insertions(+), 71 deletions(-)

. . .

Looks good.

Acked-by: Alex Elder <elder@linaro.org.

> diff --git a/drivers/staging/greybus/uart.c b/drivers/staging/greybus/uart.c
> index b1e63f7798b0..529eccb99b6c 100644
> --- a/drivers/staging/greybus/uart.c
> +++ b/drivers/staging/greybus/uart.c
> @@ -440,7 +440,7 @@ static int gb_tty_write(struct tty_struct *tty, const unsigned char *buf,
>   	return count;
>   }
>   
> -static int gb_tty_write_room(struct tty_struct *tty)
> +static unsigned int gb_tty_write_room(struct tty_struct *tty)
>   {
>   	struct gb_tty *gb_tty = tty->driver_data;
>   	unsigned long flags;

. . .
Laurentiu Tudor May 10, 2021, 11:27 a.m. UTC | #3
On 5/5/2021 12:19 PM, Jiri Slaby wrote:
> Line disciplines expect a positive value or zero returned from

> tty->ops->write_room (invoked by tty_write_room). So make this

> assumption explicit by using unsigned int as a return value. Both of

> tty->ops->write_room and tty_write_room.

> 

> Signed-off-by: Jiri Slaby <jslaby@suse.cz>


>  drivers/tty/ehv_bytechan.c             | 4 ++--


Acked-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>


---
Best Regards, Laurentiu
diff mbox series

Patch

diff --git a/arch/alpha/kernel/srmcons.c b/arch/alpha/kernel/srmcons.c
index 438b10c44d73..2110b7e7f988 100644
--- a/arch/alpha/kernel/srmcons.c
+++ b/arch/alpha/kernel/srmcons.c
@@ -142,7 +142,7 @@  srmcons_write(struct tty_struct *tty,
 	return count;
 }
 
-static int
+static unsigned int
 srmcons_write_room(struct tty_struct *tty)
 {
 	return 512;
diff --git a/arch/m68k/emu/nfcon.c b/arch/m68k/emu/nfcon.c
index 57e8c8fb5eba..92636c89d65b 100644
--- a/arch/m68k/emu/nfcon.c
+++ b/arch/m68k/emu/nfcon.c
@@ -85,7 +85,7 @@  static int nfcon_tty_put_char(struct tty_struct *tty, unsigned char ch)
 	return 1;
 }
 
-static int nfcon_tty_write_room(struct tty_struct *tty)
+static unsigned int nfcon_tty_write_room(struct tty_struct *tty)
 {
 	return 64;
 }
diff --git a/arch/parisc/kernel/pdc_cons.c b/arch/parisc/kernel/pdc_cons.c
index 7ed404c60a9e..fe2ed0bbd07e 100644
--- a/arch/parisc/kernel/pdc_cons.c
+++ b/arch/parisc/kernel/pdc_cons.c
@@ -103,7 +103,7 @@  static int pdc_console_tty_write(struct tty_struct *tty, const unsigned char *bu
 	return count;
 }
 
-static int pdc_console_tty_write_room(struct tty_struct *tty)
+static unsigned int pdc_console_tty_write_room(struct tty_struct *tty)
 {
 	return 32768; /* no limit, no buffer used */
 }
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c
index 1c70a31e7c5b..2b8810ba5470 100644
--- a/arch/um/drivers/line.c
+++ b/arch/um/drivers/line.c
@@ -32,7 +32,7 @@  static irqreturn_t line_interrupt(int irq, void *data)
  *
  * Should be called while holding line->lock (this does not modify data).
  */
-static int write_room(struct line *line)
+static unsigned int write_room(struct line *line)
 {
 	int n;
 
@@ -47,11 +47,11 @@  static int write_room(struct line *line)
 	return n - 1;
 }
 
-int line_write_room(struct tty_struct *tty)
+unsigned int line_write_room(struct tty_struct *tty)
 {
 	struct line *line = tty->driver_data;
 	unsigned long flags;
-	int room;
+	unsigned int room;
 
 	spin_lock_irqsave(&line->lock, flags);
 	room = write_room(line);
diff --git a/arch/um/drivers/line.h b/arch/um/drivers/line.h
index 01d21e76144f..861edf329569 100644
--- a/arch/um/drivers/line.h
+++ b/arch/um/drivers/line.h
@@ -70,7 +70,7 @@  extern void line_set_termios(struct tty_struct *tty, struct ktermios * old);
 extern int line_chars_in_buffer(struct tty_struct *tty);
 extern void line_flush_buffer(struct tty_struct *tty);
 extern void line_flush_chars(struct tty_struct *tty);
-extern int line_write_room(struct tty_struct *tty);
+extern unsigned int line_write_room(struct tty_struct *tty);
 extern void line_throttle(struct tty_struct *tty);
 extern void line_unthrottle(struct tty_struct *tty);
 
diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c
index a3dda25a4e45..98ac3a7fdb0a 100644
--- a/arch/xtensa/platforms/iss/console.c
+++ b/arch/xtensa/platforms/iss/console.c
@@ -100,7 +100,7 @@  static void rs_flush_chars(struct tty_struct *tty)
 {
 }
 
-static int rs_write_room(struct tty_struct *tty)
+static unsigned int rs_write_room(struct tty_struct *tty)
 {
 	/* Let's say iss can always accept 2K characters.. */
 	return 2 * 1024;
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
index b4707bc3aee8..e4b2c68f44f5 100644
--- a/drivers/char/pcmcia/synclink_cs.c
+++ b/drivers/char/pcmcia/synclink_cs.c
@@ -1609,7 +1609,7 @@  static int mgslpc_write(struct tty_struct * tty,
 
 /* Return the count of free bytes in transmit buffer
  */
-static int mgslpc_write_room(struct tty_struct *tty)
+static unsigned int mgslpc_write_room(struct tty_struct *tty)
 {
 	MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data;
 	int ret;
diff --git a/drivers/char/ttyprintk.c b/drivers/char/ttyprintk.c
index 93f5d11c830b..e93b0af92339 100644
--- a/drivers/char/ttyprintk.c
+++ b/drivers/char/ttyprintk.c
@@ -132,7 +132,7 @@  static int tpk_write(struct tty_struct *tty,
 /*
  * TTY operations write_room function.
  */
-static int tpk_write_room(struct tty_struct *tty)
+static unsigned int tpk_write_room(struct tty_struct *tty)
 {
 	return TPK_MAX_ROOM;
 }
diff --git a/drivers/ipack/devices/ipoctal.c b/drivers/ipack/devices/ipoctal.c
index 3940714e4397..ea0f1aeaaa06 100644
--- a/drivers/ipack/devices/ipoctal.c
+++ b/drivers/ipack/devices/ipoctal.c
@@ -460,7 +460,7 @@  static int ipoctal_write_tty(struct tty_struct *tty,
 	return char_copied;
 }
 
-static int ipoctal_write_room(struct tty_struct *tty)
+static unsigned int ipoctal_write_room(struct tty_struct *tty)
 {
 	struct ipoctal_channel *channel = tty->driver_data;
 
diff --git a/drivers/isdn/capi/capi.c b/drivers/isdn/capi/capi.c
index fdf87acccd06..c50c454006b3 100644
--- a/drivers/isdn/capi/capi.c
+++ b/drivers/isdn/capi/capi.c
@@ -1175,14 +1175,14 @@  static void capinc_tty_flush_chars(struct tty_struct *tty)
 	handle_minor_recv(mp);
 }
 
-static int capinc_tty_write_room(struct tty_struct *tty)
+static unsigned int capinc_tty_write_room(struct tty_struct *tty)
 {
 	struct capiminor *mp = tty->driver_data;
-	int room;
+	unsigned int room;
 
 	room = CAPINC_MAX_SENDQUEUE-skb_queue_len(&mp->outqueue);
 	room *= CAPI_MAX_BLKSIZE;
-	pr_debug("capinc_tty_write_room = %d\n", room);
+	pr_debug("capinc_tty_write_room = %u\n", room);
 	return room;
 }
 
diff --git a/drivers/misc/bcm-vk/bcm_vk_tty.c b/drivers/misc/bcm-vk/bcm_vk_tty.c
index 4d02692ecfc7..dae9eeed84a2 100644
--- a/drivers/misc/bcm-vk/bcm_vk_tty.c
+++ b/drivers/misc/bcm-vk/bcm_vk_tty.c
@@ -214,7 +214,7 @@  static int bcm_vk_tty_write(struct tty_struct *tty,
 	return count;
 }
 
-static int bcm_vk_tty_write_room(struct tty_struct *tty)
+static unsigned int bcm_vk_tty_write_room(struct tty_struct *tty)
 {
 	struct bcm_vk *vk = dev_get_drvdata(tty->dev);
 
diff --git a/drivers/mmc/core/sdio_uart.c b/drivers/mmc/core/sdio_uart.c
index dbcac2b7f2fe..c8f4eca7aad4 100644
--- a/drivers/mmc/core/sdio_uart.c
+++ b/drivers/mmc/core/sdio_uart.c
@@ -797,7 +797,7 @@  static int sdio_uart_write(struct tty_struct *tty, const unsigned char *buf,
 	return ret;
 }
 
-static int sdio_uart_write_room(struct tty_struct *tty)
+static unsigned int sdio_uart_write_room(struct tty_struct *tty)
 {
 	struct sdio_uart_port *port = tty->driver_data;
 	return FIFO_SIZE - kfifo_len(&port->xmit_fifo);
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
index 3ef4b2841402..bb8bb85308ab 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -1357,10 +1357,10 @@  static int hso_serial_write(struct tty_struct *tty, const unsigned char *buf,
 }
 
 /* how much room is there for writing */
-static int hso_serial_write_room(struct tty_struct *tty)
+static unsigned int hso_serial_write_room(struct tty_struct *tty)
 {
 	struct hso_serial *serial = tty->driver_data;
-	int room;
+	unsigned int room;
 	unsigned long flags;
 
 	spin_lock_irqsave(&serial->serial_lock, flags);
diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c
index 1fd5bca9fa20..c9fd4a05931a 100644
--- a/drivers/s390/char/con3215.c
+++ b/drivers/s390/char/con3215.c
@@ -924,7 +924,7 @@  static void tty3215_close(struct tty_struct *tty, struct file * filp)
 /*
  * Returns the amount of free space in the output buffer.
  */
-static int tty3215_write_room(struct tty_struct *tty)
+static unsigned int tty3215_write_room(struct tty_struct *tty)
 {
 	struct raw3215_info *raw = tty->driver_data;
 
diff --git a/drivers/s390/char/sclp_tty.c b/drivers/s390/char/sclp_tty.c
index 4456ceb23bd2..ea1e43fd16bc 100644
--- a/drivers/s390/char/sclp_tty.c
+++ b/drivers/s390/char/sclp_tty.c
@@ -86,12 +86,12 @@  sclp_tty_close(struct tty_struct *tty, struct file *filp)
  * a string of newlines. Every newline creates a new message which
  * needs 82 bytes.
  */
-static int
+static unsigned int
 sclp_tty_write_room (struct tty_struct *tty)
 {
 	unsigned long flags;
 	struct list_head *l;
-	int count;
+	unsigned int count;
 
 	spin_lock_irqsave(&sclp_tty_lock, flags);
 	count = 0;
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c
index 7f4445b0f819..b621adee35f0 100644
--- a/drivers/s390/char/sclp_vt220.c
+++ b/drivers/s390/char/sclp_vt220.c
@@ -609,12 +609,12 @@  sclp_vt220_flush_chars(struct tty_struct *tty)
  * to change as output buffers get emptied, or if the output flow
  * control is acted.
  */
-static int
+static unsigned int
 sclp_vt220_write_room(struct tty_struct *tty)
 {
 	unsigned long flags;
 	struct list_head *l;
-	int count;
+	unsigned int count;
 
 	spin_lock_irqsave(&sclp_vt220_lock, flags);
 	count = 0;
diff --git a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c
index 1b68564799fa..82d4c961ed06 100644
--- a/drivers/s390/char/tty3270.c
+++ b/drivers/s390/char/tty3270.c
@@ -1071,7 +1071,7 @@  static void tty3270_cleanup(struct tty_struct *tty)
 /*
  * We always have room.
  */
-static int
+static unsigned int
 tty3270_write_room(struct tty_struct *tty)
 {
 	return INT_MAX;
diff --git a/drivers/staging/fwserial/fwserial.c b/drivers/staging/fwserial/fwserial.c
index 4245532d2fe0..a151cd76d24e 100644
--- a/drivers/staging/fwserial/fwserial.c
+++ b/drivers/staging/fwserial/fwserial.c
@@ -1113,16 +1113,16 @@  static int fwtty_write(struct tty_struct *tty, const unsigned char *buf, int c)
 	return (n < 0) ? 0 : n;
 }
 
-static int fwtty_write_room(struct tty_struct *tty)
+static unsigned int fwtty_write_room(struct tty_struct *tty)
 {
 	struct fwtty_port *port = tty->driver_data;
-	int n;
+	unsigned int n;
 
 	spin_lock_bh(&port->lock);
 	n = dma_fifo_avail(&port->tx_fifo);
 	spin_unlock_bh(&port->lock);
 
-	fwtty_dbg(port, "%d\n", n);
+	fwtty_dbg(port, "%u\n", n);
 
 	return n;
 }
diff --git a/drivers/staging/gdm724x/gdm_tty.c b/drivers/staging/gdm724x/gdm_tty.c
index 0ccc8c24e754..279de2cd9c4a 100644
--- a/drivers/staging/gdm724x/gdm_tty.c
+++ b/drivers/staging/gdm724x/gdm_tty.c
@@ -183,7 +183,7 @@  static int gdm_tty_write(struct tty_struct *tty, const unsigned char *buf,
 	return len;
 }
 
-static int gdm_tty_write_room(struct tty_struct *tty)
+static unsigned int gdm_tty_write_room(struct tty_struct *tty)
 {
 	struct gdm *gdm = tty->driver_data;
 
diff --git a/drivers/staging/greybus/uart.c b/drivers/staging/greybus/uart.c
index b1e63f7798b0..529eccb99b6c 100644
--- a/drivers/staging/greybus/uart.c
+++ b/drivers/staging/greybus/uart.c
@@ -440,7 +440,7 @@  static int gb_tty_write(struct tty_struct *tty, const unsigned char *buf,
 	return count;
 }
 
-static int gb_tty_write_room(struct tty_struct *tty)
+static unsigned int gb_tty_write_room(struct tty_struct *tty)
 {
 	struct gb_tty *gb_tty = tty->driver_data;
 	unsigned long flags;
diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
index a4b8876091d2..ee1f4d72cd5e 100644
--- a/drivers/tty/amiserial.c
+++ b/drivers/tty/amiserial.c
@@ -827,7 +827,7 @@  static int rs_write(struct tty_struct * tty, const unsigned char *buf, int count
 	return ret;
 }
 
-static int rs_write_room(struct tty_struct *tty)
+static unsigned int rs_write_room(struct tty_struct *tty)
 {
 	struct serial_state *info = tty->driver_data;
 
diff --git a/drivers/tty/ehv_bytechan.c b/drivers/tty/ehv_bytechan.c
index 3c6dd06ec5fb..445e5ff9b36d 100644
--- a/drivers/tty/ehv_bytechan.c
+++ b/drivers/tty/ehv_bytechan.c
@@ -536,11 +536,11 @@  static void ehv_bc_tty_close(struct tty_struct *ttys, struct file *filp)
  * how much write room the driver can guarantee will be sent OR BUFFERED.  This
  * driver MUST honor the return value.
  */
-static int ehv_bc_tty_write_room(struct tty_struct *ttys)
+static unsigned int ehv_bc_tty_write_room(struct tty_struct *ttys)
 {
 	struct ehv_bc_data *bc = ttys->driver_data;
 	unsigned long flags;
-	int count;
+	unsigned int count;
 
 	spin_lock_irqsave(&bc->lock, flags);
 	count = CIRC_SPACE(bc->head, bc->tail, BUF_SIZE);
diff --git a/drivers/tty/goldfish.c b/drivers/tty/goldfish.c
index cd23a4b05c8f..e4f9a60dcc18 100644
--- a/drivers/tty/goldfish.c
+++ b/drivers/tty/goldfish.c
@@ -193,7 +193,7 @@  static int goldfish_tty_write(struct tty_struct *tty, const unsigned char *buf,
 	return count;
 }
 
-static int goldfish_tty_write_room(struct tty_struct *tty)
+static unsigned int goldfish_tty_write_room(struct tty_struct *tty)
 {
 	return 0x10000;
 }
diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c
index cdcc64ea2554..a3725eb69cd3 100644
--- a/drivers/tty/hvc/hvc_console.c
+++ b/drivers/tty/hvc/hvc_console.c
@@ -586,7 +586,7 @@  static void hvc_set_winsz(struct work_struct *work)
  * how much write room the driver can guarantee will be sent OR BUFFERED.  This
  * driver MUST honor the return value.
  */
-static int hvc_write_room(struct tty_struct *tty)
+static unsigned int hvc_write_room(struct tty_struct *tty)
 {
 	struct hvc_struct *hp = tty->driver_data;
 
diff --git a/drivers/tty/hvc/hvcs.c b/drivers/tty/hvc/hvcs.c
index 197988c55e0c..f43f2f94d8bd 100644
--- a/drivers/tty/hvc/hvcs.c
+++ b/drivers/tty/hvc/hvcs.c
@@ -1376,7 +1376,7 @@  static int hvcs_write(struct tty_struct *tty,
  * absolutely WILL BUFFER if we can't send it.  This driver MUST honor the
  * return value, hence the reason for hvcs_struct buffering.
  */
-static int hvcs_write_room(struct tty_struct *tty)
+static unsigned int hvcs_write_room(struct tty_struct *tty)
 {
 	struct hvcs_struct *hvcsd = tty->driver_data;
 
diff --git a/drivers/tty/hvc/hvsi.c b/drivers/tty/hvc/hvsi.c
index e8c58f9bd263..0a56f44e6b12 100644
--- a/drivers/tty/hvc/hvsi.c
+++ b/drivers/tty/hvc/hvsi.c
@@ -890,7 +890,7 @@  static void hvsi_write_worker(struct work_struct *work)
 	spin_unlock_irqrestore(&hp->lock, flags);
 }
 
-static int hvsi_write_room(struct tty_struct *tty)
+static unsigned int hvsi_write_room(struct tty_struct *tty)
 {
 	struct hvsi_struct *hp = tty->driver_data;
 
@@ -929,7 +929,7 @@  static int hvsi_write(struct tty_struct *tty,
 	 * will see there is no room in outbuf and return.
 	 */
 	while ((count > 0) && (hvsi_write_room(tty) > 0)) {
-		int chunksize = min(count, hvsi_write_room(tty));
+		int chunksize = min_t(int, count, hvsi_write_room(tty));
 
 		BUG_ON(hp->n_outbuf < 0);
 		memcpy(hp->outbuf + hp->n_outbuf, source, chunksize);
diff --git a/drivers/tty/ipwireless/tty.c b/drivers/tty/ipwireless/tty.c
index 99bb2f149ff5..ab562838313b 100644
--- a/drivers/tty/ipwireless/tty.c
+++ b/drivers/tty/ipwireless/tty.c
@@ -228,7 +228,7 @@  static int ipw_write(struct tty_struct *linux_tty,
 	return count;
 }
 
-static int ipw_write_room(struct tty_struct *linux_tty)
+static unsigned int ipw_write_room(struct tty_struct *linux_tty)
 {
 	struct ipw_tty *tty = linux_tty->driver_data;
 	int room;
diff --git a/drivers/tty/mips_ejtag_fdc.c b/drivers/tty/mips_ejtag_fdc.c
index a8e19b4833bf..f427e8e154d7 100644
--- a/drivers/tty/mips_ejtag_fdc.c
+++ b/drivers/tty/mips_ejtag_fdc.c
@@ -840,11 +840,11 @@  static int mips_ejtag_fdc_tty_write(struct tty_struct *tty,
 	return total;
 }
 
-static int mips_ejtag_fdc_tty_write_room(struct tty_struct *tty)
+static unsigned int mips_ejtag_fdc_tty_write_room(struct tty_struct *tty)
 {
 	struct mips_ejtag_fdc_tty_port *dport = tty->driver_data;
 	struct mips_ejtag_fdc_tty *priv = dport->driver;
-	int room;
+	unsigned int room;
 
 	/* Report the space in the xmit buffer */
 	spin_lock(&dport->xmit_lock);
diff --git a/drivers/tty/moxa.c b/drivers/tty/moxa.c
index 847ad3dac107..e4fe9315de29 100644
--- a/drivers/tty/moxa.c
+++ b/drivers/tty/moxa.c
@@ -188,7 +188,7 @@  module_param(ttymajor, int, 0);
 static int moxa_open(struct tty_struct *, struct file *);
 static void moxa_close(struct tty_struct *, struct file *);
 static int moxa_write(struct tty_struct *, const unsigned char *, int);
-static int moxa_write_room(struct tty_struct *);
+static unsigned int moxa_write_room(struct tty_struct *);
 static void moxa_flush_buffer(struct tty_struct *);
 static int moxa_chars_in_buffer(struct tty_struct *);
 static void moxa_set_termios(struct tty_struct *, struct ktermios *);
@@ -218,7 +218,7 @@  static int MoxaPortWriteData(struct tty_struct *, const unsigned char *, int);
 static int MoxaPortReadData(struct moxa_port *);
 static int MoxaPortTxQueue(struct moxa_port *);
 static int MoxaPortRxQueue(struct moxa_port *);
-static int MoxaPortTxFree(struct moxa_port *);
+static unsigned int MoxaPortTxFree(struct moxa_port *);
 static void MoxaPortTxDisable(struct moxa_port *);
 static void MoxaPortTxEnable(struct moxa_port *);
 static int moxa_get_serial_info(struct tty_struct *, struct serial_struct *);
@@ -1217,7 +1217,7 @@  static int moxa_write(struct tty_struct *tty,
 	return len;
 }
 
-static int moxa_write_room(struct tty_struct *tty)
+static unsigned int moxa_write_room(struct tty_struct *tty)
 {
 	struct moxa_port *ch;
 
@@ -1992,7 +1992,7 @@  static int MoxaPortTxQueue(struct moxa_port *port)
 	return (wptr - rptr) & mask;
 }
 
-static int MoxaPortTxFree(struct moxa_port *port)
+static unsigned int MoxaPortTxFree(struct moxa_port *port)
 {
 	void __iomem *ofsAddr = port->tableAddr;
 	u16 rptr, wptr, mask;
diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 85271e109014..5851a45d828c 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -1183,7 +1183,7 @@  static void mxser_flush_chars(struct tty_struct *tty)
 	spin_unlock_irqrestore(&info->slock, flags);
 }
 
-static int mxser_write_room(struct tty_struct *tty)
+static unsigned int mxser_write_room(struct tty_struct *tty)
 {
 	struct mxser_port *info = tty->driver_data;
 	int ret;
diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
index 157b26ef6259..06f0c6d39620 100644
--- a/drivers/tty/n_gsm.c
+++ b/drivers/tty/n_gsm.c
@@ -3056,7 +3056,7 @@  static int gsmtty_write(struct tty_struct *tty, const unsigned char *buf,
 	return sent;
 }
 
-static int gsmtty_write_room(struct tty_struct *tty)
+static unsigned int gsmtty_write_room(struct tty_struct *tty)
 {
 	struct gsm_dlci *dlci = tty->driver_data;
 	if (dlci->state == DLCI_CLOSED)
diff --git a/drivers/tty/nozomi.c b/drivers/tty/nozomi.c
index 9a2d78ace49b..c55475a9a184 100644
--- a/drivers/tty/nozomi.c
+++ b/drivers/tty/nozomi.c
@@ -1636,10 +1636,10 @@  static int ntty_write(struct tty_struct *tty, const unsigned char *buffer,
  * If the port is unplugged report lots of room and let the bits
  * dribble away so we don't block anything.
  */
-static int ntty_write_room(struct tty_struct *tty)
+static unsigned int ntty_write_room(struct tty_struct *tty)
 {
 	struct port *port = tty->driver_data;
-	int room = 4096;
+	unsigned int room = 4096;
 	const struct nozomi *dc = get_dc_by_tty(tty);
 
 	if (dc)
diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
index 3e7b5c811f9b..eb8556b19592 100644
--- a/drivers/tty/pty.c
+++ b/drivers/tty/pty.c
@@ -136,7 +136,7 @@  static int pty_write(struct tty_struct *tty, const unsigned char *buf, int c)
  *	the other device.
  */
 
-static int pty_write_room(struct tty_struct *tty)
+static unsigned int pty_write_room(struct tty_struct *tty)
 {
 	if (tty->flow.stopped)
 		return 0;
diff --git a/drivers/tty/serial/kgdb_nmi.c b/drivers/tty/serial/kgdb_nmi.c
index db059b66438e..b193bbc666d4 100644
--- a/drivers/tty/serial/kgdb_nmi.c
+++ b/drivers/tty/serial/kgdb_nmi.c
@@ -298,7 +298,7 @@  static void kgdb_nmi_tty_hangup(struct tty_struct *tty)
 	tty_port_hangup(&priv->port);
 }
 
-static int kgdb_nmi_tty_write_room(struct tty_struct *tty)
+static unsigned int kgdb_nmi_tty_write_room(struct tty_struct *tty)
 {
 	/* Actually, we can handle any amount as we use polled writes. */
 	return 2048;
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 87f7127b57e6..cb46a65a5dd8 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -616,12 +616,12 @@  static int uart_write(struct tty_struct *tty,
 	return ret;
 }
 
-static int uart_write_room(struct tty_struct *tty)
+static unsigned int uart_write_room(struct tty_struct *tty)
 {
 	struct uart_state *state = tty->driver_data;
 	struct uart_port *port;
 	unsigned long flags;
-	int ret;
+	unsigned int ret;
 
 	port = uart_port_lock(state, flags);
 	ret = uart_circ_chars_free(&state->xmit);
diff --git a/drivers/tty/synclink_gt.c b/drivers/tty/synclink_gt.c
index 1555dccc28af..583aa8342112 100644
--- a/drivers/tty/synclink_gt.c
+++ b/drivers/tty/synclink_gt.c
@@ -868,15 +868,15 @@  static void wait_until_sent(struct tty_struct *tty, int timeout)
 	DBGINFO(("%s wait_until_sent exit\n", info->device_name));
 }
 
-static int write_room(struct tty_struct *tty)
+static unsigned int write_room(struct tty_struct *tty)
 {
 	struct slgt_info *info = tty->driver_data;
-	int ret;
+	unsigned int ret;
 
 	if (sanity_check(info, tty->name, "write_room"))
 		return 0;
 	ret = (info->tx_active) ? 0 : HDLC_MAX_FRAME_SIZE;
-	DBGINFO(("%s write_room=%d\n", info->device_name, ret));
+	DBGINFO(("%s write_room=%u\n", info->device_name, ret));
 	return ret;
 }
 
diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c
index 07c88ccfb17a..d8834784b586 100644
--- a/drivers/tty/tty_ioctl.c
+++ b/drivers/tty/tty_ioctl.c
@@ -73,7 +73,7 @@  EXPORT_SYMBOL(tty_chars_in_buffer);
  *	returned and data may be lost as there will be no flow control.
  */
  
-int tty_write_room(struct tty_struct *tty)
+unsigned int tty_write_room(struct tty_struct *tty)
 {
 	if (tty->ops->write_room)
 		return tty->ops->write_room(tty);
diff --git a/drivers/tty/ttynull.c b/drivers/tty/ttynull.c
index 17f05b7eb6d3..af3311a24917 100644
--- a/drivers/tty/ttynull.c
+++ b/drivers/tty/ttynull.c
@@ -35,7 +35,7 @@  static int ttynull_write(struct tty_struct *tty, const unsigned char *buf,
 	return count;
 }
 
-static int ttynull_write_room(struct tty_struct *tty)
+static unsigned int ttynull_write_room(struct tty_struct *tty)
 {
 	return 65536;
 }
diff --git a/drivers/tty/vcc.c b/drivers/tty/vcc.c
index 0a3a71e14df4..d82ce3bb82c3 100644
--- a/drivers/tty/vcc.c
+++ b/drivers/tty/vcc.c
@@ -870,10 +870,10 @@  static int vcc_write(struct tty_struct *tty, const unsigned char *buf,
 	return total_sent ? total_sent : rv;
 }
 
-static int vcc_write_room(struct tty_struct *tty)
+static unsigned int vcc_write_room(struct tty_struct *tty)
 {
 	struct vcc_port *port;
-	u64 num;
+	unsigned int num;
 
 	port = vcc_get_ne(tty->index);
 	if (unlikely(!port)) {
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 706f066eb711..96c130714930 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -3263,7 +3263,7 @@  static int con_put_char(struct tty_struct *tty, unsigned char ch)
 	return do_con_write(tty, &ch, 1);
 }
 
-static int con_write_room(struct tty_struct *tty)
+static unsigned int con_write_room(struct tty_struct *tty)
 {
 	if (tty->flow.stopped)
 		return 0;
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index ca7a61190dd9..76b7fd234238 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -838,7 +838,7 @@  static int acm_tty_write(struct tty_struct *tty,
 	return count;
 }
 
-static int acm_tty_write_room(struct tty_struct *tty)
+static unsigned int acm_tty_write_room(struct tty_struct *tty)
 {
 	struct acm *acm = tty->driver_data;
 	/*
diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c
index 1e59204ec7aa..676a920d9d6b 100644
--- a/drivers/usb/gadget/function/u_serial.c
+++ b/drivers/usb/gadget/function/u_serial.c
@@ -774,18 +774,18 @@  static void gs_flush_chars(struct tty_struct *tty)
 	spin_unlock_irqrestore(&port->port_lock, flags);
 }
 
-static int gs_write_room(struct tty_struct *tty)
+static unsigned int gs_write_room(struct tty_struct *tty)
 {
 	struct gs_port	*port = tty->driver_data;
 	unsigned long	flags;
-	int		room = 0;
+	unsigned int room = 0;
 
 	spin_lock_irqsave(&port->port_lock, flags);
 	if (port->port_usb)
 		room = kfifo_avail(&port->port_write_buf);
 	spin_unlock_irqrestore(&port->port_lock, flags);
 
-	pr_vdebug("gs_write_room: (%d,%p) room=%d\n",
+	pr_vdebug("gs_write_room: (%d,%p) room=%u\n",
 		port->port_num, tty, room);
 
 	return room;
diff --git a/drivers/usb/host/xhci-dbgtty.c b/drivers/usb/host/xhci-dbgtty.c
index ae4e4ab638b5..cd3ab35dd689 100644
--- a/drivers/usb/host/xhci-dbgtty.c
+++ b/drivers/usb/host/xhci-dbgtty.c
@@ -240,11 +240,11 @@  static void dbc_tty_flush_chars(struct tty_struct *tty)
 	spin_unlock_irqrestore(&port->port_lock, flags);
 }
 
-static int dbc_tty_write_room(struct tty_struct *tty)
+static unsigned int dbc_tty_write_room(struct tty_struct *tty)
 {
 	struct dbc_port		*port = tty->driver_data;
 	unsigned long		flags;
-	int			room = 0;
+	unsigned int		room;
 
 	spin_lock_irqsave(&port->port_lock, flags);
 	room = kfifo_avail(&port->write_fifo);
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
index 98b33b1b5357..055096831daf 100644
--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -376,7 +376,7 @@  static int serial_write(struct tty_struct *tty, const unsigned char *buf,
 	return retval;
 }
 
-static int serial_write_room(struct tty_struct *tty)
+static unsigned int serial_write_room(struct tty_struct *tty)
 {
 	struct usb_serial_port *port = tty->driver_data;
 
diff --git a/include/linux/tty.h b/include/linux/tty.h
index e18a4f1ac39d..d18fc34d3054 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -459,7 +459,7 @@  extern void tty_write_message(struct tty_struct *tty, char *msg);
 extern int tty_send_xchar(struct tty_struct *tty, char ch);
 extern int tty_put_char(struct tty_struct *tty, unsigned char c);
 extern int tty_chars_in_buffer(struct tty_struct *tty);
-extern int tty_write_room(struct tty_struct *tty);
+extern unsigned int tty_write_room(struct tty_struct *tty);
 extern void tty_driver_flush_buffer(struct tty_struct *tty);
 extern void tty_throttle(struct tty_struct *tty);
 extern void tty_unthrottle(struct tty_struct *tty);
diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h
index 653fa5af3a22..ea5b15c72764 100644
--- a/include/linux/tty_driver.h
+++ b/include/linux/tty_driver.h
@@ -89,7 +89,7 @@ 
  *
  *	Note: Do not call this function directly, call tty_driver_flush_chars
  * 
- * int  (*write_room)(struct tty_struct *tty);
+ * unsigned int  (*write_room)(struct tty_struct *tty);
  *
  * 	This routine returns the numbers of characters the tty driver
  * 	will accept for queuing to be written.  This number is subject
@@ -256,7 +256,7 @@  struct tty_operations {
 		      const unsigned char *buf, int count);
 	int  (*put_char)(struct tty_struct *tty, unsigned char ch);
 	void (*flush_chars)(struct tty_struct *tty);
-	int  (*write_room)(struct tty_struct *tty);
+	unsigned int (*write_room)(struct tty_struct *tty);
 	int  (*chars_in_buffer)(struct tty_struct *tty);
 	int  (*ioctl)(struct tty_struct *tty,
 		    unsigned int cmd, unsigned long arg);
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c
index a58584949a95..a5e3d957f20f 100644
--- a/net/bluetooth/rfcomm/tty.c
+++ b/net/bluetooth/rfcomm/tty.c
@@ -807,7 +807,7 @@  static int rfcomm_tty_write(struct tty_struct *tty, const unsigned char *buf, in
 	return sent;
 }
 
-static int rfcomm_tty_write_room(struct tty_struct *tty)
+static unsigned int rfcomm_tty_write_room(struct tty_struct *tty)
 {
 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
 	int room = 0;