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

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