From owner-svn-src-all@freebsd.org Tue Dec 3 21:13:41 2019 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3BBFD1BDCA0; Tue, 3 Dec 2019 21:13:41 +0000 (UTC) (envelope-from vmaffione@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 47SF8P0tRtz3y25; Tue, 3 Dec 2019 21:13:41 +0000 (UTC) (envelope-from vmaffione@freebsd.org) Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) (Authenticated sender: vmaffione) by smtp.freebsd.org (Postfix) with ESMTPSA id E81071283; Tue, 3 Dec 2019 21:13:40 +0000 (UTC) (envelope-from vmaffione@freebsd.org) Received: by mail-qt1-f178.google.com with SMTP id d5so5387004qto.0; Tue, 03 Dec 2019 13:13:40 -0800 (PST) X-Gm-Message-State: APjAAAXVvgo6zFBXmE2a1J7ne2Rn1Oxmq2aMh6xEWgjTj5z5oHjXsOsQ RCpxrLpytUpTCRF9xL2+naJHKE0ng7kQO5QoEfI= X-Google-Smtp-Source: APXvYqwGFOMJafc6Qm7Kj1F3WELMEwkdzfs/iNUfjwyIo6YurX+gpSdnmM+L/XWhkrvD6X2HgQQjX8VCMlxweDuXANQ= X-Received: by 2002:ac8:2cda:: with SMTP id 26mr3822701qtx.291.1575407620369; Tue, 03 Dec 2019 13:13:40 -0800 (PST) MIME-Version: 1.0 References: <201912030722.xB37MdrZ033595@gndrsh.dnsmgr.net> <8044a2f1096df626368183dd1ae77f5ac2e43b70.camel@freebsd.org> In-Reply-To: From: Vincenzo Maffione Date: Tue, 3 Dec 2019 22:15:52 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r355301 - head/usr.sbin/bhyve To: John Baldwin Cc: Ian Lepore , Rodney Grimes , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Dec 2019 21:13:41 -0000 I see, thanks for the pointers. It looks like cfmakeraw() and tcsetattr() were what I was looking for. A bhyve-specific printf wrapper looks the right solution to me. I can try to sketch a patch for you guys to review, if that's useful. Cheers, Vincenzo Il giorno mar 3 dic 2019 alle ore 18:38 John Baldwin ha scritto: > On 12/3/19 7:14 AM, Ian Lepore wrote: > > On Mon, 2019-12-02 at 23:22 -0800, Rodney W. Grimes wrote: > >>> On Mon, 2019-12-02 at 20:51 +0000, Vincenzo Maffione wrote: > >>>> Author: vmaffione > >>>> Date: Mon Dec 2 20:51:46 2019 > >>>> New Revision: 355301 > >>>> URL: https://svnweb.freebsd.org/changeset/base/355301 > >>>> > >>>> Log: > >>>> bhyve: uniform printf format string newlines > >>>> > >>>> Some of the printf statements only use LF to get a newline. > >>>> However, a CR character is also required for the serial console to > >>>> print debug logs in a nice way. > >>>> Fix those code locations that only use LF, by adding a CR > >>>> character. > >>>> > >>>> Reviewed by: markj, aleksandr.fedorov@itglobal.com > >>>> MFC after: 1 week > >>>> Differential Revision: https://reviews.freebsd.org/D22552 > >>>> > >>>> Modified: > >>>> head/usr.sbin/bhyve/audio.c > >>>> head/usr.sbin/bhyve/hda_codec.c > >>>> head/usr.sbin/bhyve/net_backends.c > >>>> head/usr.sbin/bhyve/pci_ahci.c > >>>> head/usr.sbin/bhyve/pci_e82545.c > >>>> head/usr.sbin/bhyve/pci_hda.c > >>>> head/usr.sbin/bhyve/pci_nvme.c > >>>> head/usr.sbin/bhyve/pci_virtio_block.c > >>>> head/usr.sbin/bhyve/pci_virtio_console.c > >>>> head/usr.sbin/bhyve/pci_virtio_net.c > >>>> head/usr.sbin/bhyve/pci_virtio_rnd.c > >>>> head/usr.sbin/bhyve/pci_virtio_scsi.c > >>>> head/usr.sbin/bhyve/pci_xhci.c > >>>> head/usr.sbin/bhyve/rfb.c > >>>> > >>> > >>> These changes seem wrong in a couple ways... > >>> > >>> - Lines are terminated by linefeeds in unix-like systems. If > >>> linefeeds need to be translated to include carriage returns, that's the > >>> responsibility of the terminal/line-discipline layer, not the source > >>> strings being printed. > >> > >> Fully agree, this change seems wrong to me for Ian's stated reason here. > >> > >>> > >>> - The sequence \n\r is very strange. For systems that do prefer > >>> carriage returns, the \r always comes before the \n (or stands alone on > >>> Mac systems), not after. > >>> > >>> I have a feeling that the root of this is something like "lots of > >>> people use bhyve for Windows, so they use Windows apps to look at logs, > >>> so the logs should be formatted for Windows." If that's the reasoning, > >>> then why shouldn't we convert EVERY printf in the source base to > >>> include carriage returns, just in case a windows user wants to browse a > >>> log file? > >> > >> This is not that issue, it is something going on with the line > >> discipline when using the bhyve console device. I believe the > >> line displine being different from what bhyve itself is expecting > >> so when console output is intermixed with output from bhyve itself > >> things go wrong. > >> > >> The printf's in this patch are coming from the bhyve process that > >> has a fd open to the launching tty, the line discipline on that tty > >> is changed to something different after you open the > >> console device from that same controlling tty, or that is my hypothosis > >> on what is going wrong. > > > > There is a cfmakeraw() call in usr.sbin/bhyve/consport.c; that would > > definitely turn off nl->crnl translations. I think that is the other > > end of the bhyve console that I posted a patch for yesterday, and I > > think the console driver is probably still the right place to do that > > translation (because other console drivers do it that way). But I'm > > not set up to run bhyve here, so I can't test my theory. > > That patch won't work alone. Most people don't use bvmcons, most people > running bhyve use a standard uart as the console (bvmcons was an early > console devices before bhyve had a ns8250 uart device model). When using > the uart as the device model you still have raw output in the bhyve > process itself. (See cfmakeraw() in uart_emul.c as well). We don't > get to change how guest OS's use a uart, so any changes have to be in > usr.sbin/bhyve, not in sys/. > > However, to do that you have to actually do something more complicated to > turn \r\n and \n\r sequences from the guest into plain \n to stdout while > still DTRT for "bare" \r and \n characters. You also have to make sure > you do the right thing for input and not just output in the device models. > > I'm not quite a fan of this commit as-is since you will get spurious new > lines now if you don't use a serial console. I would perhaps rather have > a custom printf() wrapper in bhyve that outputs the \r as needed for > debug and error printfs only when stdio has been changed to be raw. I > was busy with family stuff and thanksgiving last week so didn't have time > to review it before it was committed unfortunately. > > -- > John Baldwin >