Re: [PATCH V4 6/6] x86/Hyper-V: Report crash data in die() when panic_on_oops is set

From: Tianyu Lan
Date: Tue Mar 31 2020 - 10:26:13 EST




On 3/31/2020 9:51 PM, Michael Kelley wrote:
From: Tianyu Lan <Tianyu.Lan@xxxxxxxxxxxxx> Sent: Tuesday, March 31, 2020 12:39 AM

When oops happens with panic_on_oops unset, the oops
thread is killed by die() and system continues to run.
In such case, guest should not report crash register
data to host since system still runs. Fix it.

Reviewed-by: Michael Kelley <mikelley@xxxxxxxxxxxxx>
Signed-off-by: Tianyu Lan <Tianyu.Lan@xxxxxxxxxxxxx>
---
Change since v3:
Fix compile error
---
drivers/hv/vmbus_drv.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 172ceae69abb..4bc02aea2098 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -31,6 +31,7 @@
#include <linux/kdebug.h>
#include <linux/efi.h>
#include <linux/random.h>
+#include <linux/kernel.h>

Unfortunately, adding the #include doesn't solve the problem. The error occurs when
CONFIG_HYPERV=m, because panic_on_oops is not exported. I haven't thought it
through, but hopefully there's a solution where panic_on_oops can be tested in
hyperv_report_panic() or some other Hyper-V specific function that's never in a
module, so that we don't need to export panic_on_oops.

Yes, I don't consider modules case. I think we may introduce a check function of panic_on_oops in the mshyperv.c and expose it to module.


Michael

#include <linux/syscore_ops.h>
#include <clocksource/hyperv_timer.h>
#include "hyperv_vmbus.h"
@@ -91,7 +92,7 @@ static int hyperv_die_event(struct notifier_block *nb, unsigned long
val,
* doing hyperv_report_panic_msg() later with kmsg data, don't do
* the notification here.
*/
- if (hyperv_report_reg())
+ if (hyperv_report_reg() && panic_on_oops)
hyperv_report_panic(regs, val);
return NOTIFY_DONE;
}
--
2.14.5