linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/19] mxser: another round of cleanups and fixes
@ 2021-11-18  7:31 Jiri Slaby
  2021-11-18  7:31 ` [PATCH 01/19] mxser: remove wait for sent from mxser_close_port Jiri Slaby
                   ` (18 more replies)
  0 siblings, 19 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

The driver needs care. This is another round of tested changes to clean
up the driver.

Jiri Slaby (19):
  mxser: remove wait for sent from mxser_close_port
  mxser: rename mxser_close_port() to mxser_stop_rx()
  mxser: keep only !tty test in ISR
  mxser: move MSR read to mxser_check_modem_status()
  mxser: clean up tx handling in mxser_transmit_chars()
  mxser: remove pointless xmit_buf checks
  mxser: remove tty->driver_data NULL check
  mxser: call stop_rx from mxser_shutdown_port()
  mxser: don't flush buffer from mxser_close() directly
  mxser: use tty_port_close() in mxser_close()
  mxser: extract TX empty check from mxser_wait_until_sent()
  mxser: use msleep_interruptible() in mxser_wait_until_sent()
  mxser: clean up timeout handling in mxser_wait_until_sent()
  mxser: don't throttle manually
  mxser: remove tty parameter from mxser_receive_chars_new()
  mxser: increase buf_overrun if tty_insert_flip_char() fails
  mxser: add MOXA prefix to some PCI device IDs
  mxser: move ids from pci_ids.h here
  mxser: use PCI_DEVICE_DATA

 drivers/tty/mxser.c     | 306 +++++++++++++++++-----------------------
 include/linux/pci_ids.h |  18 ---
 2 files changed, 132 insertions(+), 192 deletions(-)

-- 
2.33.1


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 01/19] mxser: remove wait for sent from mxser_close_port
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 02/19] mxser: rename mxser_close_port() to mxser_stop_rx() Jiri Slaby
                   ` (17 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

mxser_close() behaves like this:
  -> tty_port_close_start()
    -> tty_wait_until_sent()
      -> mxser_wait_until_sent()
  -> mxser_close_port
    -> wait for TEMT

So it is already waited for TEMT through mxser_wait_until_sent() and
there is another round of waiting in mxser_close_port(). The latter one
is superfluous as nothing could be filled into the output FIFO. Remove
the call.

This helps unification among drivers (so that all behave the same) and
future use of tty_port_close().

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 12 ------------
 1 file changed, 12 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 93a95a135a71..f9615245a60a 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -878,7 +878,6 @@ static void mxser_flush_buffer(struct tty_struct *tty)
 static void mxser_close_port(struct tty_port *port)
 {
 	struct mxser_port *info = container_of(port, struct mxser_port, port);
-	unsigned long timeout;
 	/*
 	 * At this point we stop accepting input.  To do this, we
 	 * disable the receive line status interrupts, and tell the
@@ -890,17 +889,6 @@ static void mxser_close_port(struct tty_port *port)
 		info->IER &= ~MOXA_MUST_RECV_ISR;
 
 	outb(info->IER, info->ioaddr + UART_IER);
-	/*
-	 * Before we drop DTR, make sure the UART transmitter
-	 * has completely drained; this is especially
-	 * important if there is a transmit FIFO!
-	 */
-	timeout = jiffies + HZ;
-	while (!(inb(info->ioaddr + UART_LSR) & UART_LSR_TEMT)) {
-		schedule_timeout_interruptible(5);
-		if (time_after(jiffies, timeout))
-			break;
-	}
 }
 
 /*
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 02/19] mxser: rename mxser_close_port() to mxser_stop_rx()
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
  2021-11-18  7:31 ` [PATCH 01/19] mxser: remove wait for sent from mxser_close_port Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 03/19] mxser: keep only !tty test in ISR Jiri Slaby
                   ` (16 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

As it is the only thing it does now. This is one of the future
serial_core hooks.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index f9615245a60a..e9248d39879c 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -874,16 +874,13 @@ static void mxser_flush_buffer(struct tty_struct *tty)
 	tty_wakeup(tty);
 }
 
-
-static void mxser_close_port(struct tty_port *port)
+/*
+ * To stop accepting input, we disable the receive line status interrupts, and
+ * tell the interrupt driver to stop checking the data ready bit in the line
+ * status register.
+ */
+static void mxser_stop_rx(struct mxser_port *info)
 {
-	struct mxser_port *info = container_of(port, struct mxser_port, port);
-	/*
-	 * At this point we stop accepting input.  To do this, we
-	 * disable the receive line status interrupts, and tell the
-	 * interrupt driver to stop checking the data ready bit in the
-	 * line status register.
-	 */
 	info->IER &= ~UART_IER_RLSI;
 	if (info->board->must_hwid)
 		info->IER &= ~MOXA_MUST_RECV_ISR;
@@ -908,7 +905,7 @@ static void mxser_close(struct tty_struct *tty, struct file *filp)
 		return;
 	info->closing = 1;
 	mutex_lock(&port->mutex);
-	mxser_close_port(port);
+	mxser_stop_rx(info);
 	mxser_flush_buffer(tty);
 	if (tty_port_initialized(port) && C_HUPCL(tty))
 		tty_port_lower_dtr_rts(port);
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 03/19] mxser: keep only !tty test in ISR
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
  2021-11-18  7:31 ` [PATCH 01/19] mxser: remove wait for sent from mxser_close_port Jiri Slaby
  2021-11-18  7:31 ` [PATCH 02/19] mxser: rename mxser_close_port() to mxser_stop_rx() Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 04/19] mxser: move MSR read to mxser_check_modem_status() Jiri Slaby
                   ` (15 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

The others are superfluous with tty refcounting in place now. And they
are racy in fact:
* tty_port_initialized() reports false for a small moment after
  interrupts are enabled.
* closing is 1 while the port is still alive.

The queues are flushed later during close anyway. So there is no need
for this special handling. Actually, the ISR should not flush the
queues. It should behave as every other driver, just queue the chars
into tty buffer and go on. But this will be changed later. There is
still a lot code depending on having tty in ISR (and not only tty_port).

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index e9248d39879c..c8a56b0d900d 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -262,7 +262,6 @@ struct mxser_port {
 	unsigned int xmit_head;
 	unsigned int xmit_tail;
 	unsigned int xmit_cnt;
-	int closing;
 
 	spinlock_t slock;
 };
@@ -903,7 +902,6 @@ static void mxser_close(struct tty_struct *tty, struct file *filp)
 		return;
 	if (tty_port_close_start(port, tty, filp) == 0)
 		return;
-	info->closing = 1;
 	mutex_lock(&port->mutex);
 	mxser_stop_rx(info);
 	mxser_flush_buffer(tty);
@@ -912,7 +910,6 @@ static void mxser_close(struct tty_struct *tty, struct file *filp)
 	mxser_shutdown_port(port);
 	tty_port_set_initialized(port, 0);
 	mutex_unlock(&port->mutex);
-	info->closing = 0;
 	/* Right now the tty_port set is done outside of the close_end helper
 	   as we don't yet have everyone using refcounts */	
 	tty_port_close_end(port, tty);
@@ -1668,7 +1665,7 @@ static bool mxser_port_isr(struct mxser_port *port)
 
 	iir &= MOXA_MUST_IIR_MASK;
 	tty = tty_port_tty_get(&port->port);
-	if (!tty || port->closing || !tty_port_initialized(&port->port)) {
+	if (!tty) {
 		status = inb(port->ioaddr + UART_LSR);
 		outb(port->FCR | UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT,
 				port->ioaddr + UART_FCR);
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 04/19] mxser: move MSR read to mxser_check_modem_status()
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (2 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 03/19] mxser: keep only !tty test in ISR Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 05/19] mxser: clean up tx handling in mxser_transmit_chars() Jiri Slaby
                   ` (14 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

The MSR read is currently performed on both places where
mxser_check_modem_status() is called. So move it there to avoid code
duplication.

Rename the variable to msr while we move it, to actually see what
"status" we are testing.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 46 ++++++++++++++++++++++++---------------------
 1 file changed, 25 insertions(+), 21 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index c8a56b0d900d..3d5c20e31836 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -683,27 +683,34 @@ static void mxser_change_speed(struct tty_struct *tty, struct ktermios *old_term
 	outb(cval, info->ioaddr + UART_LCR);
 }
 
-static void mxser_check_modem_status(struct tty_struct *tty,
-				struct mxser_port *port, int status)
+static u8 mxser_check_modem_status(struct tty_struct *tty,
+				struct mxser_port *port)
 {
+	u8 msr = inb(port->ioaddr + UART_MSR);
+
+	if (!(msr & UART_MSR_ANY_DELTA))
+		return msr;
+
 	/* update input line counters */
-	if (status & UART_MSR_TERI)
+	if (msr & UART_MSR_TERI)
 		port->icount.rng++;
-	if (status & UART_MSR_DDSR)
+	if (msr & UART_MSR_DDSR)
 		port->icount.dsr++;
-	if (status & UART_MSR_DDCD)
+	if (msr & UART_MSR_DDCD)
 		port->icount.dcd++;
-	if (status & UART_MSR_DCTS)
+	if (msr & UART_MSR_DCTS)
 		port->icount.cts++;
 	wake_up_interruptible(&port->port.delta_msr_wait);
 
-	if (tty_port_check_carrier(&port->port) && (status & UART_MSR_DDCD)) {
-		if (status & UART_MSR_DCD)
+	if (tty_port_check_carrier(&port->port) && (msr & UART_MSR_DDCD)) {
+		if (msr & UART_MSR_DCD)
 			wake_up_interruptible(&port->port.open_wait);
 	}
 
 	if (tty_port_cts_enabled(&port->port))
-		mxser_handle_cts(tty, port, status);
+		mxser_handle_cts(tty, port, msr);
+
+	return msr;
 }
 
 static void mxser_disable_and_clear_FIFO(struct mxser_port *info)
@@ -1135,25 +1142,24 @@ static int mxser_get_lsr_info(struct mxser_port *info,
 static int mxser_tiocmget(struct tty_struct *tty)
 {
 	struct mxser_port *info = tty->driver_data;
-	unsigned char control, status;
+	unsigned char control;
 	unsigned long flags;
+	u8 msr;
 
 	if (tty_io_error(tty))
 		return -EIO;
 
 	spin_lock_irqsave(&info->slock, flags);
 	control = info->MCR;
-	status = inb(info->ioaddr + UART_MSR);
-	if (status & UART_MSR_ANY_DELTA)
-		mxser_check_modem_status(tty, info, status);
+	msr = mxser_check_modem_status(tty, info);
 	spin_unlock_irqrestore(&info->slock, flags);
 
 	return ((control & UART_MCR_RTS) ? TIOCM_RTS : 0) |
 		    ((control & UART_MCR_DTR) ? TIOCM_DTR : 0) |
-		    ((status & UART_MSR_DCD) ? TIOCM_CAR : 0) |
-		    ((status & UART_MSR_RI) ? TIOCM_RNG : 0) |
-		    ((status & UART_MSR_DSR) ? TIOCM_DSR : 0) |
-		    ((status & UART_MSR_CTS) ? TIOCM_CTS : 0);
+		    ((msr & UART_MSR_DCD) ? TIOCM_CAR : 0) |
+		    ((msr & UART_MSR_RI) ? TIOCM_RNG : 0) |
+		    ((msr & UART_MSR_DSR) ? TIOCM_DSR : 0) |
+		    ((msr & UART_MSR_CTS) ? TIOCM_CTS : 0);
 }
 
 static int mxser_tiocmset(struct tty_struct *tty,
@@ -1656,7 +1662,7 @@ static void mxser_transmit_chars(struct tty_struct *tty, struct mxser_port *port
 static bool mxser_port_isr(struct mxser_port *port)
 {
 	struct tty_struct *tty;
-	u8 iir, msr, status;
+	u8 iir, status;
 	bool error = false;
 
 	iir = inb(port->ioaddr + UART_IIR);
@@ -1689,9 +1695,7 @@ static bool mxser_port_isr(struct mxser_port *port)
 			status = mxser_receive_chars(tty, port, status);
 	}
 
-	msr = inb(port->ioaddr + UART_MSR);
-	if (msr & UART_MSR_ANY_DELTA)
-		mxser_check_modem_status(tty, port, msr);
+	mxser_check_modem_status(tty, port);
 
 	if (port->board->must_hwid) {
 		if (iir == 0x02 && (status & UART_LSR_THRE))
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 05/19] mxser: clean up tx handling in mxser_transmit_chars()
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (3 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 04/19] mxser: move MSR read to mxser_check_modem_status() Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 06/19] mxser: remove pointless xmit_buf checks Jiri Slaby
                   ` (13 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

The port->icount.tx is handled in a too complicated manner. Instead of
remembering the original count and subtracting the new one from it,
simply increase tx for each character in the loop. No need for cnt
variable then.

Change also the "X = X & Y" assignment to simpler "X &= Y".

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 3d5c20e31836..eb5fb4fb2aef 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -1622,7 +1622,7 @@ static u8 mxser_receive_chars(struct tty_struct *tty,
 
 static void mxser_transmit_chars(struct tty_struct *tty, struct mxser_port *port)
 {
-	int count, cnt;
+	int count;
 
 	if (port->x_char) {
 		outb(port->x_char, port->ioaddr + UART_TX);
@@ -1640,18 +1640,16 @@ static void mxser_transmit_chars(struct tty_struct *tty, struct mxser_port *port
 		return;
 	}
 
-	cnt = port->xmit_cnt;
 	count = port->xmit_fifo_size;
 	do {
 		outb(port->port.xmit_buf[port->xmit_tail++],
 			port->ioaddr + UART_TX);
-		port->xmit_tail = port->xmit_tail & (SERIAL_XMIT_SIZE - 1);
+		port->xmit_tail &= SERIAL_XMIT_SIZE - 1;
+		port->icount.tx++;
 		if (!--port->xmit_cnt)
 			break;
 	} while (--count > 0);
 
-	port->icount.tx += (cnt - port->xmit_cnt);
-
 	if (port->xmit_cnt < WAKEUP_CHARS)
 		tty_wakeup(tty);
 
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 06/19] mxser: remove pointless xmit_buf checks
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (4 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 05/19] mxser: clean up tx handling in mxser_transmit_chars() Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 07/19] mxser: remove tty->driver_data NULL check Jiri Slaby
                   ` (12 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

xmit_buf is supposed to exist in all these functions. I.e. from
tty_port_operations::activate() to ::shutdown(). So remove these checks.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index eb5fb4fb2aef..6e5e1c74bf3e 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -929,9 +929,6 @@ static int mxser_write(struct tty_struct *tty, const unsigned char *buf, int cou
 	struct mxser_port *info = tty->driver_data;
 	unsigned long flags;
 
-	if (!info->port.xmit_buf)
-		return 0;
-
 	while (1) {
 		c = min_t(int, count, min(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
 					  SERIAL_XMIT_SIZE - info->xmit_head));
@@ -962,9 +959,6 @@ static int mxser_put_char(struct tty_struct *tty, unsigned char ch)
 	struct mxser_port *info = tty->driver_data;
 	unsigned long flags;
 
-	if (!info->port.xmit_buf)
-		return 0;
-
 	if (info->xmit_cnt >= SERIAL_XMIT_SIZE - 1)
 		return 0;
 
@@ -982,7 +976,7 @@ static void mxser_flush_chars(struct tty_struct *tty)
 {
 	struct mxser_port *info = tty->driver_data;
 
-	if (!info->xmit_cnt || tty->flow.stopped || !info->port.xmit_buf ||
+	if (!info->xmit_cnt || tty->flow.stopped ||
 			(tty->hw_stopped && !mxser_16550A_or_MUST(info)))
 		return;
 
@@ -1397,7 +1391,7 @@ static void mxser_start(struct tty_struct *tty)
 	unsigned long flags;
 
 	spin_lock_irqsave(&info->slock, flags);
-	if (info->xmit_cnt && info->port.xmit_buf)
+	if (info->xmit_cnt)
 		__mxser_start_tx(info);
 	spin_unlock_irqrestore(&info->slock, flags);
 }
@@ -1631,9 +1625,6 @@ static void mxser_transmit_chars(struct tty_struct *tty, struct mxser_port *port
 		return;
 	}
 
-	if (port->port.xmit_buf == NULL)
-		return;
-
 	if (!port->xmit_cnt || tty->flow.stopped ||
 			(tty->hw_stopped && !mxser_16550A_or_MUST(port))) {
 		__mxser_stop_tx(port);
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 07/19] mxser: remove tty->driver_data NULL check
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (5 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 06/19] mxser: remove pointless xmit_buf checks Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 08/19] mxser: call stop_rx from mxser_shutdown_port() Jiri Slaby
                   ` (11 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

Noone sets tty->driver_data to NULL in the driver, so there is no point
to check that in mxser_close(). Remove the check.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 6e5e1c74bf3e..6b47a0607f59 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -905,8 +905,6 @@ static void mxser_close(struct tty_struct *tty, struct file *filp)
 	struct mxser_port *info = tty->driver_data;
 	struct tty_port *port = &info->port;
 
-	if (info == NULL)
-		return;
 	if (tty_port_close_start(port, tty, filp) == 0)
 		return;
 	mutex_lock(&port->mutex);
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 08/19] mxser: call stop_rx from mxser_shutdown_port()
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (6 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 07/19] mxser: remove tty->driver_data NULL check Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 09/19] mxser: don't flush buffer from mxser_close() directly Jiri Slaby
                   ` (10 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

mxser_stop_rx() should be called from mxser_shutdown_port() for several
reasons:
1) info->slock is held while manipulating IER (as on other places),
2) hangup now stops rx too,
3) mxser_close() will use tty_port_close() and there is no place except
   tty_port_operations::shutdown() where this can be done,
4) this is the same sequence as serial_core does. So we can map this
   code 1:1 when switching the driver to it.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 6b47a0607f59..45ee1122a5f7 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -807,6 +807,20 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty)
 	return 0;
 }
 
+/*
+ * To stop accepting input, we disable the receive line status interrupts, and
+ * tell the interrupt driver to stop checking the data ready bit in the line
+ * status register.
+ */
+static void mxser_stop_rx(struct mxser_port *info)
+{
+	info->IER &= ~UART_IER_RLSI;
+	if (info->board->must_hwid)
+		info->IER &= ~MOXA_MUST_RECV_ISR;
+
+	outb(info->IER, info->ioaddr + UART_IER);
+}
+
 /*
  * This routine will shutdown a serial port
  */
@@ -817,6 +831,8 @@ static void mxser_shutdown_port(struct tty_port *port)
 
 	spin_lock_irqsave(&info->slock, flags);
 
+	mxser_stop_rx(info);
+
 	/*
 	 * clear delta_msr_wait queue to avoid mem leaks: we may free the irq
 	 * here so the queue might never be waken up
@@ -880,20 +896,6 @@ static void mxser_flush_buffer(struct tty_struct *tty)
 	tty_wakeup(tty);
 }
 
-/*
- * To stop accepting input, we disable the receive line status interrupts, and
- * tell the interrupt driver to stop checking the data ready bit in the line
- * status register.
- */
-static void mxser_stop_rx(struct mxser_port *info)
-{
-	info->IER &= ~UART_IER_RLSI;
-	if (info->board->must_hwid)
-		info->IER &= ~MOXA_MUST_RECV_ISR;
-
-	outb(info->IER, info->ioaddr + UART_IER);
-}
-
 /*
  * This routine is called when the serial port gets closed.  First, we
  * wait for the last remaining data to be sent.  Then, we unlink its
@@ -908,7 +910,6 @@ static void mxser_close(struct tty_struct *tty, struct file *filp)
 	if (tty_port_close_start(port, tty, filp) == 0)
 		return;
 	mutex_lock(&port->mutex);
-	mxser_stop_rx(info);
 	mxser_flush_buffer(tty);
 	if (tty_port_initialized(port) && C_HUPCL(tty))
 		tty_port_lower_dtr_rts(port);
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 09/19] mxser: don't flush buffer from mxser_close() directly
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (7 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 08/19] mxser: call stop_rx from mxser_shutdown_port() Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 10/19] mxser: use tty_port_close() in mxser_close() Jiri Slaby
                   ` (9 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

I fail to see the point of calling mxser_flush_buffer() from
mxser_close():
1) The SW xmit buffer is freed in mxser_shutdown_port() right after the
   call to mxser_flush_buffer().  And all 'cnt', 'head', and 'tail' are
   properly initialized to 0 in mxser_activate().
2) The HW buffer is flushed in mxser_shutdown_port() via
   mxser_disable_and_clear_FIFO() too.

So the effect of doing it by mxser_flush_buffer() in mxser_close() is
none. Hence remove it, so that when we use tty_port_close() later, the
code is 1:1 identical.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 45ee1122a5f7..4dafa16aa29c 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -910,7 +910,6 @@ static void mxser_close(struct tty_struct *tty, struct file *filp)
 	if (tty_port_close_start(port, tty, filp) == 0)
 		return;
 	mutex_lock(&port->mutex);
-	mxser_flush_buffer(tty);
 	if (tty_port_initialized(port) && C_HUPCL(tty))
 		tty_port_lower_dtr_rts(port);
 	mxser_shutdown_port(port);
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 10/19] mxser: use tty_port_close() in mxser_close()
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (8 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 09/19] mxser: don't flush buffer from mxser_close() directly Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 11/19] mxser: extract TX empty check from mxser_wait_until_sent() Jiri Slaby
                   ` (8 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

Finally, the mxser_close() code in is mostly identical to
tty_port_close(), so replace the code by a single call to the function.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 22 +---------------------
 1 file changed, 1 insertion(+), 21 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 4dafa16aa29c..6ab8899ada9c 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -896,29 +896,9 @@ static void mxser_flush_buffer(struct tty_struct *tty)
 	tty_wakeup(tty);
 }
 
-/*
- * This routine is called when the serial port gets closed.  First, we
- * wait for the last remaining data to be sent.  Then, we unlink its
- * async structure from the interrupt chain if necessary, and we free
- * that IRQ if nothing is left in the chain.
- */
 static void mxser_close(struct tty_struct *tty, struct file *filp)
 {
-	struct mxser_port *info = tty->driver_data;
-	struct tty_port *port = &info->port;
-
-	if (tty_port_close_start(port, tty, filp) == 0)
-		return;
-	mutex_lock(&port->mutex);
-	if (tty_port_initialized(port) && C_HUPCL(tty))
-		tty_port_lower_dtr_rts(port);
-	mxser_shutdown_port(port);
-	tty_port_set_initialized(port, 0);
-	mutex_unlock(&port->mutex);
-	/* Right now the tty_port set is done outside of the close_end helper
-	   as we don't yet have everyone using refcounts */	
-	tty_port_close_end(port, tty);
-	tty_port_tty_set(port, NULL);
+	tty_port_close(tty->port, tty, filp);
 }
 
 static int mxser_write(struct tty_struct *tty, const unsigned char *buf, int count)
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 11/19] mxser: extract TX empty check from mxser_wait_until_sent()
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (9 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 10/19] mxser: use tty_port_close() in mxser_close() Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 12/19] mxser: use msleep_interruptible() in mxser_wait_until_sent() Jiri Slaby
                   ` (7 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

And move it to new mxser_tx_empty(), because:
1) it simplifies the code (esp. the locking), and
2) serial_core needs such a hook anyway, so have it ready.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 6ab8899ada9c..fb26670b5a0b 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -1402,6 +1402,18 @@ static void mxser_set_termios(struct tty_struct *tty, struct ktermios *old_termi
 	}
 }
 
+static bool mxser_tx_empty(struct mxser_port *info)
+{
+	unsigned long flags;
+	u8 lsr;
+
+	spin_lock_irqsave(&info->slock, flags);
+	lsr = inb(info->ioaddr + UART_LSR);
+	spin_unlock_irqrestore(&info->slock, flags);
+
+	return !(lsr & UART_LSR_TEMT);
+}
+
 /*
  * mxser_wait_until_sent() --- wait until the transmitter is empty
  */
@@ -1409,8 +1421,6 @@ static void mxser_wait_until_sent(struct tty_struct *tty, int timeout)
 {
 	struct mxser_port *info = tty->driver_data;
 	unsigned long orig_jiffies, char_time;
-	unsigned long flags;
-	int lsr;
 
 	if (info->type == PORT_UNKNOWN)
 		return;
@@ -1445,17 +1455,13 @@ static void mxser_wait_until_sent(struct tty_struct *tty, int timeout)
 	if (!timeout || timeout > 2 * info->timeout)
 		timeout = 2 * info->timeout;
 
-	spin_lock_irqsave(&info->slock, flags);
-	while (!((lsr = inb(info->ioaddr + UART_LSR)) & UART_LSR_TEMT)) {
-		spin_unlock_irqrestore(&info->slock, flags);
+	while (mxser_tx_empty(info)) {
 		schedule_timeout_interruptible(char_time);
-		spin_lock_irqsave(&info->slock, flags);
 		if (signal_pending(current))
 			break;
 		if (timeout && time_after(jiffies, orig_jiffies + timeout))
 			break;
 	}
-	spin_unlock_irqrestore(&info->slock, flags);
 	set_current_state(TASK_RUNNING);
 }
 
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 12/19] mxser: use msleep_interruptible() in mxser_wait_until_sent()
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (10 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 11/19] mxser: extract TX empty check from mxser_wait_until_sent() Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 13/19] mxser: clean up timeout handling " Jiri Slaby
                   ` (6 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

Instead of schedule_timeout_interruptible(), because:
1) we don't have to bother with the task state, and
2) msleep* guarantees to sleep that time (if not interrupted).

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index fb26670b5a0b..b3ae3b105af0 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -1443,6 +1443,9 @@ static void mxser_wait_until_sent(struct tty_struct *tty, int timeout)
 		char_time = 1;
 	if (timeout && timeout < char_time)
 		char_time = timeout;
+
+	char_time = jiffies_to_msecs(char_time);
+
 	/*
 	 * If the transmitter hasn't cleared in twice the approximate
 	 * amount of time to send the entire FIFO, it probably won't
@@ -1456,13 +1459,12 @@ static void mxser_wait_until_sent(struct tty_struct *tty, int timeout)
 		timeout = 2 * info->timeout;
 
 	while (mxser_tx_empty(info)) {
-		schedule_timeout_interruptible(char_time);
+		msleep_interruptible(char_time);
 		if (signal_pending(current))
 			break;
 		if (timeout && time_after(jiffies, orig_jiffies + timeout))
 			break;
 	}
-	set_current_state(TASK_RUNNING);
 }
 
 /*
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 13/19] mxser: clean up timeout handling in mxser_wait_until_sent()
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (11 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 12/19] mxser: use msleep_interruptible() in mxser_wait_until_sent() Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 14/19] mxser: don't throttle manually Jiri Slaby
                   ` (5 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

timeout cannot be zero at the point of use. So no need to check for
zero. Also precompute the expiration time (into expire) and use it. This
makes the code more clear.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index b3ae3b105af0..c3f262dc936d 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -1420,7 +1420,7 @@ static bool mxser_tx_empty(struct mxser_port *info)
 static void mxser_wait_until_sent(struct tty_struct *tty, int timeout)
 {
 	struct mxser_port *info = tty->driver_data;
-	unsigned long orig_jiffies, char_time;
+	unsigned long expire, char_time;
 
 	if (info->type == PORT_UNKNOWN)
 		return;
@@ -1428,7 +1428,6 @@ static void mxser_wait_until_sent(struct tty_struct *tty, int timeout)
 	if (info->xmit_fifo_size == 0)
 		return;		/* Just in case.... */
 
-	orig_jiffies = jiffies;
 	/*
 	 * Set the check interval to be 1/5 of the estimated time to
 	 * send a single character, and make it at least 1.  The check
@@ -1458,11 +1457,13 @@ static void mxser_wait_until_sent(struct tty_struct *tty, int timeout)
 	if (!timeout || timeout > 2 * info->timeout)
 		timeout = 2 * info->timeout;
 
+	expire = jiffies + timeout;
+
 	while (mxser_tx_empty(info)) {
 		msleep_interruptible(char_time);
 		if (signal_pending(current))
 			break;
-		if (timeout && time_after(jiffies, orig_jiffies + timeout))
+		if (time_after(jiffies, expire))
 			break;
 	}
 }
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 14/19] mxser: don't throttle manually
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (12 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 13/19] mxser: clean up timeout handling " Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 15/19] mxser: remove tty parameter from mxser_receive_chars_new() Jiri Slaby
                   ` (4 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

First, checking tty->receive_room to signalize whether there is enough space
in the tty buffers does not make much sense. Provided the tty buffers
are in tty_port and those are not checked at all.

Second, if the rx path is throttled, with CRTSCTS, RTS is deasserted,
but is never asserted again. This leads to port "lockup", not accepting
any more input.

So:
1) stty -F /dev/ttyMI0 crtscts # the mxser port
2) stty -F /dev/ttyS6 crtscts # the connected port
3) cat /dev/ttyMI0
4) "write in a loop" to /dev/ttyS6
5) cat from 3) produces the bytes from 4)
6) killall -STOP cat (the 3)'s one)
7) wait for RTS to drop on /dev/ttyMI0
8) killall -CONT cat (again the 3)'s one)

cat erroneously produces no more output now (i.e. no data sent from
ttyS6 to ttyMI can be seen).

Note that the step 7) is performed twice: once from n_tty by
tty_throttle_safe(), once by mxser_stoprx() from the receive path. Then
after step 7), n_tty correctly unthrottles the input, but mxser calls
mxser_stoprx() again as there is still only a little space in n_tty
buffers (tty->receive_room mentioned at the beginning), but the device's
FIFO is/can be already filled.

After this patch, the output is correctly resumed, i.e. n_tty both
throttles and unthrottles without interfering with mxser's attempts.

This allows us to get rid of the non-standard ldisc_stop_rx flag from
struct mxser_port.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 36 ++++++------------------------------
 1 file changed, 6 insertions(+), 30 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index c3f262dc936d..2359b4aa68af 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -251,8 +251,6 @@ struct mxser_port {
 	u8 MCR;			/* Modem control register */
 	u8 FCR;			/* FIFO control register */
 
-	bool ldisc_stop_rx;
-
 	struct async_icount icount; /* kernel counters for 4 input interrupts */
 	unsigned int timeout;
 
@@ -1286,11 +1284,14 @@ static int mxser_get_icount(struct tty_struct *tty,
 	return 0;
 }
 
-static void mxser_stoprx(struct tty_struct *tty)
+/*
+ * This routine is called by the upper-layer tty layer to signal that
+ * incoming characters should be throttled.
+ */
+static void mxser_throttle(struct tty_struct *tty)
 {
 	struct mxser_port *info = tty->driver_data;
 
-	info->ldisc_stop_rx = true;
 	if (I_IXOFF(tty)) {
 		if (info->board->must_hwid) {
 			info->IER &= ~MOXA_MUST_RECV_ISR;
@@ -1309,21 +1310,11 @@ static void mxser_stoprx(struct tty_struct *tty)
 	}
 }
 
-/*
- * This routine is called by the upper-layer tty layer to signal that
- * incoming characters should be throttled.
- */
-static void mxser_throttle(struct tty_struct *tty)
-{
-	mxser_stoprx(tty);
-}
-
 static void mxser_unthrottle(struct tty_struct *tty)
 {
 	struct mxser_port *info = tty->driver_data;
 
 	/* startrx */
-	info->ldisc_stop_rx = false;
 	if (I_IXOFF(tty)) {
 		if (info->x_char)
 			info->x_char = 0;
@@ -1515,9 +1506,6 @@ static bool mxser_receive_chars_new(struct tty_struct *tty,
 	if (hwid == MOXA_MUST_MU150_HWID)
 		gdl &= MOXA_MUST_GDL_MASK;
 
-	if (gdl >= tty->receive_room && !port->ldisc_stop_rx)
-		mxser_stoprx(tty);
-
 	while (gdl--) {
 		u8 ch = inb(port->ioaddr + UART_RX);
 		tty_insert_flip_char(&port->port, ch, 0);
@@ -1530,10 +1518,8 @@ static u8 mxser_receive_chars_old(struct tty_struct *tty,
 		                struct mxser_port *port, u8 status)
 {
 	enum mxser_must_hwid hwid = port->board->must_hwid;
-	int recv_room = tty->receive_room;
 	int ignored = 0;
 	int max = 256;
-	int cnt = 0;
 	u8 ch;
 
 	do {
@@ -1568,14 +1554,8 @@ static u8 mxser_receive_chars_old(struct tty_struct *tty,
 					port->icount.overrun++;
 				}
 			}
-			tty_insert_flip_char(&port->port, ch, flag);
-			cnt++;
-			if (cnt >= recv_room) {
-				if (!port->ldisc_stop_rx)
-					mxser_stoprx(tty);
+			if (!tty_insert_flip_char(&port->port, ch, flag))
 				break;
-			}
-
 		}
 
 		if (hwid)
@@ -1590,9 +1570,6 @@ static u8 mxser_receive_chars_old(struct tty_struct *tty,
 static u8 mxser_receive_chars(struct tty_struct *tty,
 		struct mxser_port *port, u8 status)
 {
-	if (tty->receive_room == 0 && !port->ldisc_stop_rx)
-		mxser_stoprx(tty);
-
 	if (!mxser_receive_chars_new(tty, port, status))
 		status = mxser_receive_chars_old(tty, port, status);
 
@@ -1798,7 +1775,6 @@ static void mxser_initbrd(struct mxser_board *brd, bool high_baud)
 		tty_port_init(&info->port);
 		info->port.ops = &mxser_port_ops;
 		info->board = brd;
-		info->ldisc_stop_rx = false;
 
 		/* Enhance mode enabled here */
 		if (brd->must_hwid != MOXA_OTHER_UART)
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 15/19] mxser: remove tty parameter from mxser_receive_chars_new()
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (13 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 14/19] mxser: don't throttle manually Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 16/19] mxser: increase buf_overrun if tty_insert_flip_char() fails Jiri Slaby
                   ` (3 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

After the previous change (no plays with of tty->receive_room), the tty
parameter is unused.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 2359b4aa68af..10862d4bb885 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -1491,8 +1491,7 @@ static int mxser_rs_break(struct tty_struct *tty, int break_state)
 	return 0;
 }
 
-static bool mxser_receive_chars_new(struct tty_struct *tty,
-		struct mxser_port *port, u8 status)
+static bool mxser_receive_chars_new(struct mxser_port *port, u8 status)
 {
 	enum mxser_must_hwid hwid = port->board->must_hwid;
 	u8 gdl;
@@ -1570,7 +1569,7 @@ static u8 mxser_receive_chars_old(struct tty_struct *tty,
 static u8 mxser_receive_chars(struct tty_struct *tty,
 		struct mxser_port *port, u8 status)
 {
-	if (!mxser_receive_chars_new(tty, port, status))
+	if (!mxser_receive_chars_new(port, status))
 		status = mxser_receive_chars_old(tty, port, status);
 
 	tty_flip_buffer_push(&port->port);
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 16/19] mxser: increase buf_overrun if tty_insert_flip_char() fails
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (14 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 15/19] mxser: remove tty parameter from mxser_receive_chars_new() Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 17/19] mxser: add MOXA prefix to some PCI device IDs Jiri Slaby
                   ` (2 subsequent siblings)
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

mxser doesn't increase port->icount.buf_overrun at all. Do so if overrun
happens, so that it can be read from the stats.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 10862d4bb885..65ea4baee5eb 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -1507,7 +1507,8 @@ static bool mxser_receive_chars_new(struct mxser_port *port, u8 status)
 
 	while (gdl--) {
 		u8 ch = inb(port->ioaddr + UART_RX);
-		tty_insert_flip_char(&port->port, ch, 0);
+		if (!tty_insert_flip_char(&port->port, ch, 0))
+			port->icount.buf_overrun++;
 	}
 
 	return true;
@@ -1553,8 +1554,10 @@ static u8 mxser_receive_chars_old(struct tty_struct *tty,
 					port->icount.overrun++;
 				}
 			}
-			if (!tty_insert_flip_char(&port->port, ch, flag))
+			if (!tty_insert_flip_char(&port->port, ch, flag)) {
+				port->icount.buf_overrun++;
 				break;
+			}
 		}
 
 		if (hwid)
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 17/19] mxser: add MOXA prefix to some PCI device IDs
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (15 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 16/19] mxser: increase buf_overrun if tty_insert_flip_char() fails Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18  7:31 ` [PATCH 18/19] mxser: move ids from pci_ids.h here Jiri Slaby
  2021-11-18  7:31 ` [PATCH 19/19] mxser: use PCI_DEVICE_DATA Jiri Slaby
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

Some of the MOXA PCI device IDs contain _MOXA_, some don't. Add it to
the latter, so that they are all unified.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 65ea4baee5eb..f6842089459a 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -159,14 +159,14 @@
 #define MXSER_BAUD_BASE		921600
 #define MXSER_CUSTOM_DIVISOR	(MXSER_BAUD_BASE * 16)
 
-#define PCI_DEVICE_ID_POS104UL	0x1044
-#define PCI_DEVICE_ID_CB108	0x1080
-#define PCI_DEVICE_ID_CP102UF	0x1023
-#define PCI_DEVICE_ID_CP112UL	0x1120
-#define PCI_DEVICE_ID_CB114	0x1142
-#define PCI_DEVICE_ID_CP114UL	0x1143
-#define PCI_DEVICE_ID_CB134I	0x1341
-#define PCI_DEVICE_ID_CP138U	0x1380
+#define PCI_DEVICE_ID_MOXA_POS104UL	0x1044
+#define PCI_DEVICE_ID_MOXA_CB108	0x1080
+#define PCI_DEVICE_ID_MOXA_CP102UF	0x1023
+#define PCI_DEVICE_ID_MOXA_CP112UL	0x1120
+#define PCI_DEVICE_ID_MOXA_CB114	0x1142
+#define PCI_DEVICE_ID_MOXA_CP114UL	0x1143
+#define PCI_DEVICE_ID_MOXA_CB134I	0x1341
+#define PCI_DEVICE_ID_MOXA_CP138U	0x1380
 
 #define MXSER_NPORTS(ddata)		((ddata) & 0xffU)
 #define MXSER_HIGHBAUD			0x0100
@@ -212,14 +212,14 @@ static const struct pci_device_id mxser_pcibrds[] = {
 	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118EL),.driver_data = 8 },
 	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP168EL),.driver_data = 8 },
 	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104EL),.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CB108),	.driver_data = 8 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CB114),	.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CB134I),	.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CP138U),	.driver_data = 8 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_POS104UL),	.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CP114UL),	.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CP102UF),	.driver_data = 2 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_CP112UL),	.driver_data = 2 },
+	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CB108),	.driver_data = 8 },
+	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CB114),	.driver_data = 4 },
+	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CB134I),	.driver_data = 4 },
+	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP138U),	.driver_data = 8 },
+	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_POS104UL),.driver_data = 4 },
+	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114UL),.driver_data = 4 },
+	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102UF),.driver_data = 2 },
+	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP112UL),.driver_data = 2 },
 	{ }
 };
 MODULE_DEVICE_TABLE(pci, mxser_pcibrds);
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 18/19] mxser: move ids from pci_ids.h here
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (16 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 17/19] mxser: add MOXA prefix to some PCI device IDs Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  2021-11-18 20:58   ` Bjorn Helgaas
  2021-11-18  7:31 ` [PATCH 19/19] mxser: use PCI_DEVICE_DATA Jiri Slaby
  18 siblings, 1 reply; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby, Bjorn Helgaas, linux-pci

There is no point having MOXA PCI device IDs in include/linux/pci_ids.h.
Move them to the driver and sort them all by the ID.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: linux-pci@vger.kernel.org
---
 drivers/tty/mxser.c     | 20 +++++++++++++++++++-
 include/linux/pci_ids.h | 18 ------------------
 2 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index f6842089459a..ba96ffed193a 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -159,14 +159,32 @@
 #define MXSER_BAUD_BASE		921600
 #define MXSER_CUSTOM_DIVISOR	(MXSER_BAUD_BASE * 16)
 
+#define PCI_DEVICE_ID_MOXA_RC7000	0x0001
+#define PCI_DEVICE_ID_MOXA_CP102	0x1020
+#define PCI_DEVICE_ID_MOXA_CP102UL	0x1021
+#define PCI_DEVICE_ID_MOXA_CP102U	0x1022
+#define PCI_DEVICE_ID_MOXA_CP102UF	0x1023
+#define PCI_DEVICE_ID_MOXA_C104		0x1040
+#define PCI_DEVICE_ID_MOXA_CP104U	0x1041
+#define PCI_DEVICE_ID_MOXA_CP104JU	0x1042
+#define PCI_DEVICE_ID_MOXA_CP104EL	0x1043
 #define PCI_DEVICE_ID_MOXA_POS104UL	0x1044
 #define PCI_DEVICE_ID_MOXA_CB108	0x1080
-#define PCI_DEVICE_ID_MOXA_CP102UF	0x1023
 #define PCI_DEVICE_ID_MOXA_CP112UL	0x1120
+#define PCI_DEVICE_ID_MOXA_CT114	0x1140
+#define PCI_DEVICE_ID_MOXA_CP114	0x1141
 #define PCI_DEVICE_ID_MOXA_CB114	0x1142
 #define PCI_DEVICE_ID_MOXA_CP114UL	0x1143
+#define PCI_DEVICE_ID_MOXA_CP118U	0x1180
+#define PCI_DEVICE_ID_MOXA_CP118EL	0x1181
+#define PCI_DEVICE_ID_MOXA_CP132	0x1320
+#define PCI_DEVICE_ID_MOXA_CP132U	0x1321
+#define PCI_DEVICE_ID_MOXA_CP134U	0x1340
 #define PCI_DEVICE_ID_MOXA_CB134I	0x1341
 #define PCI_DEVICE_ID_MOXA_CP138U	0x1380
+#define PCI_DEVICE_ID_MOXA_C168		0x1680
+#define PCI_DEVICE_ID_MOXA_CP168U	0x1681
+#define PCI_DEVICE_ID_MOXA_CP168EL	0x1682
 
 #define MXSER_NPORTS(ddata)		((ddata) & 0xffU)
 #define MXSER_HIGHBAUD			0x0100
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index b5248f27910e..86678588d191 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -1965,24 +1965,6 @@
 #define PCI_DEVICE_ID_APPLICOM_PCI2000PFB 0x0003
 
 #define PCI_VENDOR_ID_MOXA		0x1393
-#define PCI_DEVICE_ID_MOXA_RC7000	0x0001
-#define PCI_DEVICE_ID_MOXA_CP102	0x1020
-#define PCI_DEVICE_ID_MOXA_CP102UL	0x1021
-#define PCI_DEVICE_ID_MOXA_CP102U	0x1022
-#define PCI_DEVICE_ID_MOXA_C104		0x1040
-#define PCI_DEVICE_ID_MOXA_CP104U	0x1041
-#define PCI_DEVICE_ID_MOXA_CP104JU	0x1042
-#define PCI_DEVICE_ID_MOXA_CP104EL	0x1043
-#define PCI_DEVICE_ID_MOXA_CT114	0x1140
-#define PCI_DEVICE_ID_MOXA_CP114	0x1141
-#define PCI_DEVICE_ID_MOXA_CP118U	0x1180
-#define PCI_DEVICE_ID_MOXA_CP118EL	0x1181
-#define PCI_DEVICE_ID_MOXA_CP132	0x1320
-#define PCI_DEVICE_ID_MOXA_CP132U	0x1321
-#define PCI_DEVICE_ID_MOXA_CP134U	0x1340
-#define PCI_DEVICE_ID_MOXA_C168		0x1680
-#define PCI_DEVICE_ID_MOXA_CP168U	0x1681
-#define PCI_DEVICE_ID_MOXA_CP168EL	0x1682
 #define PCI_DEVICE_ID_MOXA_CP204J	0x2040
 #define PCI_DEVICE_ID_MOXA_C218		0x2180
 #define PCI_DEVICE_ID_MOXA_C320		0x3200
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 19/19] mxser: use PCI_DEVICE_DATA
  2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
                   ` (17 preceding siblings ...)
  2021-11-18  7:31 ` [PATCH 18/19] mxser: move ids from pci_ids.h here Jiri Slaby
@ 2021-11-18  7:31 ` Jiri Slaby
  18 siblings, 0 replies; 21+ messages in thread
From: Jiri Slaby @ 2021-11-18  7:31 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

Now that we have all the PCI device IDs unified, we can use
PCI_DEVICE_DATA() macro to simplify mxser's pci_device_id list, i.e.
mxser_pcibrds.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/mxser.c | 52 ++++++++++++++++++++++-----------------------
 1 file changed, 26 insertions(+), 26 deletions(-)

diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index ba96ffed193a..c858aff721c4 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -212,32 +212,32 @@ static const struct {
 /* driver_data correspond to the lines in the structure above
    see also ISA probe function before you change something */
 static const struct pci_device_id mxser_pcibrds[] = {
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_C168),	.driver_data = 8 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_C104),	.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132),	.driver_data = 2 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114),	.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CT114),	.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102),	.driver_data = 2 | MXSER_HIGHBAUD },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104U),	.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP168U),	.driver_data = 8 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP132U),	.driver_data = 2 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP134U),	.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104JU),.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_RC7000),	.driver_data = 8 }, /* RC7000 */
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118U),	.driver_data = 8 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102UL),.driver_data = 2 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102U),	.driver_data = 2 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP118EL),.driver_data = 8 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP168EL),.driver_data = 8 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP104EL),.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CB108),	.driver_data = 8 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CB114),	.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CB134I),	.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP138U),	.driver_data = 8 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_POS104UL),.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP114UL),.driver_data = 4 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP102UF),.driver_data = 2 },
-	{ PCI_VDEVICE(MOXA, PCI_DEVICE_ID_MOXA_CP112UL),.driver_data = 2 },
+	{ PCI_DEVICE_DATA(MOXA, C168,		8) },
+	{ PCI_DEVICE_DATA(MOXA, C104,		4) },
+	{ PCI_DEVICE_DATA(MOXA, CP132,		2) },
+	{ PCI_DEVICE_DATA(MOXA, CP114,		4) },
+	{ PCI_DEVICE_DATA(MOXA, CT114,		4) },
+	{ PCI_DEVICE_DATA(MOXA, CP102,		2 | MXSER_HIGHBAUD) },
+	{ PCI_DEVICE_DATA(MOXA, CP104U,		4) },
+	{ PCI_DEVICE_DATA(MOXA, CP168U,		8) },
+	{ PCI_DEVICE_DATA(MOXA, CP132U,		2) },
+	{ PCI_DEVICE_DATA(MOXA, CP134U,		4) },
+	{ PCI_DEVICE_DATA(MOXA, CP104JU,	4) },
+	{ PCI_DEVICE_DATA(MOXA, RC7000,		8) }, /* RC7000 */
+	{ PCI_DEVICE_DATA(MOXA, CP118U,		8) },
+	{ PCI_DEVICE_DATA(MOXA, CP102UL,	2) },
+	{ PCI_DEVICE_DATA(MOXA, CP102U,		2) },
+	{ PCI_DEVICE_DATA(MOXA, CP118EL,	8) },
+	{ PCI_DEVICE_DATA(MOXA, CP168EL,	8) },
+	{ PCI_DEVICE_DATA(MOXA, CP104EL,	4) },
+	{ PCI_DEVICE_DATA(MOXA, CB108,		8) },
+	{ PCI_DEVICE_DATA(MOXA, CB114,		4) },
+	{ PCI_DEVICE_DATA(MOXA, CB134I,		4) },
+	{ PCI_DEVICE_DATA(MOXA, CP138U,		8) },
+	{ PCI_DEVICE_DATA(MOXA, POS104UL,	4) },
+	{ PCI_DEVICE_DATA(MOXA, CP114UL,	4) },
+	{ PCI_DEVICE_DATA(MOXA, CP102UF,	2) },
+	{ PCI_DEVICE_DATA(MOXA, CP112UL,	2) },
 	{ }
 };
 MODULE_DEVICE_TABLE(pci, mxser_pcibrds);
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH 18/19] mxser: move ids from pci_ids.h here
  2021-11-18  7:31 ` [PATCH 18/19] mxser: move ids from pci_ids.h here Jiri Slaby
@ 2021-11-18 20:58   ` Bjorn Helgaas
  0 siblings, 0 replies; 21+ messages in thread
From: Bjorn Helgaas @ 2021-11-18 20:58 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: gregkh, linux-serial, linux-kernel, Bjorn Helgaas, linux-pci

On Thu, Nov 18, 2021 at 08:31:24AM +0100, Jiri Slaby wrote:
> There is no point having MOXA PCI device IDs in include/linux/pci_ids.h.
> Move them to the driver and sort them all by the ID.
> 
> Signed-off-by: Jiri Slaby <jslaby@suse.cz>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: linux-pci@vger.kernel.org

Acked-by: Bjorn Helgaas <bhelgaas@google.com>

I would capitalize "IDs" in the subject as you did in the commit log.

> ---
>  drivers/tty/mxser.c     | 20 +++++++++++++++++++-
>  include/linux/pci_ids.h | 18 ------------------
>  2 files changed, 19 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
> index f6842089459a..ba96ffed193a 100644
> --- a/drivers/tty/mxser.c
> +++ b/drivers/tty/mxser.c
> @@ -159,14 +159,32 @@
>  #define MXSER_BAUD_BASE		921600
>  #define MXSER_CUSTOM_DIVISOR	(MXSER_BAUD_BASE * 16)
>  
> +#define PCI_DEVICE_ID_MOXA_RC7000	0x0001
> +#define PCI_DEVICE_ID_MOXA_CP102	0x1020
> +#define PCI_DEVICE_ID_MOXA_CP102UL	0x1021
> +#define PCI_DEVICE_ID_MOXA_CP102U	0x1022
> +#define PCI_DEVICE_ID_MOXA_CP102UF	0x1023
> +#define PCI_DEVICE_ID_MOXA_C104		0x1040
> +#define PCI_DEVICE_ID_MOXA_CP104U	0x1041
> +#define PCI_DEVICE_ID_MOXA_CP104JU	0x1042
> +#define PCI_DEVICE_ID_MOXA_CP104EL	0x1043
>  #define PCI_DEVICE_ID_MOXA_POS104UL	0x1044
>  #define PCI_DEVICE_ID_MOXA_CB108	0x1080
> -#define PCI_DEVICE_ID_MOXA_CP102UF	0x1023
>  #define PCI_DEVICE_ID_MOXA_CP112UL	0x1120
> +#define PCI_DEVICE_ID_MOXA_CT114	0x1140
> +#define PCI_DEVICE_ID_MOXA_CP114	0x1141
>  #define PCI_DEVICE_ID_MOXA_CB114	0x1142
>  #define PCI_DEVICE_ID_MOXA_CP114UL	0x1143
> +#define PCI_DEVICE_ID_MOXA_CP118U	0x1180
> +#define PCI_DEVICE_ID_MOXA_CP118EL	0x1181
> +#define PCI_DEVICE_ID_MOXA_CP132	0x1320
> +#define PCI_DEVICE_ID_MOXA_CP132U	0x1321
> +#define PCI_DEVICE_ID_MOXA_CP134U	0x1340
>  #define PCI_DEVICE_ID_MOXA_CB134I	0x1341
>  #define PCI_DEVICE_ID_MOXA_CP138U	0x1380
> +#define PCI_DEVICE_ID_MOXA_C168		0x1680
> +#define PCI_DEVICE_ID_MOXA_CP168U	0x1681
> +#define PCI_DEVICE_ID_MOXA_CP168EL	0x1682
>  
>  #define MXSER_NPORTS(ddata)		((ddata) & 0xffU)
>  #define MXSER_HIGHBAUD			0x0100
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index b5248f27910e..86678588d191 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -1965,24 +1965,6 @@
>  #define PCI_DEVICE_ID_APPLICOM_PCI2000PFB 0x0003
>  
>  #define PCI_VENDOR_ID_MOXA		0x1393
> -#define PCI_DEVICE_ID_MOXA_RC7000	0x0001
> -#define PCI_DEVICE_ID_MOXA_CP102	0x1020
> -#define PCI_DEVICE_ID_MOXA_CP102UL	0x1021
> -#define PCI_DEVICE_ID_MOXA_CP102U	0x1022
> -#define PCI_DEVICE_ID_MOXA_C104		0x1040
> -#define PCI_DEVICE_ID_MOXA_CP104U	0x1041
> -#define PCI_DEVICE_ID_MOXA_CP104JU	0x1042
> -#define PCI_DEVICE_ID_MOXA_CP104EL	0x1043
> -#define PCI_DEVICE_ID_MOXA_CT114	0x1140
> -#define PCI_DEVICE_ID_MOXA_CP114	0x1141
> -#define PCI_DEVICE_ID_MOXA_CP118U	0x1180
> -#define PCI_DEVICE_ID_MOXA_CP118EL	0x1181
> -#define PCI_DEVICE_ID_MOXA_CP132	0x1320
> -#define PCI_DEVICE_ID_MOXA_CP132U	0x1321
> -#define PCI_DEVICE_ID_MOXA_CP134U	0x1340
> -#define PCI_DEVICE_ID_MOXA_C168		0x1680
> -#define PCI_DEVICE_ID_MOXA_CP168U	0x1681
> -#define PCI_DEVICE_ID_MOXA_CP168EL	0x1682
>  #define PCI_DEVICE_ID_MOXA_CP204J	0x2040
>  #define PCI_DEVICE_ID_MOXA_C218		0x2180
>  #define PCI_DEVICE_ID_MOXA_C320		0x3200
> -- 
> 2.33.1
> 

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2021-11-18 20:58 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-18  7:31 [PATCH 00/19] mxser: another round of cleanups and fixes Jiri Slaby
2021-11-18  7:31 ` [PATCH 01/19] mxser: remove wait for sent from mxser_close_port Jiri Slaby
2021-11-18  7:31 ` [PATCH 02/19] mxser: rename mxser_close_port() to mxser_stop_rx() Jiri Slaby
2021-11-18  7:31 ` [PATCH 03/19] mxser: keep only !tty test in ISR Jiri Slaby
2021-11-18  7:31 ` [PATCH 04/19] mxser: move MSR read to mxser_check_modem_status() Jiri Slaby
2021-11-18  7:31 ` [PATCH 05/19] mxser: clean up tx handling in mxser_transmit_chars() Jiri Slaby
2021-11-18  7:31 ` [PATCH 06/19] mxser: remove pointless xmit_buf checks Jiri Slaby
2021-11-18  7:31 ` [PATCH 07/19] mxser: remove tty->driver_data NULL check Jiri Slaby
2021-11-18  7:31 ` [PATCH 08/19] mxser: call stop_rx from mxser_shutdown_port() Jiri Slaby
2021-11-18  7:31 ` [PATCH 09/19] mxser: don't flush buffer from mxser_close() directly Jiri Slaby
2021-11-18  7:31 ` [PATCH 10/19] mxser: use tty_port_close() in mxser_close() Jiri Slaby
2021-11-18  7:31 ` [PATCH 11/19] mxser: extract TX empty check from mxser_wait_until_sent() Jiri Slaby
2021-11-18  7:31 ` [PATCH 12/19] mxser: use msleep_interruptible() in mxser_wait_until_sent() Jiri Slaby
2021-11-18  7:31 ` [PATCH 13/19] mxser: clean up timeout handling " Jiri Slaby
2021-11-18  7:31 ` [PATCH 14/19] mxser: don't throttle manually Jiri Slaby
2021-11-18  7:31 ` [PATCH 15/19] mxser: remove tty parameter from mxser_receive_chars_new() Jiri Slaby
2021-11-18  7:31 ` [PATCH 16/19] mxser: increase buf_overrun if tty_insert_flip_char() fails Jiri Slaby
2021-11-18  7:31 ` [PATCH 17/19] mxser: add MOXA prefix to some PCI device IDs Jiri Slaby
2021-11-18  7:31 ` [PATCH 18/19] mxser: move ids from pci_ids.h here Jiri Slaby
2021-11-18 20:58   ` Bjorn Helgaas
2021-11-18  7:31 ` [PATCH 19/19] mxser: use PCI_DEVICE_DATA Jiri Slaby

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).