From nobody Mon Feb 9 23:00:31 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1502119885869834.6518503769031; Mon, 7 Aug 2017 08:31:25 -0700 (PDT) Received: from localhost ([::1]:37919 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dek04-0006RT-LJ for importer@patchew.org; Mon, 07 Aug 2017 11:31:24 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49293) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dejJH-0007cD-W6 for qemu-devel@nongnu.org; Mon, 07 Aug 2017 10:47:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dejJ1-00045T-U7 for qemu-devel@nongnu.org; Mon, 07 Aug 2017 10:47:12 -0400 Received: from mx1.redhat.com ([209.132.183.28]:37426) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dejIZ-0003fb-Cz; Mon, 07 Aug 2017 10:46:27 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 23BD4A8A6; Mon, 7 Aug 2017 14:46:26 +0000 (UTC) Received: from blackfin.pond.sub.org (ovpn-116-254.ams2.redhat.com [10.36.116.254]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6515F90C71; Mon, 7 Aug 2017 14:46:16 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 399F711386D3; Mon, 7 Aug 2017 16:46:00 +0200 (CEST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 23BD4A8A6 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=armbru@redhat.com From: Markus Armbruster To: qemu-devel@nongnu.org Date: Mon, 7 Aug 2017 16:45:18 +0200 Message-Id: <1502117160-24655-15-git-send-email-armbru@redhat.com> In-Reply-To: <1502117160-24655-1-git-send-email-armbru@redhat.com> References: <1502117160-24655-1-git-send-email-armbru@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Mon, 07 Aug 2017 14:46:26 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [RFC PATCH 14/56] migration: Fix migrate-set-cache-size error reporting 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: kwolf@redhat.com, famz@redhat.com, qemu-block@nongnu.org, quintela@redhat.com, jcody@redhat.com, dgilbert@redhat.com, mreitz@redhat.com, marcandre.lureau@redhat.com, pbonzini@redhat.com, jsnow@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" qmp_migrate_set_cache_size() calls xbzrle_cache_resize() to do the actual work, which in turn calls cache_init() to resize the cache. If cache_init() fails, xbzrle_cache_resize() reports that error with error_report() and fails. qmp_migrate_set_cache_size() detects the failure and reports "Parameter 'cache size' expects is smaller than page size" with error_setg(). The first error is accurate, the second is bogus. With HMP, we get both. With QMP, we get the accurate one on stderr, and the bogus one via QMP. Fix by making xbzrle_cache_resize() use error_setg() instead of error_report(). Signed-off-by: Markus Armbruster Reviewed-by: Juan Quintela --- migration/migration.c | 4 +--- migration/ram.c | 9 +++++++-- migration/ram.h | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index c3fe0ed..3ce68f3 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1298,10 +1298,8 @@ void qmp_migrate_set_cache_size(int64_t value, Error= **errp) return; } =20 - new_size =3D xbzrle_cache_resize(value); + new_size =3D xbzrle_cache_resize(value, errp); if (new_size < 0) { - error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", - "is smaller than page size"); return; } =20 diff --git a/migration/ram.c b/migration/ram.c index e18b3e2..e9ab858 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -29,6 +29,7 @@ #include "cpu.h" #include #include "qapi-event.h" +#include "qapi/qmp/qerror.h" #include "qemu/cutils.h" #include "qemu/bitops.h" #include "qemu/bitmap.h" @@ -110,15 +111,19 @@ static void XBZRLE_cache_unlock(void) * hence changes to the cache are protected by XBZRLE.lock(). * * Returns the new_size or negative in case of error. + * Returns the the new cache size on success, -1 on error. * * @new_size: new cache size + * @errp: return location for an Error */ -int64_t xbzrle_cache_resize(int64_t new_size) +int64_t xbzrle_cache_resize(int64_t new_size, Error **errp) { PageCache *new_cache; int64_t ret; =20 if (new_size < TARGET_PAGE_SIZE) { + error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size", + "is smaller than page size"); return -1; } =20 @@ -131,7 +136,7 @@ int64_t xbzrle_cache_resize(int64_t new_size) new_cache =3D cache_init(new_size / TARGET_PAGE_SIZE, TARGET_PAGE_SIZE); if (!new_cache) { - error_report("Error creating cache"); + error_setg(errp, "Error creating cache"); ret =3D -1; goto out; } diff --git a/migration/ram.h b/migration/ram.h index c081fde..97842bf 100644 --- a/migration/ram.h +++ b/migration/ram.h @@ -35,7 +35,7 @@ extern MigrationStats ram_counters; extern XBZRLECacheStats xbzrle_counters; =20 -int64_t xbzrle_cache_resize(int64_t new_size); +int64_t xbzrle_cache_resize(int64_t new_size, Error **errp); uint64_t ram_bytes_remaining(void); uint64_t ram_bytes_total(void); =20 --=20 2.7.5