On Wed, Jan 27, 2021 at 12:23:39PM -0800, Michael Kelley wrote: > With the new Hyper-V MSR set function, hyperv_report_panic_msg() can be > architecture neutral, so move it out from under arch/x86 and merge into > hv_kmsg_dump(). This move also avoids needing a separate implementation > under arch/arm64. > > No functional change. > > Signed-off-by: Michael Kelley <mikelley@xxxxxxxxxxxxx> Reviewed-by: Boqun Feng <boqun.feng@xxxxxxxxx> Regards, Boqun > --- > arch/x86/hyperv/hv_init.c | 27 --------------------------- > drivers/hv/vmbus_drv.c | 24 +++++++++++++++++++----- > include/asm-generic/mshyperv.h | 1 - > 3 files changed, 19 insertions(+), 33 deletions(-) > > diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c > index 9b2cdbe..22e9557 100644 > --- a/arch/x86/hyperv/hv_init.c > +++ b/arch/x86/hyperv/hv_init.c > @@ -452,33 +452,6 @@ void hyperv_report_panic(struct pt_regs *regs, long err, bool in_die) > } > EXPORT_SYMBOL_GPL(hyperv_report_panic); > > -/** > - * hyperv_report_panic_msg - report panic message to Hyper-V > - * @pa: physical address of the panic page containing the message > - * @size: size of the message in the page > - */ > -void hyperv_report_panic_msg(phys_addr_t pa, size_t size) > -{ > - /* > - * P3 to contain the physical address of the panic page & P4 to > - * contain the size of the panic data in that page. Rest of the > - * registers are no-op when the NOTIFY_MSG flag is set. > - */ > - wrmsrl(HV_X64_MSR_CRASH_P0, 0); > - wrmsrl(HV_X64_MSR_CRASH_P1, 0); > - wrmsrl(HV_X64_MSR_CRASH_P2, 0); > - wrmsrl(HV_X64_MSR_CRASH_P3, pa); > - wrmsrl(HV_X64_MSR_CRASH_P4, size); > - > - /* > - * Let Hyper-V know there is crash data available along with > - * the panic message. > - */ > - wrmsrl(HV_X64_MSR_CRASH_CTL, > - (HV_CRASH_CTL_CRASH_NOTIFY | HV_CRASH_CTL_CRASH_NOTIFY_MSG)); > -} > -EXPORT_SYMBOL_GPL(hyperv_report_panic_msg); > - > bool hv_is_hyperv_initialized(void) > { > union hv_x64_msr_hypercall_contents hypercall_msr; > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > index 089f165..8affe68 100644 > --- a/drivers/hv/vmbus_drv.c > +++ b/drivers/hv/vmbus_drv.c > @@ -1365,22 +1365,36 @@ static void hv_kmsg_dump(struct kmsg_dumper *dumper, > enum kmsg_dump_reason reason) > { > size_t bytes_written; > - phys_addr_t panic_pa; > > /* We are only interested in panics. */ > if ((reason != KMSG_DUMP_PANIC) || (!sysctl_record_panic_msg)) > return; > > - panic_pa = virt_to_phys(hv_panic_page); > - > /* > * Write dump contents to the page. No need to synchronize; panic should > * be single-threaded. > */ > kmsg_dump_get_buffer(dumper, false, hv_panic_page, HV_HYP_PAGE_SIZE, > &bytes_written); > - if (bytes_written) > - hyperv_report_panic_msg(panic_pa, bytes_written); > + if (!bytes_written) > + return; > + /* > + * P3 to contain the physical address of the panic page & P4 to > + * contain the size of the panic data in that page. Rest of the > + * registers are no-op when the NOTIFY_MSG flag is set. > + */ > + hv_set_register(HV_REGISTER_CRASH_P0, 0); > + hv_set_register(HV_REGISTER_CRASH_P1, 0); > + hv_set_register(HV_REGISTER_CRASH_P2, 0); > + hv_set_register(HV_REGISTER_CRASH_P3, virt_to_phys(hv_panic_page)); > + hv_set_register(HV_REGISTER_CRASH_P4, bytes_written); > + > + /* > + * Let Hyper-V know there is crash data available along with > + * the panic message. > + */ > + hv_set_register(HV_REGISTER_CRASH_CTL, > + (HV_CRASH_CTL_CRASH_NOTIFY | HV_CRASH_CTL_CRASH_NOTIFY_MSG)); > } > > static struct kmsg_dumper hv_kmsg_dumper = { > diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h > index 10c97a9..6a8072f 100644 > --- a/include/asm-generic/mshyperv.h > +++ b/include/asm-generic/mshyperv.h > @@ -170,7 +170,6 @@ static inline int cpumask_to_vpset(struct hv_vpset *vpset, > } > > void hyperv_report_panic(struct pt_regs *regs, long err, bool in_die); > -void hyperv_report_panic_msg(phys_addr_t pa, size_t size); > bool hv_is_hyperv_initialized(void); > bool hv_is_hibernation_supported(void); > void hyperv_cleanup(void); > -- > 1.8.3.1 >