yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone

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

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