From nobody Tue Feb 10 06:27:19 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; dkim=fail; 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 1504868636783957.2856324592464; Fri, 8 Sep 2017 04:03:56 -0700 (PDT) Received: from localhost ([::1]:44584 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dqH4l-0001Ae-Dc for importer@patchew.org; Fri, 08 Sep 2017 07:03:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58897) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dqGeE-0002H0-SH for qemu-devel@nongnu.org; Fri, 08 Sep 2017 06:36:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dqGe6-0003Mf-Gc for qemu-devel@nongnu.org; Fri, 08 Sep 2017 06:36:30 -0400 Received: from ozlabs.org ([103.22.144.67]:51121) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dqGe4-0003Hc-I9; Fri, 08 Sep 2017 06:36:22 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3xpYdP5kdqz9t4s; Fri, 8 Sep 2017 20:36:08 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1504866969; bh=3NN5wHqnMb89MQwDwiOOpiz5QgSYJtk2XDySAMW8F8o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j64LMlZaduaXnqh3bRSjTtvE+U3svKrWVePaFkLrKsEnSkCfUD6S5P7nIeTc+XMKu GiVdN89i6hpBsXpiHPjSQAVjziVkZH5BKIcb9hbKCn774F2DmMVsFQKAk6H4YR2ElM pbkH5mSpA0nVzoyTdN28g07sy9JdoO7cTQQrgy4M= From: David Gibson To: peter.maydell@linaro.org Date: Fri, 8 Sep 2017 20:35:48 +1000 Message-Id: <20170908103558.31632-31-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170908103558.31632-1-david@gibson.dropbear.id.au> References: <20170908103558.31632-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 103.22.144.67 Subject: [Qemu-devel] [PULL 30/40] spapr: fallback to raw mode if best compat mode cannot be set during CAS 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, aik@ozlabs.ru, agraf@suse.de, mdroth@linux.vnet.ibm.com, Greg Kurz , qemu-ppc@nongnu.org, imammedo@redhat.com, sam.bobroff@au1.ibm.com, David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Greg Kurz KVM PR doesn't allow to set a compat mode. This causes ppc_set_compat_all() to fail and we return H_HARDWARE to the guest right away. This is excessive: even if we favor compat mode since commit 152ef803ceb19, we should at least fallback to raw mode if the guest supports it. This patch modifies cas_check_pvr() so that it also reports that the real PVR was found in the table supplied by the guest. Note that this is only makes sense if raw mode isn't explicitely disabled (ie, the user didn't set the machine "max-cpu-compat" property). If this is the case, we can simply ignore ppc_set_compat_all() failures, and let the guest run in raw mode. Signed-off-by: Greg Kurz Signed-off-by: David Gibson --- hw/ppc/spapr_hcall.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 7cf0993800..8b3c0e17e7 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -1441,7 +1441,8 @@ static target_ulong h_signal_sys_reset(PowerPCCPU *cp= u, } =20 static uint32_t cas_check_pvr(sPAPRMachineState *spapr, PowerPCCPU *cpu, - target_ulong *addr, Error **errp) + target_ulong *addr, bool *raw_mode_supported, + Error **errp) { bool explicit_match =3D false; /* Matched the CPU's real PVR */ uint32_t max_compat =3D spapr->max_compat_pvr; @@ -1481,6 +1482,8 @@ static uint32_t cas_check_pvr(sPAPRMachineState *spap= r, PowerPCCPU *cpu, return 0; } =20 + *raw_mode_supported =3D explicit_match; + /* Parsing finished */ trace_spapr_cas_pvr(cpu->compat_pvr, explicit_match, best_compat); =20 @@ -1499,8 +1502,9 @@ static target_ulong h_client_architecture_support(Pow= erPCCPU *cpu, sPAPROptionVector *ov1_guest, *ov5_guest, *ov5_cas_old, *ov5_updates; bool guest_radix; Error *local_err =3D NULL; + bool raw_mode_supported =3D false; =20 - cas_pvr =3D cas_check_pvr(spapr, cpu, &addr, &local_err); + cas_pvr =3D cas_check_pvr(spapr, cpu, &addr, &raw_mode_supported, &loc= al_err); if (local_err) { error_report_err(local_err); return H_HARDWARE; @@ -1510,8 +1514,14 @@ static target_ulong h_client_architecture_support(Po= werPCCPU *cpu, if (cpu->compat_pvr !=3D cas_pvr) { ppc_set_compat_all(cas_pvr, &local_err); if (local_err) { - error_report_err(local_err); - return H_HARDWARE; + /* We fail to set compat mode (likely because running with KVM= PR), + * but maybe we can fallback to raw mode if the guest supports= it. + */ + if (!raw_mode_supported) { + error_report_err(local_err); + return H_HARDWARE; + } + local_err =3D NULL; } } =20 --=20 2.13.5