/* * hv_do_fast_hypercall8 -- Invoke the specified hypercall * with arguments in registers instead of physical memory. * Avoids the overhead of virt_to_phys for simple hypercalls.
*/
/* * Something is fundamentally broken in the hypervisor if * setting a VP register fails. There's really no way to * continue as a guest VM, so panic.
*/
BUG_ON(!hv_result_success(res.a0));
}
EXPORT_SYMBOL_GPL(hv_set_vpreg);
/* * Get the value of a single VP register. One version * returns just 64 bits and another returns the full 128 bits. * The two versions are separate to avoid complicating the * calling sequence for the more frequently used 64 bit version.
*/
/* * Use the SMCCC 1.2 interface because the results are in registers * beyond X0-X3.
*/
arm_smccc_1_2_hvc(&args, &res);
/* * Something is fundamentally broken in the hypervisor if * getting a VP register fails. There's really no way to * continue as a guest VM, so panic.
*/
BUG_ON(!hv_result_success(res.a0));
/* * 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)
{ staticbool 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_OS_ID);
/* * 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_GUEST_CRASH_P0, err);
hv_set_vpreg(HV_REGISTER_GUEST_CRASH_P1, guest_id);
hv_set_vpreg(HV_REGISTER_GUEST_CRASH_P2, regs->pc);
hv_set_vpreg(HV_REGISTER_GUEST_CRASH_P3, regs->sp);
hv_set_vpreg(HV_REGISTER_GUEST_CRASH_P4, 0);
/* * Let Hyper-V know there is crash data available
*/
hv_set_vpreg(HV_REGISTER_GUEST_CRASH_CTL, HV_CRASH_CTL_CRASH_NOTIFY);
}
EXPORT_SYMBOL_GPL(hyperv_report_panic);
Messung V0.5
¤ Dauer der Verarbeitung: 0.19 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.