From: Michael Kelley <mikelley@microsoft.com> To: will@kernel.org, catalin.marinas@arm.com, mark.rutland@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-efi@vger.kernel.org, wei.liu@kernel.org, kys@microsoft.com, sthemmin@microsoft.com, ardb@kernel.org Cc: mikelley@microsoft.com Subject: [PATCH v12 2/5] arm64: hyperv: Add panic handler Date: Wed, 4 Aug 2021 08:52:36 -0700 [thread overview] Message-ID: <1628092359-61351-3-git-send-email-mikelley@microsoft.com> (raw) In-Reply-To: <1628092359-61351-1-git-send-email-mikelley@microsoft.com> Add a function to inform Hyper-V about a guest panic. This code is built only when CONFIG_HYPERV is enabled. Signed-off-by: Michael Kelley <mikelley@microsoft.com> Reviewed-by: Sunil Muthuswamy <sunilmut@microsoft.com> Reviewed-by: Boqun Feng <boqun.feng@gmail.com> Acked-by: Marc Zyngier <maz@kernel.org> Acked-by: Mark Rutland <mark.rutland@arm.com> --- arch/arm64/hyperv/hv_core.c | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/arch/arm64/hyperv/hv_core.c b/arch/arm64/hyperv/hv_core.c index 4c5dc0f..b54c347 100644 --- a/arch/arm64/hyperv/hv_core.c +++ b/arch/arm64/hyperv/hv_core.c @@ -127,3 +127,55 @@ u64 hv_get_vpreg(u32 msr) return output.as64.low; } EXPORT_SYMBOL_GPL(hv_get_vpreg); + +/* + * hyperv_report_panic - report a panic to Hyper-V. This function uses + * the older version of the Hyper-V interface that admittedly doesn't + * pass enough information to be useful beyond just recording the + * occurrence of a panic. The parallel hv_kmsg_dump() uses the + * new interface that allows reporting 4 Kbytes of data, which is much + * more useful. Hyper-V on ARM64 always supports the newer interface, but + * we retain support for the older version because the sysadmin is allowed + * to disable the newer version via sysctl in case of information security + * concerns about the more verbose version. + */ +void hyperv_report_panic(struct pt_regs *regs, long err, bool in_die) +{ + static bool panic_reported; + u64 guest_id; + + /* Don't report a panic to Hyper-V if we're not going to panic */ + if (in_die && !panic_on_oops) + return; + + /* + * We prefer to report panic on 'die' chain as we have proper + * registers to report, but if we miss it (e.g. on BUG()) we need + * to report it on 'panic'. + * + * Calling code in the 'die' and 'panic' paths ensures that only + * one CPU is running this code, so no atomicity is needed. + */ + if (panic_reported) + return; + panic_reported = true; + + guest_id = hv_get_vpreg(HV_REGISTER_GUEST_OSID); + + /* + * Hyper-V provides the ability to store only 5 values. + * Pick the passed in error value, the guest_id, the PC, + * and the SP. + */ + hv_set_vpreg(HV_REGISTER_CRASH_P0, err); + hv_set_vpreg(HV_REGISTER_CRASH_P1, guest_id); + hv_set_vpreg(HV_REGISTER_CRASH_P2, regs->pc); + hv_set_vpreg(HV_REGISTER_CRASH_P3, regs->sp); + hv_set_vpreg(HV_REGISTER_CRASH_P4, 0); + + /* + * Let Hyper-V know there is crash data available + */ + hv_set_vpreg(HV_REGISTER_CRASH_CTL, HV_CRASH_CTL_CRASH_NOTIFY); +} +EXPORT_SYMBOL_GPL(hyperv_report_panic); -- 1.8.3.1
next prev parent reply other threads:[~2021-08-04 15:53 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-08-04 15:52 [PATCH v12 0/5] Enable Linux guests on Hyper-V on ARM64 Michael Kelley 2021-08-04 15:52 ` [PATCH v12 1/5] arm64: hyperv: Add Hyper-V hypercall and register access utilities Michael Kelley 2021-08-04 15:52 ` Michael Kelley [this message] 2021-08-04 15:52 ` [PATCH v12 3/5] arm64: hyperv: Initialize hypervisor on boot Michael Kelley 2021-08-04 15:52 ` [PATCH v12 4/5] arm64: efi: Export screen_info Michael Kelley 2021-08-04 15:52 ` [PATCH v12 5/5] Drivers: hv: Enable Hyper-V code to be built on ARM64 Michael Kelley 2021-08-04 16:10 ` Catalin Marinas 2021-08-04 16:40 ` Wei Liu 2021-08-04 16:43 ` Michael Kelley 2021-08-04 16:25 ` [PATCH v12 0/5] Enable Linux guests on Hyper-V " Catalin Marinas 2021-08-04 16:37 ` Wei Liu 2021-08-04 16:39 ` Michael Kelley 2021-08-04 16:43 ` Catalin Marinas 2021-08-04 16:58 ` Wei Liu
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1628092359-61351-3-git-send-email-mikelley@microsoft.com \ --to=mikelley@microsoft.com \ --cc=ardb@kernel.org \ --cc=catalin.marinas@arm.com \ --cc=kys@microsoft.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-efi@vger.kernel.org \ --cc=linux-hyperv@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=sthemmin@microsoft.com \ --cc=wei.liu@kernel.org \ --cc=will@kernel.org \ --subject='Re: [PATCH v12 2/5] arm64: hyperv: Add panic handler' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).