From patchwork Thu May 31 07:45:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergio Lopez X-Patchwork-Id: 923216 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40xKKy3Jrsz9s0x for ; Thu, 31 May 2018 17:47:00 +1000 (AEST) Received: from localhost ([::1]:42434 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fOIIT-0001fF-NK for incoming@patchwork.ozlabs.org; Thu, 31 May 2018 03:46:57 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34672) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fOIHt-0001em-Md for qemu-devel@nongnu.org; Thu, 31 May 2018 03:46:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fOIHq-0007lp-Q0 for qemu-devel@nongnu.org; Thu, 31 May 2018 03:46:21 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:52884 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fOIHq-0007le-LE for qemu-devel@nongnu.org; Thu, 31 May 2018 03:46:18 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1E5A081663CC for ; Thu, 31 May 2018 07:46:18 +0000 (UTC) Received: from dritchie.redhat.com (ovpn-116-105.ams2.redhat.com [10.36.116.105]) by smtp.corp.redhat.com (Postfix) with ESMTP id C9C21202660D; Thu, 31 May 2018 07:46:15 +0000 (UTC) From: Sergio Lopez To: berrange@redhat.com, pbonzini@redhat.com, marcandre.lureau@redhat.com, mst@redhat.com Date: Thu, 31 May 2018 09:45:59 +0200 Message-Id: <20180531074601.10647-2-slp@redhat.com> In-Reply-To: <20180531074601.10647-1-slp@redhat.com> References: <20180531074601.10647-1-slp@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Thu, 31 May 2018 07:46:18 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Thu, 31 May 2018 07:46:18 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'slp@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH 1/3] io: Implement QIO_CHANNEL_ERR_BROKEN X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, Sergio Lopez Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" QIO_CHANNEL_ERR_BROKEN is used to identify a potentially unrecoverable error in the channel, like EPIPE. --- include/io/channel.h | 1 + io/channel-file.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/include/io/channel.h b/include/io/channel.h index e8cdadb..bbe45f6 100644 --- a/include/io/channel.h +++ b/include/io/channel.h @@ -38,6 +38,7 @@ typedef struct QIOChannel QIOChannel; typedef struct QIOChannelClass QIOChannelClass; #define QIO_CHANNEL_ERR_BLOCK -2 +#define QIO_CHANNEL_ERR_BROKEN -3 typedef enum QIOChannelFeature QIOChannelFeature; diff --git a/io/channel-file.c b/io/channel-file.c index db948ab..a990f67 100644 --- a/io/channel-file.c +++ b/io/channel-file.c @@ -124,6 +124,9 @@ static ssize_t qio_channel_file_writev(QIOChannel *ioc, if (errno == EAGAIN) { return QIO_CHANNEL_ERR_BLOCK; } + if (errno == EPIPE) { + return QIO_CHANNEL_ERR_BROKEN; + } if (errno == EINTR) { goto retry; } From patchwork Thu May 31 07:46:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sergio Lopez X-Patchwork-Id: 923215 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40xKKy3Jqkz9s0W for ; Thu, 31 May 2018 17:47:00 +1000 (AEST) Received: from localhost ([::1]:42435 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fOIIU-0001fb-FO for incoming@patchwork.ozlabs.org; Thu, 31 May 2018 03:46:58 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34670) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fOIHt-0001ek-MP for qemu-devel@nongnu.org; Thu, 31 May 2018 03:46:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fOIHs-0007mS-75 for qemu-devel@nongnu.org; Thu, 31 May 2018 03:46:21 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:34478 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fOIHs-0007mJ-3g for qemu-devel@nongnu.org; Thu, 31 May 2018 03:46:20 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A81647DAC1 for ; Thu, 31 May 2018 07:46:19 +0000 (UTC) Received: from dritchie.redhat.com (ovpn-116-105.ams2.redhat.com [10.36.116.105]) by smtp.corp.redhat.com (Postfix) with ESMTP id 617482026DEF; Thu, 31 May 2018 07:46:18 +0000 (UTC) From: Sergio Lopez To: berrange@redhat.com, pbonzini@redhat.com, marcandre.lureau@redhat.com, mst@redhat.com Date: Thu, 31 May 2018 09:46:00 +0200 Message-Id: <20180531074601.10647-3-slp@redhat.com> In-Reply-To: <20180531074601.10647-1-slp@redhat.com> References: <20180531074601.10647-1-slp@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Thu, 31 May 2018 07:46:19 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Thu, 31 May 2018 07:46:19 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'slp@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH 2/3] chardev: On QIO_CHANNEL_ERR_BROKEN set errno to EPIPE X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, Sergio Lopez Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" This allows callers to identify this potentially unrecoverable error. Reviewed-by: Marc-André Lureau --- chardev/char-io.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/chardev/char-io.c b/chardev/char-io.c index f810524..f934eb9 100644 --- a/chardev/char-io.c +++ b/chardev/char-io.c @@ -168,6 +168,9 @@ int io_channel_send_full(QIOChannel *ioc, errno = EAGAIN; return -1; + } else if (ret == QIO_CHANNEL_ERR_BROKEN) { + errno = EPIPE; + return -1; } else if (ret < 0) { errno = EINVAL; return -1; From patchwork Thu May 31 07:46:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergio Lopez X-Patchwork-Id: 923217 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40xKL24vD3z9s0W for ; Thu, 31 May 2018 17:47:06 +1000 (AEST) Received: from localhost ([::1]:42436 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fOIIa-0001hc-8w for incoming@patchwork.ozlabs.org; Thu, 31 May 2018 03:47:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34700) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fOIHu-0001f2-On for qemu-devel@nongnu.org; Thu, 31 May 2018 03:46:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fOIHt-0007nm-Rl for qemu-devel@nongnu.org; Thu, 31 May 2018 03:46:22 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:34482 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fOIHt-0007nB-Mm for qemu-devel@nongnu.org; Thu, 31 May 2018 03:46:21 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3EEA17A7F6 for ; Thu, 31 May 2018 07:46:21 +0000 (UTC) Received: from dritchie.redhat.com (ovpn-116-105.ams2.redhat.com [10.36.116.105]) by smtp.corp.redhat.com (Postfix) with ESMTP id EEF2D2026609; Thu, 31 May 2018 07:46:19 +0000 (UTC) From: Sergio Lopez To: berrange@redhat.com, pbonzini@redhat.com, marcandre.lureau@redhat.com, mst@redhat.com Date: Thu, 31 May 2018 09:46:01 +0200 Message-Id: <20180531074601.10647-4-slp@redhat.com> In-Reply-To: <20180531074601.10647-1-slp@redhat.com> References: <20180531074601.10647-1-slp@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Thu, 31 May 2018 07:46:21 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Thu, 31 May 2018 07:46:21 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'slp@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH 3/3] hw/char/serial: Don't retry on serial_xmit if errno == EPIPE X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, Sergio Lopez Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" If writing to the frontend channel failed with EPIPE, don't set up a retry. EPIPE is not a recoverable error, so trying again is a waste of CPU cycles. If the vCPU writing to the serial device and emulator thread are pinned to the same pCPU, it can also compromise the stability of the Guest OS, as both threads will be competing for pCPU's time, with the vCPU actively polling the serial device and barely giving time to the emulator thread to make actual progress. --- hw/char/serial.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/char/serial.c b/hw/char/serial.c index 2c080c9..f26e86b 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -262,6 +262,7 @@ static void serial_xmit(SerialState *s) /* in loopback mode, say that we just received a char */ serial_receive1(s, &s->tsr, 1); } else if (qemu_chr_fe_write(&s->chr, &s->tsr, 1) != 1 && + errno != EPIPE && s->tsr_retry < MAX_XMIT_RETRY) { assert(s->watch_tag == 0); s->watch_tag =