|
@@ -299,9 +299,16 @@ static const char __hyp_panic_string[] = "HYP panic:\nPS:%08llx PC:%016llx ESR:%
|
|
|
|
|
|
static void __hyp_text __hyp_call_panic_nvhe(u64 spsr, u64 elr, u64 par)
|
|
|
{
|
|
|
- unsigned long str_va = (unsigned long)__hyp_panic_string;
|
|
|
+ unsigned long str_va;
|
|
|
|
|
|
- __hyp_do_panic(hyp_kern_va(str_va),
|
|
|
+ /*
|
|
|
+ * Force the panic string to be loaded from the literal pool,
|
|
|
+ * making sure it is a kernel address and not a PC-relative
|
|
|
+ * reference.
|
|
|
+ */
|
|
|
+ asm volatile("ldr %0, =__hyp_panic_string" : "=r" (str_va));
|
|
|
+
|
|
|
+ __hyp_do_panic(str_va,
|
|
|
spsr, elr,
|
|
|
read_sysreg(esr_el2), read_sysreg_el2(far),
|
|
|
read_sysreg(hpfar_el2), par,
|