From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id F3F0E21E74925 for ; Mon, 4 Sep 2017 08:54:37 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8C4076DDDC; Mon, 4 Sep 2017 15:57:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 8C4076DDDC Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=lersek@redhat.com Received: from lacos-laptop-7.usersys.redhat.com (ovpn-120-2.rdu2.redhat.com [10.10.120.2]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7DD60BF672; Mon, 4 Sep 2017 15:57:24 +0000 (UTC) From: Laszlo Ersek To: edk2-devel-01 Cc: Brijesh Singh , Jordan Justen Date: Mon, 4 Sep 2017 17:57:17 +0200 Message-Id: <20170904155717.31591-3-lersek@redhat.com> In-Reply-To: <20170904155717.31591-1-lersek@redhat.com> References: <20170904155717.31591-1-lersek@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Mon, 04 Sep 2017 15:57:25 +0000 (UTC) Subject: [PATCH 2/2] OvmfPkg/PlatformDebugLibIoPort: write messages with IoWriteFifo8() X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Sep 2017 15:54:38 -0000 Since commit 19c6d9feaaf8 ("MdePkg: Expand BaseIoLibIntrinsic (IoLib class) library", 2017-01-14), IoWriteFifo8() has been widely available to modules. Use it to print debug messages and assertion failures to the QEMU debug port, rather than open-coded loops. In the general case this speeds up logging, because debug messages will now trap to QEMU once per message (as opposed to once per character), due to "REP OUTSB" in "MdePkg/Library/BaseIoLibIntrinsic/*/IoFifoSev.nasm". In SEV guests, there is no speedup (SEV doesn't support the REP prefix). SEV is detected internally to BaseIoLibIntrinsic. Cc: Brijesh Singh Cc: Jordan Justen Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek --- OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c index 44850a9dbad0..5435767c1c69 100644 --- a/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c +++ b/OvmfPkg/Library/PlatformDebugLibIoPort/DebugLib.c @@ -69,7 +69,7 @@ DebugPrint ( { CHAR8 Buffer[MAX_DEBUG_MESSAGE_LENGTH]; VA_LIST Marker; - UINT8 *Ptr; + UINTN Length; // // If Format is NULL, then ASSERT(). @@ -87,15 +87,13 @@ DebugPrint ( // Convert the DEBUG() message to an ASCII String // VA_START (Marker, Format); - AsciiVSPrint (Buffer, sizeof (Buffer), Format, Marker); + Length = AsciiVSPrint (Buffer, sizeof (Buffer), Format, Marker); VA_END (Marker); // // Send the print string to the debug I/O port // - for (Ptr = (UINT8 *) Buffer; *Ptr; Ptr++) { - IoWrite8 (PcdGet16(PcdDebugIoPort), *Ptr); - } + IoWriteFifo8 (PcdGet16 (PcdDebugIoPort), Length, Buffer); } @@ -129,20 +127,18 @@ DebugAssert ( ) { CHAR8 Buffer[MAX_DEBUG_MESSAGE_LENGTH]; - UINT8 *Ptr; + UINTN Length; // // Generate the ASSERT() message in Ascii format // - AsciiSPrint (Buffer, sizeof Buffer, "ASSERT %a(%Lu): %a\n", FileName, - (UINT64)LineNumber, Description); + Length = AsciiSPrint (Buffer, sizeof Buffer, "ASSERT %a(%Lu): %a\n", + FileName, (UINT64)LineNumber, Description); // - // Send the print string to the Console Output device + // Send the print string to the debug I/O port // - for (Ptr = (UINT8 *) Buffer; *Ptr; Ptr++) { - IoWrite8 (PcdGet16(PcdDebugIoPort), *Ptr); - } + IoWriteFifo8 (PcdGet16 (PcdDebugIoPort), Length, Buffer); // // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings -- 2.14.1.3.gb7cf6e02401b