From nobody Tue Feb 10 08:28:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1687873689; cv=none; d=zohomail.com; s=zohoarc; b=NsXaSvojBa1WLFWKHgbXwML72QDYLViMabE5OkVmqx0QHIPkX+8M+7QxI9TwzBnFk5BuzIt+T5ewbJYXvO5lBQqxoRcNSy2yuXjVZSlp3lohby+Kfyp55OVvX4oxqqGOivpaXbezH0IiQl9VUdQEZQXcCEpx9kepGprTo9ofVLE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687873689; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=zOoc6xClBLtTPdseM08r+kt7dnVw71jVnxQs7RekJek=; b=ZaUIm+rsx83B72esURFxxfeYHVYT6Mv8OKZdkwGz+6qLAynMdWlA4woy/hR9D0O73dzFBam8NowhiznPWQUSdcW5sI7IuQf0U8Qd/+UZpOiKpmVzolDSCW4L4vDDj+7rnriTrNAa/WzUbVFRYZMuibxPTi7aiVmbuyfvlN451Vk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1687873689874650.9321981093412; Tue, 27 Jun 2023 06:48:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qE92F-0005Uc-NC; Tue, 27 Jun 2023 09:47:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qE92E-0005Rs-E6; Tue, 27 Jun 2023 09:47:10 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qE92B-0001JU-AU; Tue, 27 Jun 2023 09:47:10 -0400 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-666e6541c98so4431980b3a.2; Tue, 27 Jun 2023 06:47:06 -0700 (PDT) Received: from wheely.local0.net (193-116-109-121.tpgi.com.au. [193.116.109.121]) by smtp.gmail.com with ESMTPSA id d9-20020a63f249000000b0051eff0a70d7sm5741384pgk.94.2023.06.27.06.47.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Jun 2023 06:47:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687873625; x=1690465625; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zOoc6xClBLtTPdseM08r+kt7dnVw71jVnxQs7RekJek=; b=nvWyBNBF/b33TekCNkRSIdHZJIJIkZ7GszZbX47z942E6xJhYAlG9kf36SUVRgS/XP 9HliRPIyGgJ79h15gWk39Jojny4tt7ricIR9KDmCAbhtGYl71ctZSplG7yKMdDqgokib LB/4qA81jidt3tKXX9w7ZNXt1S8KBRx7oKYhNw9ak+vnxqBuB/WkJGV8M9KMZrWiPzZT i6HiEuS9lBSLCL4rydyWU4geCXe58Jxd+KBUqjrr119gZb6KFWjdaQAu5SUfMyKz8Eyu O/kFrvSX0nGsn1aMPV/MxOu6uCA9ISR6h+5PvUsz9NegicVFnIaJ9iBs+bHoAOAYnhe9 1nPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687873625; x=1690465625; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zOoc6xClBLtTPdseM08r+kt7dnVw71jVnxQs7RekJek=; b=cszWDpDy4P2jDkpPlDqUiEvcdlLvflASZOl6gWrk5zmybQ5k4/6yEqPzEwSf8s3D47 DutDH06Ec87XT9xXc2zC5x+PCbbEIOjU7lHWSBspRZDLGTwg/9pYuMqTvk82h7Xpik+a a7jKkS3i9hpCbXa6PlCNwqxnsL6GkK44Nbv/a82Dfb/Jzs0VAzjZdtizKYl8VbSjLTzB itrFMvm0RTYfnRhOKXRtcpjPp3uqDWPSsmqpOO9NZddaVe8DF9/ify+Q5kyui4lJkBGs E5ACym+yMgypmipQY81/StDbW9MqxE/fI7NVCe31wN1XhhcGae0DkqPNetN3sYxh+qGS 5H0g== X-Gm-Message-State: AC+VfDyxWH19Os+iEWx/fnuiq1Pe9eQcDp7vsDODSHvrWMFkUGAdsCvl 7lIScn9S8bOvoW0Lq2AP/hSnlxxJuiY= X-Google-Smtp-Source: ACHHUZ7/ZcKC7sF+IP7p5VSuKlRH4YYGb7x0lnN9hKT+Pd4yv0wUTF5AAitVfroZZB28W8tgQ2ZNgg== X-Received: by 2002:a05:6a20:7f93:b0:118:eeef:2a25 with SMTP id d19-20020a056a207f9300b00118eeef2a25mr46741511pzj.34.1687873625163; Tue, 27 Jun 2023 06:47:05 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , qemu-ppc@nongnu.org, Daniel Henrique Barboza , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , David Gibson , Greg Kurz , Harsh Prateek Bora Subject: [PATCH v2 1/4] target/ppc: Machine check on invalid real address access on POWER9/10 Date: Tue, 27 Jun 2023 23:46:41 +1000 Message-Id: <20230627134644.260663-2-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230627134644.260663-1-npiggin@gmail.com> References: <20230627134644.260663-1-npiggin@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=npiggin@gmail.com; helo=mail-pf1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1687873691676100002 Content-Type: text/plain; charset="utf-8" ppc currently silently accepts invalid real address access. Catch these and turn them into machine checks on POWER9/10 machines. Signed-off-by: Nicholas Piggin --- Since v1: - Only implement this for POWER9/10. Seems like previous IBM processors may not catch this after all, trying to get info. target/ppc/cpu_init.c | 1 + target/ppc/excp_helper.c | 49 ++++++++++++++++++++++++++++++++++++++++ target/ppc/internal.h | 5 ++++ 3 files changed, 55 insertions(+) diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c index aeff71d063..a97fb7fe10 100644 --- a/target/ppc/cpu_init.c +++ b/target/ppc/cpu_init.c @@ -7295,6 +7295,7 @@ static const struct TCGCPUOps ppc_tcg_ops =3D { .cpu_exec_enter =3D ppc_cpu_exec_enter, .cpu_exec_exit =3D ppc_cpu_exec_exit, .do_unaligned_access =3D ppc_cpu_do_unaligned_access, + .do_transaction_failed =3D ppc_cpu_do_transaction_failed, #endif /* !CONFIG_USER_ONLY */ }; #endif /* CONFIG_TCG */ diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 2158390e27..13318fbbb9 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -1493,7 +1493,9 @@ static void powerpc_excp_books(PowerPCCPU *cpu, int e= xcp) /* machine check exceptions don't have ME set */ new_msr &=3D ~((target_ulong)1 << MSR_ME); =20 + msr |=3D env->error_code; break; + case POWERPC_EXCP_DSI: /* Data storage exception = */ trace_ppc_excp_dsi(env->spr[SPR_DSISR], env->spr[SPR_DAR]); break; @@ -3253,5 +3255,52 @@ void ppc_cpu_do_unaligned_access(CPUState *cs, vaddr= vaddr, env->error_code =3D insn & 0x03FF0000; cpu_loop_exit(cs); } + +void ppc_cpu_do_transaction_failed(CPUState *cs, hwaddr physaddr, + vaddr vaddr, unsigned size, + MMUAccessType access_type, + int mmu_idx, MemTxAttrs attrs, + MemTxResult response, uintptr_t retaddr) +{ + CPUPPCState *env =3D cs->env_ptr; + + switch (env->excp_model) { +#if defined(TARGET_PPC64) + case POWERPC_EXCP_POWER9: + case POWERPC_EXCP_POWER10: + /* + * Machine check codes can be found in User Manual or Linux or + * skiboot source. + */ + if (access_type =3D=3D MMU_DATA_LOAD) { + env->spr[SPR_DAR] =3D vaddr; + env->spr[SPR_DSISR] =3D PPC_BIT(57); + env->error_code =3D PPC_BIT(42); + + } else if (access_type =3D=3D MMU_DATA_STORE) { + /* + * MCE for stores in POWER is asynchronous so hardware does + * not set DAR, but QEMU can do better. + */ + env->spr[SPR_DAR] =3D vaddr; + env->error_code =3D PPC_BIT(36) | PPC_BIT(43) | PPC_BIT(45); + env->error_code |=3D PPC_BIT(42); + } else { /* Fetch */ + + env->error_code =3D PPC_BIT(36) | PPC_BIT(44) | PPC_BIT(45); + } + break; +#endif + default: + /* + * TODO: Check behaviour for other CPUs, for now do nothing. + * Could add a basic MCE even if real hardware ignores. + */ + return; + } + + cs->exception_index =3D POWERPC_EXCP_MCHECK; + cpu_loop_exit_restore(cs, retaddr); +} #endif /* CONFIG_TCG */ #endif /* !CONFIG_USER_ONLY */ diff --git a/target/ppc/internal.h b/target/ppc/internal.h index 901bae6d39..57acb3212c 100644 --- a/target/ppc/internal.h +++ b/target/ppc/internal.h @@ -296,6 +296,11 @@ bool ppc_cpu_tlb_fill(CPUState *cs, vaddr address, int= size, G_NORETURN void ppc_cpu_do_unaligned_access(CPUState *cs, vaddr addr, MMUAccessType access_type, int= mmu_idx, uintptr_t retaddr); +void ppc_cpu_do_transaction_failed(CPUState *cs, hwaddr physaddr, + vaddr addr, unsigned size, + MMUAccessType access_type, + int mmu_idx, MemTxAttrs attrs, + MemTxResult response, uintptr_t retaddr= ); #endif =20 FIELD(GER_MSK, XMSK, 0, 4) --=20 2.40.1 From nobody Tue Feb 10 08:28:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1687873672; cv=none; d=zohomail.com; s=zohoarc; b=Sep6vibIH2BqnV8PC1HowPJvcpavyieE1cA7ymmNE/xcMk0Mm/uMQCoqAAjdXc3AtRtCMaBU+cX6nLFaPn5NTDQuyRYdB9cEVrEgoU2zbl7LffkWt4yK5Ui9/MmoXS/gXzC8r34wbD6+NeT98pH3Fh2FltcoBvqyh31qZ7R4CAk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687873672; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=4uQb/Fa9vHAGdeJPTXfK/VciCluvLl/3OTOc5Nw4Q7I=; b=IgvYq/QMGVcZCvdOAcyM1kgPI35h15oEnYAYr2SMNcGL8owAuYiksi8YQYi3riSXpW4D+vQsxg0SfEIRrETpAn43rgrMt6jA6PoQ5A746UqqoY9CjewYTnxKzIOeWETYl0jOpjdvHePrQqhOFc6ZQaEwaCLtxTyBh56rM5o5jp4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1687873672963441.55107646194597; Tue, 27 Jun 2023 06:47:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qE92P-0005WC-EZ; Tue, 27 Jun 2023 09:47:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qE92I-0005VK-4R; Tue, 27 Jun 2023 09:47:14 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qE92G-0001Jv-99; Tue, 27 Jun 2023 09:47:13 -0400 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-666ecf9a081so4152538b3a.2; Tue, 27 Jun 2023 06:47:11 -0700 (PDT) Received: from wheely.local0.net (193-116-109-121.tpgi.com.au. [193.116.109.121]) by smtp.gmail.com with ESMTPSA id d9-20020a63f249000000b0051eff0a70d7sm5741384pgk.94.2023.06.27.06.47.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Jun 2023 06:47:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687873630; x=1690465630; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4uQb/Fa9vHAGdeJPTXfK/VciCluvLl/3OTOc5Nw4Q7I=; b=RcslbAx+j60Kl6BJLkruBKCgyfhdDBPogUza2jlN/MqovlG0DJ/A14RUBN2BMpGCq9 /6KSjX1WV/AbybFsoo52sZ664v8ugmpSaRrfxJl295zi4wMardhkBIOMljIhdSKP58U1 wot3nElTZUWjesrUsRxAYpBG9tUfhytk9L46OZlpV5KFiDgG6JrEJ6SkREu0K6Id7amh 3u0HoOid4qnLiRbfs4HT0x9q1TCamL9321J3Tcmo757YQZuH8eMQEm0Jumjo2Amehy6u dMpLUbOnXilFmWabobuYam175smM7Bn7ZgH3i4/xWZiInXLe7+3Iq1L8z7jf+JRKzf0p NkTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687873630; x=1690465630; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4uQb/Fa9vHAGdeJPTXfK/VciCluvLl/3OTOc5Nw4Q7I=; b=UUip5+IA6h9nz6P0dS9kj2rMqudfYlHURo86MHEpl3/QtleZIX3sUkmcnzRL0c53Ba 8H3MXBfmbrpo8ZvOkoc/U5Ur3ceWmdmTHlZFeX/07ErO9HwWfmqQPvRYHWkOGTIMfN0V mqW7fajI4waCroh0pTvoa0QOzAxxWTCYf7WY+odNtHPGY54dxr2lfnOUQ4F60NdLFekf BV8eNJ82aNayKY7wy1tvAtDspd1t7t7NvKyzJhowXwGOJaQMrMnF6cz7GJJq8EQ953i4 6CFmv3OXTWeFkQ7D2RzVDLEMxnTukHP497sWwiObQnxh+kbY+pui/3+/cyWSezUiEJNi GBNQ== X-Gm-Message-State: AC+VfDx4RwuhpTzZjqAaBVrT5PhRHaPvEX02iB+8wq/ApXSXRetRvOpj 6t2LcDhjegu1FZulYdzMHkaskQxqL8g= X-Google-Smtp-Source: ACHHUZ6RD5ksLhP/6zzMqrrTTPkoRKkN0mevvnPmdS4gOQ/QHnjy4ykoeRlZ9Ippjo7cuAkTPXIl7A== X-Received: by 2002:a05:6a00:1783:b0:674:ff6d:1b39 with SMTP id s3-20020a056a00178300b00674ff6d1b39mr8713215pfg.9.1687873630214; Tue, 27 Jun 2023 06:47:10 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , qemu-ppc@nongnu.org, Daniel Henrique Barboza , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , David Gibson , Greg Kurz , Harsh Prateek Bora , BALATON Zoltan Subject: [PATCH v2 2/4] target/ppc: Move common check in machine check handlers to a function Date: Tue, 27 Jun 2023 23:46:42 +1000 Message-Id: <20230627134644.260663-3-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230627134644.260663-1-npiggin@gmail.com> References: <20230627134644.260663-1-npiggin@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42a; envelope-from=npiggin@gmail.com; helo=mail-pf1-x42a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1687873673916100005 Content-Type: text/plain; charset="utf-8" From: BALATON Zoltan All powerpc exception handlers share some code when handling machine check exceptions. Move this to a common function. Reviewed-by: Nicholas Piggin Signed-off-by: BALATON Zoltan [np: adapted to make checkstop generally usable] Signed-off-by-by: Nicholas Piggin --- Since v1: - Adjusted to avoid additional trivial wrapper function when making checkstop usable by other callers. target/ppc/excp_helper.c | 98 +++++++++------------------------------- 1 file changed, 21 insertions(+), 77 deletions(-) diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 13318fbbb9..5beda973ce 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -186,6 +186,21 @@ static void ppc_excp_debug_sw_tlb(CPUPPCState *env, in= t excp) env->error_code); } =20 +static void powerpc_checkstop(CPUPPCState *env) +{ + CPUState *cs =3D env_cpu(env); + + /* Machine check exception is not enabled. Enter checkstop state. */ + fprintf(stderr, "Machine check while not allowed. " + "Entering checkstop state\n"); + if (qemu_log_separate()) { + qemu_log("Machine check while not allowed. " + "Entering checkstop state\n"); + } + cs->halted =3D 1; + cpu_interrupt_exittb(cs); +} + #if defined(TARGET_PPC64) static int powerpc_reset_wakeup(CPUState *cs, CPUPPCState *env, int excp, target_ulong *msr) @@ -468,20 +483,8 @@ static void powerpc_excp_40x(PowerPCCPU *cpu, int excp) break; case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - /* - * Machine check exception is not enabled. Enter - * checkstop state. - */ - fprintf(stderr, "Machine check while not allowed. " - "Entering checkstop state\n"); - if (qemu_log_separate()) { - qemu_log("Machine check while not allowed. " - "Entering checkstop state\n"); - } - cs->halted =3D 1; - cpu_interrupt_exittb(cs); + powerpc_checkstop(env); } - /* machine check exceptions don't have ME set */ new_msr &=3D ~((target_ulong)1 << MSR_ME); =20 @@ -599,20 +602,8 @@ static void powerpc_excp_6xx(PowerPCCPU *cpu, int excp) break; case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - /* - * Machine check exception is not enabled. Enter - * checkstop state. - */ - fprintf(stderr, "Machine check while not allowed. " - "Entering checkstop state\n"); - if (qemu_log_separate()) { - qemu_log("Machine check while not allowed. " - "Entering checkstop state\n"); - } - cs->halted =3D 1; - cpu_interrupt_exittb(cs); + powerpc_checkstop(env); } - /* machine check exceptions don't have ME set */ new_msr &=3D ~((target_ulong)1 << MSR_ME); =20 @@ -772,20 +763,8 @@ static void powerpc_excp_7xx(PowerPCCPU *cpu, int excp) switch (excp) { case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - /* - * Machine check exception is not enabled. Enter - * checkstop state. - */ - fprintf(stderr, "Machine check while not allowed. " - "Entering checkstop state\n"); - if (qemu_log_separate()) { - qemu_log("Machine check while not allowed. " - "Entering checkstop state\n"); - } - cs->halted =3D 1; - cpu_interrupt_exittb(cs); + powerpc_checkstop(env); } - /* machine check exceptions don't have ME set */ new_msr &=3D ~((target_ulong)1 << MSR_ME); =20 @@ -957,20 +936,8 @@ static void powerpc_excp_74xx(PowerPCCPU *cpu, int exc= p) switch (excp) { case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - /* - * Machine check exception is not enabled. Enter - * checkstop state. - */ - fprintf(stderr, "Machine check while not allowed. " - "Entering checkstop state\n"); - if (qemu_log_separate()) { - qemu_log("Machine check while not allowed. " - "Entering checkstop state\n"); - } - cs->halted =3D 1; - cpu_interrupt_exittb(cs); + powerpc_checkstop(env); } - /* machine check exceptions don't have ME set */ new_msr &=3D ~((target_ulong)1 << MSR_ME); =20 @@ -1152,20 +1119,8 @@ static void powerpc_excp_booke(PowerPCCPU *cpu, int = excp) break; case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - /* - * Machine check exception is not enabled. Enter - * checkstop state. - */ - fprintf(stderr, "Machine check while not allowed. " - "Entering checkstop state\n"); - if (qemu_log_separate()) { - qemu_log("Machine check while not allowed. " - "Entering checkstop state\n"); - } - cs->halted =3D 1; - cpu_interrupt_exittb(cs); + powerpc_checkstop(env); } - /* machine check exceptions don't have ME set */ new_msr &=3D ~((target_ulong)1 << MSR_ME); =20 @@ -1469,18 +1424,7 @@ static void powerpc_excp_books(PowerPCCPU *cpu, int = excp) switch (excp) { case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - /* - * Machine check exception is not enabled. Enter - * checkstop state. - */ - fprintf(stderr, "Machine check while not allowed. " - "Entering checkstop state\n"); - if (qemu_log_separate()) { - qemu_log("Machine check while not allowed. " - "Entering checkstop state\n"); - } - cs->halted =3D 1; - cpu_interrupt_exittb(cs); + powerpc_checkstop(env); } if (env->msr_mask & MSR_HVB) { /* --=20 2.40.1 From nobody Tue Feb 10 08:28:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1687873729; cv=none; d=zohomail.com; s=zohoarc; b=GM7c79axoh5jz3ny6tBv9t0TiwVL/uCJkm6NJkVm1jveO6ut1/3hl1j8QVMR5T1bvTu3xNFIEnwQQ7mFnT+ObRlSUn1el8FV7lWBlVCoKzu5noCz9fBjL/dvwRGxqgJgHefhjOJSm+DwrJbVDmMAWG791dVv/XWTcdSlZEXupC0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687873729; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HHM7lQ1CxTswl5wS4KtHJQCjIkcqUSymVrzuiruH8XM=; b=aLk3zTVArROcFjoH7uXKuta/o90RgSgmbG6/sTeYhxdYBTMl8TePaCOd5L6qHN5c82HtEhiYA1V0bXCSX3ciZs770gjAbHjmkdWLAC2wrPr7In5pt6D0khtauLqanuUZ2JXTUM8WZvlFlPgUAj/vuvAXYDLgqEqFhxnuJlbNoCk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1687873729225280.6830252126367; Tue, 27 Jun 2023 06:48:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qE92R-0005Yw-6j; Tue, 27 Jun 2023 09:47:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qE92M-0005Vg-5L; Tue, 27 Jun 2023 09:47:21 -0400 Received: from mail-il1-x12a.google.com ([2607:f8b0:4864:20::12a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qE92K-0001Kf-FW; Tue, 27 Jun 2023 09:47:17 -0400 Received: by mail-il1-x12a.google.com with SMTP id e9e14a558f8ab-3457a3ada84so19119865ab.1; Tue, 27 Jun 2023 06:47:15 -0700 (PDT) Received: from wheely.local0.net (193-116-109-121.tpgi.com.au. [193.116.109.121]) by smtp.gmail.com with ESMTPSA id d9-20020a63f249000000b0051eff0a70d7sm5741384pgk.94.2023.06.27.06.47.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Jun 2023 06:47:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687873634; x=1690465634; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HHM7lQ1CxTswl5wS4KtHJQCjIkcqUSymVrzuiruH8XM=; b=Ix9t+4Iqv+Ivp6WmqrSBufFYG7/mYacCUWtwUZrE8TXpj3Vace76UIpBhBTd9kbLoJ +i118kYcsO0HN5EDsSNl1+L6OBNrchw7idfovth1enOkCZxE3mRq8LxdtGdh3XaF34Ee 1/VEDbLPhodKx+1SegKF5RWHpuM9uYvKfYi2JUV23DYuq9BnnBsIsltgmwwIL/1R5feT r71chtVyJlw7d+zcYnQxqOc2ZKpo0X3C3HVhXyFX81saIpsSdG60MJskRqQGOByAwUlF +DFPxe00ikGM5HaI2XX9CQudeSrrK/Y0lqGdTZrZ6pseOts+P3e80LlonzZHpZMxl9zm l9NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687873634; x=1690465634; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HHM7lQ1CxTswl5wS4KtHJQCjIkcqUSymVrzuiruH8XM=; b=f2Ytu7oQ0whASdC0JqQ8JFPC3eBILoUPCjj8QvMBzAB01iS3eXfdNeT7SkuP2kSPUK aligfIY/E6Xf3P+dvWUkelY2UQNRExsJdUA1rH1vFwpnr/jyT5akix3pGnLG3n7uc91o scrhQPYkamLWAI1frWVYPjCDoFlgxbRvt+0BjH7xSxNeauixKs/WJPiF3HwlSD9aH0Hx l62Z8AKSvkoQo6Vk8l+uxnl+guIUpLkY+7I4Q/dr0huY8p4+TqAsaiOZUC+Tuf313WSZ NwgJ/oO1EITL2JajWqHbGmEu358i48KlaUdpuhORSKmkfaH/iEZn900Dsa+YkgzgQv1c Nkgg== X-Gm-Message-State: AC+VfDy2bRYqYFIUaeQHLWMzRmAq//lI1MjoNxvbV5ScNm0kd1Cpd70h W6+Lf+omyz5DciS9yEcw6jvGur9zkYc= X-Google-Smtp-Source: ACHHUZ52qllpJNLkqnFInduQVygXOG5zq0/Jl0E5b99eyyoeu9Cb7Hxj0Qg2JcK+1guwJjR3T6/sKw== X-Received: by 2002:a92:d184:0:b0:345:a201:82c0 with SMTP id z4-20020a92d184000000b00345a20182c0mr5973562ilz.32.1687873634528; Tue, 27 Jun 2023 06:47:14 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , qemu-ppc@nongnu.org, Daniel Henrique Barboza , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , David Gibson , Greg Kurz , Harsh Prateek Bora Subject: [PATCH v2 3/4] target/ppc: Make checkstop actually stop the system Date: Tue, 27 Jun 2023 23:46:43 +1000 Message-Id: <20230627134644.260663-4-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230627134644.260663-1-npiggin@gmail.com> References: <20230627134644.260663-1-npiggin@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::12a; envelope-from=npiggin@gmail.com; helo=mail-il1-x12a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1687873729871100003 Content-Type: text/plain; charset="utf-8" checkstop state does not halt the system, interrupts continue to be serviced, and other CPUs run. Stop the machine with vm_stop(), and print a register dump too. Signed-off-by: Nicholas Piggin --- Since v1: - Fix loop exit so it stops on the attn instruction, rather than after it. target/ppc/excp_helper.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 5beda973ce..28d8a9b212 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -19,6 +19,7 @@ #include "qemu/osdep.h" #include "qemu/main-loop.h" #include "qemu/log.h" +#include "sysemu/runstate.h" #include "cpu.h" #include "exec/exec-all.h" #include "internal.h" @@ -186,19 +187,24 @@ static void ppc_excp_debug_sw_tlb(CPUPPCState *env, i= nt excp) env->error_code); } =20 -static void powerpc_checkstop(CPUPPCState *env) +static void powerpc_checkstop(CPUPPCState *env, const char *reason) { CPUState *cs =3D env_cpu(env); =20 - /* Machine check exception is not enabled. Enter checkstop state. */ - fprintf(stderr, "Machine check while not allowed. " - "Entering checkstop state\n"); + vm_stop(RUN_STATE_GUEST_PANICKED); + + fprintf(stderr, "Entering checkstop state: %s\n", reason); + cpu_dump_state(cs, stderr, CPU_DUMP_FPU | CPU_DUMP_CCOP); if (qemu_log_separate()) { - qemu_log("Machine check while not allowed. " - "Entering checkstop state\n"); + FILE *logfile =3D qemu_log_trylock(); + if (logfile) { + fprintf(logfile, "Entering checkstop state: %s\n", reason); + cpu_dump_state(cs, logfile, CPU_DUMP_FPU | CPU_DUMP_CCOP); + qemu_log_unlock(logfile); + } } - cs->halted =3D 1; - cpu_interrupt_exittb(cs); + + cpu_loop_exit_noexc(cs); } =20 #if defined(TARGET_PPC64) @@ -483,7 +489,7 @@ static void powerpc_excp_40x(PowerPCCPU *cpu, int excp) break; case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - powerpc_checkstop(env); + powerpc_checkstop(env, "machine check with MSR[ME]=3D0"); } /* machine check exceptions don't have ME set */ new_msr &=3D ~((target_ulong)1 << MSR_ME); @@ -602,7 +608,7 @@ static void powerpc_excp_6xx(PowerPCCPU *cpu, int excp) break; case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - powerpc_checkstop(env); + powerpc_checkstop(env, "machine check with MSR[ME]=3D0"); } /* machine check exceptions don't have ME set */ new_msr &=3D ~((target_ulong)1 << MSR_ME); @@ -763,7 +769,7 @@ static void powerpc_excp_7xx(PowerPCCPU *cpu, int excp) switch (excp) { case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - powerpc_checkstop(env); + powerpc_checkstop(env, "machine check with MSR[ME]=3D0"); } /* machine check exceptions don't have ME set */ new_msr &=3D ~((target_ulong)1 << MSR_ME); @@ -936,7 +942,7 @@ static void powerpc_excp_74xx(PowerPCCPU *cpu, int excp) switch (excp) { case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - powerpc_checkstop(env); + powerpc_checkstop(env, "machine check with MSR[ME]=3D0"); } /* machine check exceptions don't have ME set */ new_msr &=3D ~((target_ulong)1 << MSR_ME); @@ -1119,7 +1125,7 @@ static void powerpc_excp_booke(PowerPCCPU *cpu, int e= xcp) break; case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - powerpc_checkstop(env); + powerpc_checkstop(env, "machine check with MSR[ME]=3D0"); } /* machine check exceptions don't have ME set */ new_msr &=3D ~((target_ulong)1 << MSR_ME); @@ -1424,7 +1430,7 @@ static void powerpc_excp_books(PowerPCCPU *cpu, int e= xcp) switch (excp) { case POWERPC_EXCP_MCHECK: /* Machine check exception = */ if (!FIELD_EX64(env->msr, MSR, ME)) { - powerpc_checkstop(env); + powerpc_checkstop(env, "machine check with MSR[ME]=3D0"); } if (env->msr_mask & MSR_HVB) { /* --=20 2.40.1 From nobody Tue Feb 10 08:28:06 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1687873671; cv=none; d=zohomail.com; s=zohoarc; b=AeX4INSmGKzn14C0V7GmYnv3C77/Jr4C5R3eKQ1RsTipWOHEHfCxlVujlKNVRwwmQP+7iqXLbrCbDZFcJXZfG3D4wzOe5bf4J/FxJZE9v18B7aBVMttY+h6rscZbxzhVbKCEWPNAjqnj6At7DPg4vrrwAzEWV7eWBzCe9rSA6tk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1687873671; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=DFElMOYREqTjCYiW7N54+HmzpRYUMsS3Lh2vU/TLQWM=; b=L/Ftb4iAC72CN5OBQfta7IebqHZ8MiveRFrku6G+btJytgdM0PYtQVRRCefVslvISS42HGe0HhbQ7lRXrXL7fcgwNq+dfmRBQ3WvsiGxApQ/qNBRBYCGfu9bNZ24sXRII9M9MDFMwKyfEeNGEsSYZPXAOMUBOAom19CtvdPHa34= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1687873671435865.8804092864937; Tue, 27 Jun 2023 06:47:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qE92S-0005b1-TL; Tue, 27 Jun 2023 09:47:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qE92Q-0005Yp-UG; Tue, 27 Jun 2023 09:47:22 -0400 Received: from mail-oi1-x231.google.com ([2607:f8b0:4864:20::231]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qE92P-0001LD-BP; Tue, 27 Jun 2023 09:47:22 -0400 Received: by mail-oi1-x231.google.com with SMTP id 5614622812f47-39ecf031271so4003370b6e.1; Tue, 27 Jun 2023 06:47:19 -0700 (PDT) Received: from wheely.local0.net (193-116-109-121.tpgi.com.au. [193.116.109.121]) by smtp.gmail.com with ESMTPSA id d9-20020a63f249000000b0051eff0a70d7sm5741384pgk.94.2023.06.27.06.47.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Jun 2023 06:47:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687873638; x=1690465638; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DFElMOYREqTjCYiW7N54+HmzpRYUMsS3Lh2vU/TLQWM=; b=T5uTDWEpoh/7bxjNniZaL9slXJdo2uLd7+AszawwGimTv7BzGVR/4SYTbUB9SgjFAL HqyGt/57Np9A00SMsDyPyHVE89Kup9bMv6ty3dh6J8pogeykoC6Dx/pbXELEOlWgTBUO h7l8riA1RmRbWpUPAwEqR8qd+oIA3VT/5uA2dbMzR/CRbmjR4b0DZV/Hz9m4w+tdM1Hk IuxpDZHl5G6Rx00esqIHHPJvoaD/Yf/ZqV9YSzN2zDaqrIeyynmK4+n448lCAAknQvjc 7h64haYTjvwury+VQs+6w0jllJjsSg0lHNvFBD5Vmds2cjure3ZICPhb+cez7hcmXWlc 1NLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687873638; x=1690465638; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DFElMOYREqTjCYiW7N54+HmzpRYUMsS3Lh2vU/TLQWM=; b=b693gBzvx0j+3Mo8vxRbBVwz0BxFCpBuleFTyBsmVGheTCuqLXNFW67KYw/wcVWci1 btVB5Q9RJk0MBwdrCpdna4wTuLvhXkNQta2IJ0ynKNOvkXqH9W2uQ2WQm6yJPEiyTMso Ew5XjAkTtSv+G0fWBx0Tj1RVNwr3IHlCLSw3XzOpQoC4viwbvi3brXoIlHCMe56S8Xkq Vv1gcnezXP2wRqes6UPzAi9YbrKzk37PScnT320MHY0fkfnYbpn4w1hYlb/QB3hWH9vz wT/PTbLA2I3AMvHhk1gGPcSQ93HLxxJII4WFuOIZMzgr/Q9t3v6nyzNNm3RybDEhInF5 6ALw== X-Gm-Message-State: AC+VfDxBSHsqlgh9NXricV7gy9MJnC3jgXniwFlju95S0ufa6HpGhwiu haARN56KQm3VaMAJSOdBThalhkTiQ5Q= X-Google-Smtp-Source: ACHHUZ4clIocSlcdRHKrZPBV1N9Rvov8RycMwGv23o0rtdjlzJW4dv+ht/appfpaiq6dM2TD2b/WOg== X-Received: by 2002:a05:6359:baa:b0:130:e60f:6b1d with SMTP id gf42-20020a0563590baa00b00130e60f6b1dmr19427179rwb.24.1687873638552; Tue, 27 Jun 2023 06:47:18 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , qemu-ppc@nongnu.org, Daniel Henrique Barboza , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , David Gibson , Greg Kurz , Harsh Prateek Bora Subject: [PATCH v2 4/4] target/ppc: Implement attn instruction on BookS 64-bit processors Date: Tue, 27 Jun 2023 23:46:44 +1000 Message-Id: <20230627134644.260663-5-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230627134644.260663-1-npiggin@gmail.com> References: <20230627134644.260663-1-npiggin@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::231; envelope-from=npiggin@gmail.com; helo=mail-oi1-x231.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1687873673648100001 Content-Type: text/plain; charset="utf-8" attn is an implementation-specific instruction that on POWER (and G5/ 970) can be enabled with a HID bit (disabled =3D illegal), and executing it causes the host processor to stop and the service processor to be notified. Generally used for debugging. Implement attn and make it checkstop the system, which should be good enough for QEMU debugging. Signed-off-by: Nicholas Piggin --- Since v1: - New patch that also uses checkstop function. Works with skiboot. target/ppc/cpu.h | 2 ++ target/ppc/excp_helper.c | 28 ++++++++++++++++++++++++++++ target/ppc/helper.h | 2 ++ target/ppc/translate.c | 7 +++++++ 4 files changed, 39 insertions(+) diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index 94497aa115..f6e93dec5f 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -2116,6 +2116,8 @@ void ppc_compat_add_property(Object *obj, const char = *name, #define HID0_NAP (1 << 22) /* pre-2.06 */ #define HID0_HILE PPC_BIT(19) /* POWER8 */ #define HID0_POWER9_HILE PPC_BIT(4) +#define HID0_ENABLE_ATTN PPC_BIT(31) /* POWER8 */ +#define HID0_POWER9_ENABLE_ATTN PPC_BIT(3) =20 /*************************************************************************= ****/ /* PowerPC Instructions types definitions = */ diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index 28d8a9b212..f46fdd2ee6 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -208,6 +208,34 @@ static void powerpc_checkstop(CPUPPCState *env, const = char *reason) } =20 #if defined(TARGET_PPC64) +void helper_attn(CPUPPCState *env) +{ + CPUState *cs =3D env_cpu(env); + target_ulong hid0_attn =3D 0; + + switch (env->excp_model) { + case POWERPC_EXCP_970: + case POWERPC_EXCP_POWER7: + case POWERPC_EXCP_POWER8: + hid0_attn =3D HID0_ENABLE_ATTN; + break; + case POWERPC_EXCP_POWER9: + case POWERPC_EXCP_POWER10: + hid0_attn =3D HID0_POWER9_ENABLE_ATTN; + break; + default: + break; + } + + if (env->spr[SPR_HID0] & hid0_attn) { + powerpc_checkstop(env, "host executed attn"); + cpu_loop_exit_noexc(cs); + } else { + raise_exception_err(env, POWERPC_EXCP_HV_EMU, + POWERPC_EXCP_INVAL | POWERPC_EXCP_INVAL_INVAL); + } +} + static int powerpc_reset_wakeup(CPUState *cs, CPUPPCState *env, int excp, target_ulong *msr) { diff --git a/target/ppc/helper.h b/target/ppc/helper.h index fda40b8a60..50bb105c08 100644 --- a/target/ppc/helper.h +++ b/target/ppc/helper.h @@ -812,3 +812,5 @@ DEF_HELPER_4(DSCLIQ, void, env, fprp, fprp, i32) =20 DEF_HELPER_1(tbegin, void, env) DEF_HELPER_FLAGS_1(fixup_thrm, TCG_CALL_NO_RWG, void, env) + +DEF_HELPER_1(attn, void, env) diff --git a/target/ppc/translate.c b/target/ppc/translate.c index 372ee600b2..4e9e606d77 100644 --- a/target/ppc/translate.c +++ b/target/ppc/translate.c @@ -6382,6 +6382,12 @@ static void gen_dform3D(DisasContext *ctx) } =20 #if defined(TARGET_PPC64) +/* attn */ +static void gen_attn(DisasContext *ctx) +{ + gen_helper_attn(cpu_env); +} + /* brd */ static void gen_brd(DisasContext *ctx) { @@ -6413,6 +6419,7 @@ static void gen_brh(DisasContext *ctx) =20 static opcode_t opcodes[] =3D { #if defined(TARGET_PPC64) +GEN_HANDLER_E(attn, 0x00, 0x00, 0x08, 0xFFFFFDFF, PPC_NONE, PPC2_ISA207S), GEN_HANDLER_E(brd, 0x1F, 0x1B, 0x05, 0x0000F801, PPC_NONE, PPC2_ISA310), GEN_HANDLER_E(brw, 0x1F, 0x1B, 0x04, 0x0000F801, PPC_NONE, PPC2_ISA310), GEN_HANDLER_E(brh, 0x1F, 0x1B, 0x06, 0x0000F801, PPC_NONE, PPC2_ISA310), --=20 2.40.1