|
@@ -210,9 +210,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
|
|
@@ -223,11 +224,13 @@ 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);
|
|
|
- wrmsrl(HV_X64_MSR_CRASH_P3, regs->cx);
|
|
|
- wrmsrl(HV_X64_MSR_CRASH_P4, regs->dx);
|
|
|
+ rdmsrl(HV_X64_MSR_GUEST_OS_ID, guest_id);
|
|
|
+
|
|
|
+ wrmsrl(HV_X64_MSR_CRASH_P0, err);
|
|
|
+ wrmsrl(HV_X64_MSR_CRASH_P1, guest_id);
|
|
|
+ wrmsrl(HV_X64_MSR_CRASH_P2, regs->ip);
|
|
|
+ wrmsrl(HV_X64_MSR_CRASH_P3, regs->ax);
|
|
|
+ wrmsrl(HV_X64_MSR_CRASH_P4, regs->sp);
|
|
|
|
|
|
/*
|
|
|
* Let Hyper-V know there is crash data available
|