{"id":811529,"url":"http://patchwork.ozlabs.org/api/patches/811529/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20170908103558.31632-31-david@gibson.dropbear.id.au/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20170908103558.31632-31-david@gibson.dropbear.id.au>","list_archive_url":null,"date":"2017-09-08T10:35:48","name":"[PULL,30/40] spapr: fallback to raw mode if best compat mode cannot be set during CAS","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"539bd8e37af57d2b52b382b5ddcf296d5ed5a865","submitter":{"id":47,"url":"http://patchwork.ozlabs.org/api/people/47/?format=json","name":"David Gibson","email":"david@gibson.dropbear.id.au"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20170908103558.31632-31-david@gibson.dropbear.id.au/mbox/","series":[{"id":2179,"url":"http://patchwork.ozlabs.org/api/series/2179/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=2179","date":"2017-09-08T10:35:20","name":"[PULL,01/40] hw/ppc/spapr_drc.c: change spapr_drc_needed to use drc->dev","version":1,"mbox":"http://patchwork.ozlabs.org/series/2179/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/811529/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/811529/checks/","tags":{},"related":[],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=gibson.dropbear.id.au\n\theader.i=@gibson.dropbear.id.au header.b=\"j64LMlZa\"; \n\tdkim-atps=neutral"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xpZD96K9hz9s81\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri,  8 Sep 2017 21:02:47 +1000 (AEST)","from localhost ([::1]:44579 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dqH3d-0008QH-CV\n\tfor incoming@patchwork.ozlabs.org; Fri, 08 Sep 2017 07:02:45 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:58897)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <dgibson@ozlabs.org>) id 1dqGeE-0002H0-SH\n\tfor qemu-devel@nongnu.org; Fri, 08 Sep 2017 06:36:42 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <dgibson@ozlabs.org>) id 1dqGe6-0003Mf-Gc\n\tfor qemu-devel@nongnu.org; Fri, 08 Sep 2017 06:36:30 -0400","from ozlabs.org ([103.22.144.67]:51121)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <dgibson@ozlabs.org>)\n\tid 1dqGe4-0003Hc-I9; Fri, 08 Sep 2017 06:36:22 -0400","by ozlabs.org (Postfix, from userid 1007)\n\tid 3xpYdP5kdqz9t4s; Fri,  8 Sep 2017 20:36:08 +1000 (AEST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple;\n\td=gibson.dropbear.id.au; s=201602; t=1504866969;\n\tbh=3NN5wHqnMb89MQwDwiOOpiz5QgSYJtk2XDySAMW8F8o=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=j64LMlZaduaXnqh3bRSjTtvE+U3svKrWVePaFkLrKsEnSkCfUD6S5P7nIeTc+XMKu\n\tGiVdN89i6hpBsXpiHPjSQAVjziVkZH5BKIcb9hbKCn774F2DmMVsFQKAk6H4YR2ElM\n\tpbkH5mSpA0nVzoyTdN28g07sy9JdoO7cTQQrgy4M=","From":"David Gibson <david@gibson.dropbear.id.au>","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]\n\t[fuzzy]","X-Received-From":"103.22.144.67","Subject":"[Qemu-devel] [PULL 30/40] spapr: fallback to raw mode if best\n\tcompat mode cannot be set during CAS","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"qemu-devel@nongnu.org, aik@ozlabs.ru, agraf@suse.de,\n\tmdroth@linux.vnet.ibm.com, Greg Kurz <groug@kaod.org>,\n\tqemu-ppc@nongnu.org, imammedo@redhat.com, sam.bobroff@au1.ibm.com,\n\tDavid Gibson <david@gibson.dropbear.id.au>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"},"content":"From: Greg Kurz <groug@kaod.org>\n\nKVM PR doesn't allow to set a compat mode. This causes ppc_set_compat_all()\nto fail and we return H_HARDWARE to the guest right away.\n\nThis is excessive: even if we favor compat mode since commit 152ef803ceb19,\nwe should at least fallback to raw mode if the guest supports it.\n\nThis patch modifies cas_check_pvr() so that it also reports that the real\nPVR was found in the table supplied by the guest. Note that this is only\nmakes sense if raw mode isn't explicitely disabled (ie, the user didn't\nset the machine \"max-cpu-compat\" property). If this is the case, we can\nsimply ignore ppc_set_compat_all() failures, and let the guest run in raw\nmode.\n\nSigned-off-by: Greg Kurz <groug@kaod.org>\nSigned-off-by: David Gibson <david@gibson.dropbear.id.au>\n---\n hw/ppc/spapr_hcall.c | 18 ++++++++++++++----\n 1 file changed, 14 insertions(+), 4 deletions(-)","diff":"diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c\nindex 7cf0993800..8b3c0e17e7 100644\n--- a/hw/ppc/spapr_hcall.c\n+++ b/hw/ppc/spapr_hcall.c\n@@ -1441,7 +1441,8 @@ static target_ulong h_signal_sys_reset(PowerPCCPU *cpu,\n }\n \n static uint32_t cas_check_pvr(sPAPRMachineState *spapr, PowerPCCPU *cpu,\n-                              target_ulong *addr, Error **errp)\n+                              target_ulong *addr, bool *raw_mode_supported,\n+                              Error **errp)\n {\n     bool explicit_match = false; /* Matched the CPU's real PVR */\n     uint32_t max_compat = spapr->max_compat_pvr;\n@@ -1481,6 +1482,8 @@ static uint32_t cas_check_pvr(sPAPRMachineState *spapr, PowerPCCPU *cpu,\n         return 0;\n     }\n \n+    *raw_mode_supported = explicit_match;\n+\n     /* Parsing finished */\n     trace_spapr_cas_pvr(cpu->compat_pvr, explicit_match, best_compat);\n \n@@ -1499,8 +1502,9 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,\n     sPAPROptionVector *ov1_guest, *ov5_guest, *ov5_cas_old, *ov5_updates;\n     bool guest_radix;\n     Error *local_err = NULL;\n+    bool raw_mode_supported = false;\n \n-    cas_pvr = cas_check_pvr(spapr, cpu, &addr, &local_err);\n+    cas_pvr = cas_check_pvr(spapr, cpu, &addr, &raw_mode_supported, &local_err);\n     if (local_err) {\n         error_report_err(local_err);\n         return H_HARDWARE;\n@@ -1510,8 +1514,14 @@ static target_ulong h_client_architecture_support(PowerPCCPU *cpu,\n     if (cpu->compat_pvr != cas_pvr) {\n         ppc_set_compat_all(cas_pvr, &local_err);\n         if (local_err) {\n-            error_report_err(local_err);\n-            return H_HARDWARE;\n+            /* We fail to set compat mode (likely because running with KVM PR),\n+             * but maybe we can fallback to raw mode if the guest supports it.\n+             */\n+            if (!raw_mode_supported) {\n+                error_report_err(local_err);\n+                return H_HARDWARE;\n+            }\n+            local_err = NULL;\n         }\n     }\n \n","prefixes":["PULL","30/40"]}