From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: John Ogness <john.ogness@linutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jiri Slaby <jirislaby@kernel.org>, Petr Mladek <pmladek@suse.com>,
Sergey Senozhatsky <senozhatsky@chromium.org>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Gleixner <tglx@linutronix.de>,
Esben Haabendal <esben@geanix.com>,
linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org,
Matt Turner <mattst88@gmail.com>,
Tony Lindgren <tony@atomide.com>, Arnd Bergmann <arnd@arndb.de>,
Niklas Schnelle <schnelle@linux.ibm.com>,
Serge Semin <fancer.lancer@gmail.com>
Subject: Re: [PATCH tty-next v4 5/6] serial: 8250: Switch to nbcon console
Date: Sun, 29 Dec 2024 00:11:07 +0200 [thread overview]
Message-ID: <Z3B3e6ppZc94Pdck@smile.fi.intel.com> (raw)
In-Reply-To: <20241227224523.28131-6-john.ogness@linutronix.de>
On Fri, Dec 27, 2024 at 11:51:21PM +0106, John Ogness wrote:
> Implement the necessary callbacks to switch the 8250 console driver
> to perform as an nbcon console.
>
> Add implementations for the nbcon console callbacks:
>
> ->write_atomic()
> ->write_thread()
> ->device_lock()
> ->device_unlock()
>
> and add CON_NBCON to the initial @flags.
>
> All register access in the callbacks are within unsafe sections.
> The ->write_atomic and ->write_therad() callbacks allow safe
->write_atomic()
> handover/takeover per byte and add a preceding newline if they
> take over from another context mid-line.
>
> For the ->write_atomic() callback, a new irq_work is used to defer
> modem control since it may be called from a context that does not
> allow waking up tasks.
>
> Note: A new __serial8250_clear_IER() is introduced for direct
> clearing of UART_IER. This will allow to restore the lockdep
> check to serial8250_clear_IER() in a follow-up commit.
...
> if (toggle_ier) {
> + /*
> + * Port locked to synchronize UART_IER access
> + * against the console
Missing period in multi-line comment.
> + */
> + lockdep_assert_held_once(&p->port.lock);
> +
> p->ier |= UART_IER_RLSI | UART_IER_RDI;
> serial_port_out(&p->port, UART_IER, p->ier);
> }
...
> -static void fifo_wait_for_lsr(struct uart_8250_port *up, unsigned int count)
> +static int fifo_wait_for_lsr(struct uart_8250_port *up,
> + struct nbcon_write_context *wctxt,
> + unsigned int count)
> {
> unsigned int i;
>
> for (i = 0; i < count; i++) {
> + if (!nbcon_can_proceed(wctxt))
> + return -EPERM;
> +
> if (wait_for_lsr(up, UART_LSR_THRE))
> - return;
> + return 0;
> }
> +
> + return -ETIMEDOUT;
> }
...
> static void serial8250_console_fifo_write(struct uart_8250_port *up,
> - const char *s, unsigned int count)
> + struct nbcon_write_context *wctxt)
> {
> - const char *end = s + count;
> unsigned int fifosize = up->tx_loadsz;
> struct uart_port *port = &up->port;
> + const char *s = wctxt->outbuf;
> + const char *end = s + wctxt->len;
> unsigned int tx_count = 0;
> bool cr_sent = false;
> unsigned int i;
>
> while (s != end) {
> /* Allow timeout for each byte of a possibly full FIFO */
> - fifo_wait_for_lsr(up, fifosize);
> + if (fifo_wait_for_lsr(up, wctxt, fifosize) == -EPERM)
> + return;
Perhaps it was already discussed and I forgot about it or hadn't read,
but I don't get how per-byte check for NBCON permission can help if there
is something already in the HW FIFO?
I mean in _this_ case wouldn't be enough to check FIFO to drain and only after
that check the permission?
> for (i = 0; i < fifosize && s != end; ++i) {
> if (*s == '\n' && !cr_sent) {
> * Allow timeout for each byte written since the caller will only wait
> * for UART_LSR_BOTH_EMPTY using the timeout of a single character
> */
> - fifo_wait_for_lsr(up, tx_count);
> + fifo_wait_for_lsr(up, wctxt, tx_count);
> +}
...
> + if (up->msr_saved_flags) {
> + /*
> + * For atomic, it must be deferred to irq_work because this
> + * may be a context that does not permit waking up tasks.
> + */
> + if (is_atomic)
> + irq_work_queue(&up->modem_status_work);
> + else
> + serial8250_modem_status(up);
Hmm... Shouldn't this be part of _modem_status() for all drivers using this call?
> + }
...
> + bool console_line_ended; /* line fully output */
Sorry, I didn't get the comment. Do you meant "line is fully printed out
[to HW]"?
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2024-12-28 22:11 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-27 22:45 [PATCH tty-next v4 0/6] convert 8250 to nbcon John Ogness
2024-12-27 22:45 ` [PATCH tty-next v4 1/6] serial: 8250: Adjust the timeout for FIFO mode John Ogness
2025-01-03 9:39 ` Petr Mladek
2024-12-27 22:45 ` [PATCH tty-next v4 2/6] serial: 8250: Use frame rate to determine timeout John Ogness
2024-12-28 21:51 ` Andy Shevchenko
2025-01-03 11:18 ` Petr Mladek
2024-12-27 22:45 ` [PATCH tty-next v4 3/6] serial: 8250: Use high-level writing function for FIFO John Ogness
2024-12-27 22:45 ` [PATCH tty-next v4 4/6] serial: 8250: Provide flag for IER toggling for RS485 John Ogness
2025-01-03 15:30 ` Petr Mladek
2025-01-05 0:26 ` John Ogness
2025-01-06 14:00 ` Petr Mladek
2024-12-27 22:45 ` [PATCH tty-next v4 5/6] serial: 8250: Switch to nbcon console John Ogness
2024-12-28 22:11 ` Andy Shevchenko [this message]
2024-12-30 10:22 ` John Ogness
2025-01-03 16:43 ` Petr Mladek
2025-01-05 0:57 ` John Ogness
2025-01-06 16:08 ` Petr Mladek
2024-12-27 22:45 ` [PATCH tty-next v4 6/6] serial: 8250: Revert "drop lockdep annotation from serial8250_clear_IER()" John Ogness
2024-12-28 22:18 ` [PATCH tty-next v4 0/6] convert 8250 to nbcon Andy Shevchenko
2024-12-30 11:00 ` John Ogness
2024-12-30 15:29 ` John Ogness
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z3B3e6ppZc94Pdck@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=arnd@arndb.de \
--cc=esben@geanix.com \
--cc=fancer.lancer@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=jirislaby@kernel.org \
--cc=john.ogness@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=mattst88@gmail.com \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=schnelle@linux.ibm.com \
--cc=senozhatsky@chromium.org \
--cc=tglx@linutronix.de \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.