Thread (18 messages) 18 messages, 3 authors, 2021-09-27

Re: [PATCH 4/6] serial: 8250: Implement prep_tx for power management

From: Tony Lindgren <tony@atomide.com>
Date: 2021-09-23 15:05:41
Also in: linux-omap, lkml

* Johan Hovold [off-list ref] [210923 12:50]:
On Tue, Sep 21, 2021 at 01:33:44PM +0300, Tony Lindgren wrote:
quoted
+static int serial8250_prep_tx(struct uart_port *port)
+{
+	struct uart_8250_port *up = up_to_u8250p(port);
+	struct device *dev = up->port.dev;
+	int err;
+
+	if (!(up->capabilities & UART_CAP_RPM))
+		return 0;
+
+	if (!pm_runtime_suspended(dev)) {
+		pm_runtime_mark_last_busy(dev);
+		return 0;
+	}
+
+	err = pm_request_resume(dev);
+	if (err < 0) {
+		dev_warn(dev, "prep_tx wakeup failed: %d\n", err);
+		return err;
+	}
How is this supposed to work without a runtime PM usage-counter
increment? What's to prevent the port from suspending again while it's
transmitting?
Hmm yeah we should at pm_runtime_get() and pm_runtime_put() to write()
unless serial8250_rpm_get() and serial8250_rpm_put() are doing it.

Or pair prep with finish and deal with the usage count there.

Regards,

Tony
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help