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