[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v7 10/16] emul/ns16x50: implement THR register


  • To: Mykola Kvach <xakep.amatop@xxxxxxxxx>
  • From: dmukhin@xxxxxxxx
  • Date: Thu, 14 May 2026 16:23:25 -0700
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 148.163.138.245) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=ford.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ford.com; dkim=pass (signature was verified) header.d=saarlouis.ford.com; dkim=pass (signature was verified) header.d=ford.com; arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ATBxlQzkMlBBhqJUrtzKUv1/x2JD0iJCkLqU8uZ7htY=; b=EX2RHqJhP6UcgzwIicNemYP8W6CUdx/txpmcATj9V2iYeKK+UCe6kye3M6ugDIS9Xw5frHwWXhha/W/fK5HgmTzTXc+8ZD/rvPz1ntuB+mWRwvAhBnDc7tWE0PbJRroqeKR2yp49o0ep2T4uYynAdmyulo8H6ALeuVF4Mvtpp4Y56FKufYUDh86nTkIdXEE6MfKNDpoyaoYSucn2A3yT8HXCiPzIuz5yaooVIcTguxqxcz16zxK71jqDmZ5O37PkcItoAcH8q9hCREV95GmBOJ4srpe6IH3kc0Kpu5HYY0gH48hXpPkB053FHE7TPXjcrVn4owyeaGsNB/jaAcEqmw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=S046uC7U5PMXD76lUwajfyb6ex77L0FOtToPV0wswB0hq/fsHT9zDXJKCT+GzXpqWg9OgXtTxfEcUKJwMLx92r0ivR+78RCpfR0jPkuu7VajMLv5O+NhY3n0IC5LSRTxKWNOp6RtTLltn3pA1/b8C1bUJ51STM7TXKofCyMiys+LddbsX9MnzCfMyKYY50AA1Ks3nlyc2raaMG/lFbQIPvmOganTcgqywebCSmh3crmT39B2NkiOR78GwqbspQ+yn6ZI6pBPWoUSVsquM9YtZ4reGAxEFLGtXk2tVhSOQsvbnjoGTevm/xXg3e1S5RJJHuAemUfMnECC/QpKHBLCqw==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=ppford header.d=ford.com header.i="@ford.com" header.h="Cc:Content-Transfer-Encoding:Content-Type:Date:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To"; dkim=pass header.s=selector2-azureford-onmicrosoft-com header.d=azureford.onmicrosoft.com header.i="@azureford.onmicrosoft.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"; dkim=pass header.s=ppserprodsaar header.d=saarlouis.ford.com header.i="@saarlouis.ford.com" header.h="Cc:Content-Transfer-Encoding:Content-Type:Date:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To"; dkim=pass header.s=ppfserpocford header.d=ford.com header.i="@ford.com" header.h="Cc:Content-Transfer-Encoding:Content-Type:Date:From:In-Reply-To:Message-ID:MIME-Version:References:Subject:To"
  • Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx, andrew.cooper3@xxxxxxxxxx, anthony.perard@xxxxxxxxxx, jbeulich@xxxxxxxx, julien@xxxxxxx, michal.orzel@xxxxxxx, roger.pau@xxxxxxxxxx, sstabellini@xxxxxxxxxx, dmukhin@xxxxxxxx
  • Delivery-date: Thu, 14 May 2026 23:23:57 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Pser-m365-app: SER-APP

Hi Mykola,

Thanks for detailed review for v7 series, much appreciated!

Sorry, it's been a while for this and other series...
I am picking that up.

> 
> On Tue, Sep 9, 2025 at 1:26 AM <dmukhin@xxxxxxx> wrote:
> >
> > From: Denis Mukhin <dmukhin@xxxxxxxx>
> >
> > Add THR register emulation to the I/O port handlder.
> >
> > Add TX FIFO management code since THR depends on TX FIFO.
> >
> > TX FIFOs is not emulated as per UART specs for simplicity (not need to 
> > emulate
> > baud rate). Emulator does not emulate NS8250 (no FIFO), NS16550a (16 bytes) 
> > or
> > NS16750 (64 bytes).
> >
> > TX FIFOs is emulated by using xencons_interface which conveniently provides
> > primitives for buffer management and later can be used for inter-domain
> > communication similarly to vpl011.
> >
> > Account for DLL == 0: in this case, disable transmitter.
> >
> > Add UART_IIR_THR interrupt reason handling since it depends on THR register
> > access.
> >
> > Signed-off-by: Denis Mukhin <dmukhin@xxxxxxxx>
> > ---
> > Changes since v6:
> > - added DLL == 0 case handling as per Mykola's suggestion
> > - dropped UART_IIR_THR clearing in UART_IIR register emulation in 
> > ns16x50_io_write8()
> > - simplified UART_IIR_THR handling
> > - updated ns16x50_iir_check_thr()
> > ---
> >  xen/common/emul/vuart/ns16x50.c | 82 ++++++++++++++++++++++++++++++++-
> >  1 file changed, 81 insertions(+), 1 deletion(-)
> >
> > diff --git a/xen/common/emul/vuart/ns16x50.c 
> > b/xen/common/emul/vuart/ns16x50.c
> > index 250411e0a7d8..137ce08f4e1d 100644
> > --- a/xen/common/emul/vuart/ns16x50.c
> > +++ b/xen/common/emul/vuart/ns16x50.c
> > @@ -149,6 +149,66 @@ static int ns16x50_fifo_rx_putchar(struct 
> > vuart_ns16x50 *vdev, char c)
> >      return rc;
> >  }
> >
> > +static bool ns16x50_fifo_tx_full(const struct vuart_ns16x50 *vdev)
> > +{
> > +    const struct xencons_interface *cons = &vdev->cons;
> > +
> > +    return cons->out_prod - cons->out_cons == ARRAY_SIZE(cons->out);
> > +}
> > +
> > +static void ns16x50_fifo_tx_reset(struct vuart_ns16x50 *vdev)
> > +{
> > +    struct xencons_interface *cons = &vdev->cons;
> > +
> > +    cons->out_cons = cons->out_prod;
> > +}
> > +
> > +/*
> > + * Flush cached output to Xen console.
> > + */
> > +static void ns16x50_fifo_tx_flush(struct vuart_ns16x50 *vdev)
> > +{
> > +    struct xencons_interface *cons = &vdev->cons;
> > +    struct domain *d = vdev->owner;
> > +    XENCONS_RING_IDX i, n, len = cons->out_prod - cons->out_cons;
> > +
> > +    ASSERT(len <= ARRAY_SIZE(cons->out));
> > +    if ( !len )
> > +        return;
> > +
> > +    i = MASK_XENCONS_IDX(cons->out_cons, cons->out);
> > +    n = min_t(XENCONS_RING_IDX, len, ARRAY_SIZE(cons->out) - i);
> > +    if ( n )
> > +        guest_printk(d, guest_prefix "%.*s", n, &cons->out[i]);
> > +
> > +    i = 0;
> > +    n = len - n;
> > +    if ( n )
> > +        guest_printk(d, guest_prefix "%.*s", n, &cons->out[i]);
> 
> ns16x50_fifo_tx_flush() splits wrapped output into two guest_printk()
> calls, so the log gets two prefixes for a single line:
>     (d1) PART1(d1) PART2
> 
> Could we linearize the wrapped buffer and emit a single guest_printk()
> (e.g. by printing both spans in one format string) to keep just one prefix?

Good idea, will do.

--
Denis



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.