Blame SOURCES/kvm-hw-char-serial-Only-retry-if-qemu_chr_fe_write-retur.patch

357786
From a7a6995e2a24e9e4c89084acf3241e5640f30f3e Mon Sep 17 00:00:00 2001
357786
From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com>
357786
Date: Fri, 20 Jul 2018 12:17:59 +0200
357786
Subject: [PATCH 87/89] hw/char/serial: Only retry if qemu_chr_fe_write returns
357786
 0
357786
MIME-Version: 1.0
357786
Content-Type: text/plain; charset=UTF-8
357786
Content-Transfer-Encoding: 8bit
357786
357786
RH-Author: Marc-André Lureau <marcandre.lureau@redhat.com>
357786
Message-id: <20180720121800.18952-2-marcandre.lureau@redhat.com>
357786
Patchwork-id: 81454
357786
O-Subject: [RHEL-7.6 qemu-kvm-rhev PATCH v2 1/2] hw/char/serial: Only retry if qemu_chr_fe_write returns 0
357786
Bugzilla: 1592817
357786
RH-Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
357786
RH-Acked-by: Markus Armbruster <armbru@redhat.com>
357786
RH-Acked-by: John Snow <jsnow@redhat.com>
357786
357786
From: Sergio Lopez <slp@redhat.com>
357786
357786
Only retry on serial_xmit if qemu_chr_fe_write returns 0, as this is the
357786
only recoverable error.
357786
357786
Retrying with any other scenario, in addition to being a waste of CPU
357786
cycles, can compromise the Guest stability if by the vCPU issuing the
357786
write and the main loop thread are, by chance or explicit pinning,
357786
running on the same pCPU.
357786
357786
Previous discussion:
357786
357786
https://lists.nongnu.org/archive/html/qemu-devel/2018-05/msg06998.html
357786
357786
Signed-off-by: Sergio Lopez <slp@redhat.com>
357786
Message-Id: <1528185295-14199-1-git-send-email-slp@redhat.com>
357786
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
357786
357786
(cherry picked from commit 019288bf137183bf3407c9824655b753bfafc99f)
357786
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
357786
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
357786
---
357786
 hw/char/serial.c | 2 +-
357786
 1 file changed, 1 insertion(+), 1 deletion(-)
357786
357786
diff --git a/hw/char/serial.c b/hw/char/serial.c
357786
index d6d9b18..d4057bf 100644
357786
--- a/hw/char/serial.c
357786
+++ b/hw/char/serial.c
357786
@@ -262,7 +262,7 @@ static void serial_xmit(SerialState *s)
357786
         if (s->mcr & UART_MCR_LOOP) {
357786
             /* in loopback mode, say that we just received a char */
357786
             serial_receive1(s, &s->tsr, 1);
357786
-        } else if (qemu_chr_fe_write(&s->chr, &s->tsr, 1) != 1 &&
357786
+        } else if (qemu_chr_fe_write(&s->chr, &s->tsr, 1) == 0 &&
357786
                    s->tsr_retry < MAX_XMIT_RETRY) {
357786
             assert(s->watch_tag == 0);
357786
             s->watch_tag =
357786
-- 
357786
1.8.3.1
357786