|
Michal Suchanek |
5f677e |
From dae581864609d36fb58855fd59880b4941ce9d14 Mon Sep 17 00:00:00 2001
|
|
Michal Suchanek |
5f677e |
From: Michael Ellerman <mpe@ellerman.id.au>
|
|
Michal Suchanek |
5f677e |
Date: Fri, 24 Sep 2021 01:10:31 +1000
|
|
Michal Suchanek |
5f677e |
Subject: [PATCH] KVM: PPC: Book3S HV: Use GLOBAL_TOC for
|
|
Michal Suchanek |
5f677e |
kvmppc_h_set_dabr/xdabr()
|
|
Michal Suchanek |
5f677e |
|
|
Michal Suchanek |
5f677e |
References: bsc#1156395
|
|
Michal Suchanek |
5f677e |
Patch-mainline: v5.16-rc2
|
|
Michal Suchanek |
5f677e |
Git-commit: dae581864609d36fb58855fd59880b4941ce9d14
|
|
Michal Suchanek |
5f677e |
|
|
Michal Suchanek |
5f677e |
kvmppc_h_set_dabr(), and kvmppc_h_set_xdabr() which jumps into
|
|
Michal Suchanek |
5f677e |
it, need to use _GLOBAL_TOC to setup the kernel TOC pointer, because
|
|
Michal Suchanek |
5f677e |
kvmppc_h_set_dabr() uses LOAD_REG_ADDR() to load dawr_force_enable.
|
|
Michal Suchanek |
5f677e |
|
|
Michal Suchanek |
5f677e |
When called from hcall_try_real_mode() we have the kernel TOC in r2,
|
|
Michal Suchanek |
5f677e |
established near the start of kvmppc_interrupt_hv(), so there is no
|
|
Michal Suchanek |
5f677e |
issue.
|
|
Michal Suchanek |
5f677e |
|
|
Michal Suchanek |
5f677e |
But they can also be called from kvmppc_pseries_do_hcall() which is
|
|
Michal Suchanek |
5f677e |
module code, so the access ends up happening with the kvm-hv module's
|
|
Michal Suchanek |
5f677e |
r2, which will not point at dawr_force_enable and could even cause a
|
|
Michal Suchanek |
5f677e |
fault.
|
|
Michal Suchanek |
5f677e |
|
|
Michal Suchanek |
5f677e |
With the current code layout and compilers we haven't observed a fault
|
|
Michal Suchanek |
5f677e |
in practice, the load hits somewhere in kvm-hv.ko and silently returns
|
|
Michal Suchanek |
5f677e |
some bogus value.
|
|
Michal Suchanek |
5f677e |
|
|
Michal Suchanek |
5f677e |
Note that we we expect p8/p9 guests to use the DAWR, but SLOF uses
|
|
Michal Suchanek |
5f677e |
h_set_dabr() to test if sc1 works correctly, see SLOF's
|
|
Michal Suchanek |
5f677e |
lib/libhvcall/brokensc1.c.
|
|
Michal Suchanek |
5f677e |
|
|
Michal Suchanek |
5f677e |
Fixes: c1fe190c0672 ("powerpc: Add force enable of DAWR on P9 option")
|
|
Michal Suchanek |
5f677e |
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
|
|
Michal Suchanek |
5f677e |
Reviewed-by: Daniel Axtens <dja@axtens.net>
|
|
Michal Suchanek |
5f677e |
Link: https://lore.kernel.org/r/20210923151031.72408-1-mpe@ellerman.id.au
|
|
Michal Suchanek |
5f677e |
Acked-by: Michal Suchanek <msuchanek@suse.de>
|
|
Michal Suchanek |
5f677e |
---
|
|
Michal Suchanek |
5f677e |
arch/powerpc/kvm/book3s_hv_rmhandlers.S | 4 ++--
|
|
Michal Suchanek |
5f677e |
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
Michal Suchanek |
5f677e |
|
|
Michal Suchanek |
5f677e |
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
|
|
Michal Suchanek |
5f677e |
index eb776d0c5d8e..32a4b4d412b9 100644
|
|
Michal Suchanek |
5f677e |
--- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
|
|
Michal Suchanek |
5f677e |
+++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
|
|
Michal Suchanek |
5f677e |
@@ -2005,7 +2005,7 @@ hcall_real_table:
|
|
Michal Suchanek |
5f677e |
.globl hcall_real_table_end
|
|
Michal Suchanek |
5f677e |
hcall_real_table_end:
|
|
Michal Suchanek |
5f677e |
|
|
Michal Suchanek |
5f677e |
-_GLOBAL(kvmppc_h_set_xdabr)
|
|
Michal Suchanek |
5f677e |
+_GLOBAL_TOC(kvmppc_h_set_xdabr)
|
|
Michal Suchanek |
5f677e |
EXPORT_SYMBOL_GPL(kvmppc_h_set_xdabr)
|
|
Michal Suchanek |
5f677e |
andi. r0, r5, DABRX_USER | DABRX_KERNEL
|
|
Michal Suchanek |
5f677e |
beq 6f
|
|
Michal Suchanek |
5f677e |
@@ -2015,7 +2015,7 @@ EXPORT_SYMBOL_GPL(kvmppc_h_set_xdabr)
|
|
Michal Suchanek |
5f677e |
6: li r3, H_PARAMETER
|
|
Michal Suchanek |
5f677e |
blr
|
|
Michal Suchanek |
5f677e |
|
|
Michal Suchanek |
5f677e |
-_GLOBAL(kvmppc_h_set_dabr)
|
|
Michal Suchanek |
5f677e |
+_GLOBAL_TOC(kvmppc_h_set_dabr)
|
|
Michal Suchanek |
5f677e |
EXPORT_SYMBOL_GPL(kvmppc_h_set_dabr)
|
|
Michal Suchanek |
5f677e |
li r5, DABRX_USER | DABRX_KERNEL
|
|
Michal Suchanek |
5f677e |
3:
|
|
Michal Suchanek |
5f677e |
--
|
|
Michal Suchanek |
5f677e |
2.35.3
|
|
Michal Suchanek |
5f677e |
|