From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757286AbdJLNjn (ORCPT ); Thu, 12 Oct 2017 09:39:43 -0400 Received: from mx1.redhat.com ([209.132.183.28]:52332 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753395AbdJLNjl (ORCPT ); Thu, 12 Oct 2017 09:39:41 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 860047F405 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=vkuznets@redhat.com From: Vitaly Kuznetsov To: kys@exchange.microsoft.com Cc: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, devel@linuxdriverproject.org, olaf@aepfle.de, apw@canonical.com, jasowang@redhat.com, leann.ogasawara@canonical.com, marcelo.cerri@canonical.com, sthemmin@microsoft.com, kys@microsoft.com Subject: Re: [PATCH 3/3] Drivers: hv: vmbus: Make pannic reporting to be more useful References: <20171006003359.24370-1-kys@exchange.microsoft.com> <20171006003506.24444-1-kys@exchange.microsoft.com> <20171006003506.24444-3-kys@exchange.microsoft.com> Date: Thu, 12 Oct 2017 15:39:37 +0200 In-Reply-To: <20171006003506.24444-3-kys@exchange.microsoft.com> (kys@exchange.microsoft.com's message of "Thu, 5 Oct 2017 17:35:06 -0700") Message-ID: <87vajkcwo6.fsf@vitty.brq.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 12 Oct 2017 13:39:41 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org kys@exchange.microsoft.com writes: > From: "K. Y. Srinivasan" > > Hyper-V allows the guest to report panic and the guest can pass additional > information. All this is logged on the host. Currently Linux is passing back > information that is not particularly useful. Make the following changes: > > 1. Windows uses crash MSR P0 to report bugcheck code. Follow the same > convention for Linux as well. > 2. It will be useful to know the gust ID of the Linux guest that has > paniced. Pass back this information. > > These changes will help in better supporting Linux on Hyper-V > > Signed-off-by: K. Y. Srinivasan > --- > arch/x86/hyperv/hv_init.c | 11 +++++++---- > arch/x86/include/asm/mshyperv.h | 2 +- > drivers/hv/vmbus_drv.c | 4 ++-- > 3 files changed, 10 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c > index 1a8eb550c40f..cc30a094fb7c 100644 > --- a/arch/x86/hyperv/hv_init.c > +++ b/arch/x86/hyperv/hv_init.c > @@ -205,9 +205,10 @@ void hyperv_cleanup(void) > } > EXPORT_SYMBOL_GPL(hyperv_cleanup); > > -void hyperv_report_panic(struct pt_regs *regs) > +void hyperv_report_panic(struct pt_regs *regs, long err) > { > static bool panic_reported; > + u64 guest_id; > > /* > * We prefer to report panic on 'die' chain as we have proper > @@ -218,9 +219,11 @@ void hyperv_report_panic(struct pt_regs *regs) > return; > panic_reported = true; > > - wrmsrl(HV_X64_MSR_CRASH_P0, regs->ip); > - wrmsrl(HV_X64_MSR_CRASH_P1, regs->ax); > - wrmsrl(HV_X64_MSR_CRASH_P2, regs->bx); > + rdmsrl(HV_X64_MSR_GUEST_OS_ID, guest_id); > + > + wrmsrl(HV_X64_MSR_CRASH_P0, err); > + wrmsrl(HV_X64_MSR_CRASH_P1, guest_id); This is a constant we write in hyperv_init() (0x810000040e000000 for Linux guests). Do I get it right that we need this to basically distinguigh Windows guests crashes from Linux guest crashes in the log? > + wrmsrl(HV_X64_MSR_CRASH_P2, regs->ip); > wrmsrl(HV_X64_MSR_CRASH_P3, regs->cx); > wrmsrl(HV_X64_MSR_CRASH_P4, regs->dx); We don't write ax and bx any more but write cx and dx. Not that I see these regs really useful in the log but I'd change these to ax and bx for consistency. Or mayme make it sp and ax? > > diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h > index 63cc96f064dc..dd2dc54ddf20 100644 > --- a/arch/x86/include/asm/mshyperv.h > +++ b/arch/x86/include/asm/mshyperv.h > @@ -311,7 +311,7 @@ static inline int hv_cpu_number_to_vp_number(int cpu_number) > void hyperv_init(void); > void hyperv_setup_mmu_ops(void); > void hyper_alloc_mmu(void); > -void hyperv_report_panic(struct pt_regs *regs); > +void hyperv_report_panic(struct pt_regs *regs, long err); > bool hv_is_hypercall_page_setup(void); > void hyperv_cleanup(void); > #else /* CONFIG_HYPERV */ > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > index e8cd19095212..852f6c628836 100644 > --- a/drivers/hv/vmbus_drv.c > +++ b/drivers/hv/vmbus_drv.c > @@ -65,7 +65,7 @@ static int hyperv_panic_event(struct notifier_block *nb, unsigned long val, > > regs = current_pt_regs(); > > - hyperv_report_panic(regs); > + hyperv_report_panic(regs, val); > return NOTIFY_DONE; > } > > @@ -75,7 +75,7 @@ static int hyperv_die_event(struct notifier_block *nb, unsigned long val, > struct die_args *die = (struct die_args *)args; > struct pt_regs *regs = die->regs; > > - hyperv_report_panic(regs); > + hyperv_report_panic(regs, val); > return NOTIFY_DONE; > } -- Vitaly