Commit 62dcd5e1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull tty/serial driver fixes from Greg KH:
 "Here are some small tty and serial driver fixes for 5.19-rc3 to
  resolve some reported problems:

   - 8250 lsr read bugfix

   - n_gsm line discipline allocation fix

   - qcom serial driver fix for reported lockups that happened in -rc1

   - goldfish tty driver fix

  All have been in linux-next for a while now with no reported issues"

* tag 'tty-5.19-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
  serial: 8250: Store to lsr_save_flags after lsr read
  tty: goldfish: Fix free_irq() on remove
  tty: serial: qcom-geni-serial: Implement start_rx callback
  serial: core: Introduce callback for start_rx and do stop_rx in suspend only if this callback implementation is present.
  tty: n_gsm: Debug output allocation must use GFP_ATOMIC
parents 9057a646 be03b065
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -426,7 +426,7 @@ static int goldfish_tty_remove(struct platform_device *pdev)
	tty_unregister_device(goldfish_tty_driver, qtty->console.index);
	iounmap(qtty->base);
	qtty->base = NULL;
	free_irq(qtty->irq, pdev);
	free_irq(qtty->irq, qtty);
	tty_port_destroy(&qtty->port);
	goldfish_tty_current_line_count--;
	if (goldfish_tty_current_line_count == 0)
+1 −1
Original line number Diff line number Diff line
@@ -455,7 +455,7 @@ static void gsm_hex_dump_bytes(const char *fname, const u8 *data,
		return;
	}

	prefix = kasprintf(GFP_KERNEL, "%s: ", fname);
	prefix = kasprintf(GFP_ATOMIC, "%s: ", fname);
	if (!prefix)
		return;
	print_hex_dump(KERN_INFO, prefix, DUMP_PREFIX_OFFSET, 16, 1, data, len,
+2 −0
Original line number Diff line number Diff line
@@ -1517,6 +1517,8 @@ static inline void __stop_tx(struct uart_8250_port *p)
		unsigned char lsr = serial_in(p, UART_LSR);
		u64 stop_delay = 0;

		p->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;

		if (!(lsr & UART_LSR_THRE))
			return;
		/*
+1 −0
Original line number Diff line number Diff line
@@ -1306,6 +1306,7 @@ static const struct uart_ops qcom_geni_console_pops = {
	.stop_tx = qcom_geni_serial_stop_tx,
	.start_tx = qcom_geni_serial_start_tx,
	.stop_rx = qcom_geni_serial_stop_rx,
	.start_rx = qcom_geni_serial_start_rx,
	.set_termios = qcom_geni_serial_set_termios,
	.startup = qcom_geni_serial_startup,
	.request_port = qcom_geni_serial_request_port,
+6 −3
Original line number Diff line number Diff line
@@ -2214,10 +2214,11 @@ int uart_suspend_port(struct uart_driver *drv, struct uart_port *uport)
	/*
	 * Nothing to do if the console is not suspending
	 * except stop_rx to prevent any asynchronous data
	 * over RX line. Re-start_rx, when required, is
	 * done by set_termios in resume sequence
	 * over RX line. However ensure that we will be
	 * able to Re-start_rx later.
	 */
	if (!console_suspend_enabled && uart_console(uport)) {
		if (uport->ops->start_rx)
			uport->ops->stop_rx(uport);
		goto unlock;
	}
@@ -2310,6 +2311,8 @@ int uart_resume_port(struct uart_driver *drv, struct uart_port *uport)
		if (console_suspend_enabled)
			uart_change_pm(state, UART_PM_STATE_ON);
		uport->ops->set_termios(uport, &termios, NULL);
		if (!console_suspend_enabled && uport->ops->start_rx)
			uport->ops->start_rx(uport);
		if (console_suspend_enabled)
			console_start(uport->cons);
	}
Loading