Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6732c8bb authored by Jiri Slaby's avatar Jiri Slaby Committed by Greg Kroah-Hartman
Browse files

TTY: switch tty_schedule_flip



Now, we start converting tty buffer functions to actually use
tty_port. This will allow us to get rid of the need of tty in many
call sites. Only tty_port will needed and hence no more
tty_port_tty_get in those paths.

This is the last one: tty_schedule_flip

Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2e124b4a
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -44,9 +44,8 @@ typedef union _srmcons_result {

/* called with callback_lock held */
static int
srmcons_do_receive_chars(struct tty_struct *tty)
srmcons_do_receive_chars(struct tty_port *port)
{
	struct tty_port *port = tty->port;
	srmcons_result result;
	int count = 0, loops = 0;

@@ -59,7 +58,7 @@ srmcons_do_receive_chars(struct tty_struct *tty)
	} while((result.bits.status & 1) && (++loops < 10));

	if (count)
		tty_schedule_flip(tty);
		tty_schedule_flip(port);

	return count;
}
@@ -74,7 +73,7 @@ srmcons_receive_chars(unsigned long data)

	local_irq_save(flags);
	if (spin_trylock(&srmcons_callback_lock)) {
		if (!srmcons_do_receive_chars(port->tty))
		if (!srmcons_do_receive_chars(port))
			incr = 100;
		spin_unlock(&srmcons_callback_lock);
	} 
@@ -89,7 +88,7 @@ srmcons_receive_chars(unsigned long data)

/* called with callback_lock held */
static int
srmcons_do_write(struct tty_struct *tty, const char *buf, int count)
srmcons_do_write(struct tty_port *port, const char *buf, int count)
{
	static char str_cr[1] = "\r";
	long c, remaining = count;
@@ -114,10 +113,10 @@ srmcons_do_write(struct tty_struct *tty, const char *buf, int count)
			cur += result.bits.c;

			/*
			 * Check for pending input iff a tty was provided
			 * Check for pending input iff a tty port was provided
			 */
			if (tty)
				srmcons_do_receive_chars(tty);
			if (port)
				srmcons_do_receive_chars(port);
		}

		while (need_cr) {
@@ -136,7 +135,7 @@ srmcons_write(struct tty_struct *tty,
	unsigned long flags;

	spin_lock_irqsave(&srmcons_callback_lock, flags);
	srmcons_do_write(tty, (const char *) buf, count);
	srmcons_do_write(tty->port, (const char *) buf, count);
	spin_unlock_irqrestore(&srmcons_callback_lock, flags);

	return count;
+2 −10
Original line number Diff line number Diff line
@@ -43,22 +43,14 @@ int kbd_ioctl(struct kbd_data *, unsigned int, unsigned long);
static inline void
kbd_put_queue(struct tty_port *port, int ch)
{
	struct tty_struct *tty = tty_port_tty_get(port);
	if (!tty)
		return;
	tty_insert_flip_char(port, ch, 0);
	tty_schedule_flip(tty);
	tty_kref_put(tty);
	tty_schedule_flip(port);
}

static inline void
kbd_puts_queue(struct tty_port *port, char *cp)
{
	struct tty_struct *tty = tty_port_tty_get(port);
	if (!tty)
		return;
	while (*cp)
		tty_insert_flip_char(port, *cp++, 0);
	tty_schedule_flip(tty);
	tty_kref_put(tty);
	tty_schedule_flip(port);
}
+6 −13
Original line number Diff line number Diff line
@@ -356,7 +356,6 @@ static void qt_read_bulk_callback(struct urb *urb)
	struct usb_serial_port *port = urb->context;
	struct usb_serial *serial = get_usb_serial(port, __func__);
	struct quatech_port *qt_port = qt_get_port_private(port);
	struct tty_struct *tty;
	int result;

	if (urb->status) {
@@ -367,27 +366,23 @@ static void qt_read_bulk_callback(struct urb *urb)
		return;
	}

	tty = tty_port_tty_get(&port->port);
	if (!tty)
		return;

	dev_dbg(&port->dev,
		"%s - port->RxHolding = %d\n", __func__, qt_port->RxHolding);

	if (port_paranoia_check(port, __func__) != 0) {
		qt_port->ReadBulkStopped = 1;
		goto exit;
		return;
	}

	if (!serial)
		goto exit;
		return;

	if (qt_port->closePending == 1) {
		/* Were closing , stop reading */
		dev_dbg(&port->dev,
			"%s - (qt_port->closepending == 1\n", __func__);
		qt_port->ReadBulkStopped = 1;
		goto exit;
		return;
	}

	/*
@@ -397,7 +392,7 @@ static void qt_read_bulk_callback(struct urb *urb)
	 */
	if (qt_port->RxHolding == 1) {
		qt_port->ReadBulkStopped = 1;
		goto exit;
		return;
	}

	if (urb->status) {
@@ -406,7 +401,7 @@ static void qt_read_bulk_callback(struct urb *urb)
		dev_dbg(&port->dev,
			"%s - nonzero read bulk status received: %d\n",
			__func__, urb->status);
		goto exit;
		return;
	}

	if (urb->actual_length)
@@ -427,13 +422,11 @@ static void qt_read_bulk_callback(struct urb *urb)
	else {
		if (urb->actual_length) {
			tty_flip_buffer_push(&port->port);
			tty_schedule_flip(tty);
			tty_schedule_flip(&port->port);
		}
	}

	schedule_work(&port->work);
exit:
	tty_kref_put(tty);
}

/*
+12 −21
Original line number Diff line number Diff line
@@ -441,7 +441,6 @@ static void cyy_chip_rx(struct cyclades_card *cinfo, int chip,
		void __iomem *base_addr)
{
	struct cyclades_port *info;
	struct tty_struct *tty;
	struct tty_port *port;
	int len, index = cinfo->bus_index;
	u8 ivr, save_xir, channel, save_car, data, char_count;
@@ -458,18 +457,6 @@ static void cyy_chip_rx(struct cyclades_card *cinfo, int chip,
	cyy_writeb(info, CyCAR, save_xir);
	ivr = cyy_readb(info, CyRIVR) & CyIVRMask;

	tty = tty_port_tty_get(port);
	/* if there is nowhere to put the data, discard it */
	if (tty == NULL) {
		if (ivr == CyIVRRxEx) {	/* exception */
			data = cyy_readb(info, CyRDSR);
		} else {	/* normal character reception */
			char_count = cyy_readb(info, CyRDCR);
			while (char_count--)
				data = cyy_readb(info, CyRDSR);
		}
		goto end;
	}
	/* there is an open port for this data */
	if (ivr == CyIVRRxEx) {	/* exception */
		data = cyy_readb(info, CyRDSR);
@@ -486,7 +473,6 @@ static void cyy_chip_rx(struct cyclades_card *cinfo, int chip,

		if (data & info->ignore_status_mask) {
			info->icount.rx++;
			tty_kref_put(tty);
			return;
		}
		if (tty_buffer_request_room(port, 1)) {
@@ -496,8 +482,14 @@ static void cyy_chip_rx(struct cyclades_card *cinfo, int chip,
						cyy_readb(info, CyRDSR),
						TTY_BREAK);
					info->icount.rx++;
					if (port->flags & ASYNC_SAK)
					if (port->flags & ASYNC_SAK) {
						struct tty_struct *tty =
							tty_port_tty_get(port);
						if (tty) {
							do_SAK(tty);
							tty_kref_put(tty);
						}
					}
				} else if (data & CyFRAME) {
					tty_insert_flip_char(port,
						cyy_readb(info, CyRDSR),
@@ -566,9 +558,8 @@ static void cyy_chip_rx(struct cyclades_card *cinfo, int chip,
		}
		info->idle_stats.recv_idle = jiffies;
	}
	tty_schedule_flip(tty);
	tty_kref_put(tty);
end:
	tty_schedule_flip(port);

	/* end of service */
	cyy_writeb(info, CyRIR, save_xir & 0x3f);
	cyy_writeb(info, CyCAR, save_car);
@@ -1012,7 +1003,7 @@ static void cyz_handle_rx(struct cyclades_port *info, struct tty_struct *tty)
						jiffies + 1);
#endif
			info->idle_stats.recv_idle = jiffies;
			tty_schedule_flip(tty);
			tty_schedule_flip(&info->port);
		}
		/* Update rx_get */
		cy_writel(&buf_ctrl->rx_get, new_rx_get);
@@ -1191,7 +1182,7 @@ static void cyz_handle_cmd(struct cyclades_card *cinfo)
		if (delta_count)
			wake_up_interruptible(&info->port.delta_msr_wait);
		if (special_count)
			tty_schedule_flip(tty);
			tty_schedule_flip(&info->port);
		tty_kref_put(tty);
	}
}
+2 −2
Original line number Diff line number Diff line
@@ -1405,7 +1405,7 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle,
		if (inited && !test_bit(TTY_THROTTLED, &tty->flags) &&
				MoxaPortRxQueue(p) > 0) { /* RX */
			MoxaPortReadData(p);
			tty_schedule_flip(tty);
			tty_schedule_flip(&p->port);
		}
	} else {
		clear_bit(EMPTYWAIT, &p->statusflags);
@@ -1430,7 +1430,7 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle,

	if (tty && (intr & IntrBreak) && !I_IGNBRK(tty)) { /* BREAK */
		tty_insert_flip_char(&p->port, 0, TTY_BREAK);
		tty_schedule_flip(tty);
		tty_schedule_flip(&p->port);
	}

	if (intr & IntrLine)
Loading