From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AC0D5C87FCB for ; Fri, 1 Aug 2025 03:28:43 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.1066749.1431856 (Exim 4.92) (envelope-from ) id 1uhgRV-0000cl-AA; Fri, 01 Aug 2025 03:28:25 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 1066749.1431856; Fri, 01 Aug 2025 03:28:25 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uhgRV-0000ce-78; Fri, 01 Aug 2025 03:28:25 +0000 Received: by outflank-mailman (input) for mailman id 1066749; Fri, 01 Aug 2025 03:28:23 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uhgRS-0000cY-FK for xen-devel@lists.xenproject.org; Fri, 01 Aug 2025 03:28:23 +0000 Received: from mail-10629.protonmail.ch (mail-10629.protonmail.ch [79.135.106.29]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 91f51ed7-6e87-11f0-a320-13f23c93f187; Fri, 01 Aug 2025 05:28:21 +0200 (CEST) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 91f51ed7-6e87-11f0-a320-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=protonmail; t=1754018898; x=1754278098; bh=xpQcuWE2Srq1OrS6YWkW2AaQ+rh9ZESSnvzioC/47bg=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=aXFlDKW6XiLn5mn5n51o9ytQjN3y+Ngyfb5XE5BxOYIX9rwQg7KdN/dBJKVx5dVDz taU9RQ1pU6exuHLZW/Z+ibs2ChhtvkQcmm1IGa6qAd0aZvDZZvHHHGddezQaNWH1TJ /1hn+P768GCaEYoGgebiBJ/HXptutyy0JBuo3fr7hkJqXppDlem0pw876g8ILhWDW3 THZQm4yUCrq7PujEVq3u4fSDZUEwrHuBlXm0lbc7Sn1jGOkppkjyEj7LzM9VP1Qfz2 W8BgohT+WN4gdFzAlllPd+mbgP679cuRTCm7jAR3qoAY5ojkE2ZMef84SaP/c8SHVZ CsXZOrIY4Mgmg== Date: Fri, 01 Aug 2025 03:28:14 +0000 To: Stefano Stabellini From: dmkhn@proton.me Cc: xen-devel@lists.xenproject.org, andrew.cooper3@citrix.com, anthony.perard@vates.tech, jbeulich@suse.com, julien@xen.org, michal.orzel@amd.com, roger.pau@citrix.com, dmukhin@ford.com Subject: Re: [PATCH v4 5/8] emul/vuart-ns16550: introduce NS16550-compatible UART emulator (x86) Message-ID: In-Reply-To: References: <20250731192130.3948419-1-dmukhin@ford.com> <20250731192130.3948419-6-dmukhin@ford.com> Feedback-ID: 123220910:user:proton X-Pm-Message-ID: 3e8cdafa9f9802db10a97ac9263de613a8921cb0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On Thu, Jul 31, 2025 at 04:57:00PM -0700, Stefano Stabellini wrote: > On Thu, 31 Jul 2025, dmkhn@proton.me wrote: [..] > > +/* > > + * Emulate 8-bit write access to NS16550 register. > > + */ > > +static int ns16550_io_write8( > > + struct vuart_ns16550 *vdev, uint32_t reg, uint8_t *data) > > +{ > > + uint8_t *regs =3D vdev->regs; > > + uint8_t val =3D *data; > > + int rc =3D 0; > > + > > + if ( ns16550_dlab_get(vdev) && (reg =3D=3D UART_DLL || reg =3D=3D = UART_DLM) ) > > + regs[NS16550_REGS_NUM + reg] =3D val; > > + else > > + { > > + switch ( reg ) > > + { > > + case UART_THR: > > + if ( regs[UART_MCR] & UART_MCR_LOOP ) > > + { > > + (void)ns16550_fifo_rx_putchar(vdev, val); > > + regs[UART_LSR] |=3D UART_LSR_OE; >=20 > Why is UART_LSR_OE set unconditionally here instead of checking if > ns16550_fifo_rx_putchar returned -ENOSPC? Thanks! Yes, overrun condition should be emulated once FIFO is full. [..] > > + > > + /* Calculate changes in modem status */ > > + if ( (msr_curr & UART_MSR_CTS) ^ (msr_next & UART_MSR_CTS)= ) > > + msr_delta |=3D UART_MSR_DCTS; > > + if ( (msr_curr & UART_MCR_RTS) ^ (msr_next & UART_MCR_RTS)= ) > > + msr_delta |=3D UART_MSR_DDSR; >=20 > Should we check UART_MSR_DSR instead of UART_MCR_RTS to set > UART_MSR_DDSR ? Good catch! Thanks. [..]