Thread (14 messages) 14 messages, 4 authors, 2016-11-30
STALE3474d

[PATCH] KVM: arm/arm64: Access CNTHCTL_EL2 bit fields correctly

From: Jintack Lim <hidden>
Date: 2016-11-29 11:29:06
Also in: kvm, kvmarm

On Tue, Nov 29, 2016 at 4:36 AM, Marc Zyngier [off-list ref] wrote:
On 29/11/16 03:28, Jintack Lim wrote:
quoted
On Mon, Nov 28, 2016 at 1:39 PM, Marc Zyngier [off-list ref] wrote:
quoted
On 28/11/16 17:43, Marc Zyngier wrote:
quoted
Hi Jintack,
Hi Marc,
quoted
quoted
On 28/11/16 16:46, Jintack Lim wrote:
quoted
Bit positions of CNTHCTL_EL2 are changing depending on HCR_EL2.E2H bit.
EL1PCEN and EL1PCTEN are 1st and 0th bits when E2H is not set, but they
are 11th and 10th bits respectively when E2H is set.  Current code is
unintentionally setting wrong bits to CNTHCTL_EL2 with E2H set, which
may allow guest OS to access physical timer. So, fix it.

Signed-off-by: Jintack Lim <redacted>
---
 arch/arm/include/asm/kvm_timer.h     | 33 +++++++++++++++++++
 arch/arm64/include/asm/kvm_timer.h   | 62 ++++++++++++++++++++++++++++++++++++
 include/clocksource/arm_arch_timer.h |  6 ++--
 virt/kvm/arm/hyp/timer-sr.c          |  8 ++---
 4 files changed, 103 insertions(+), 6 deletions(-)
 create mode 100644 arch/arm/include/asm/kvm_timer.h
 create mode 100644 arch/arm64/include/asm/kvm_timer.h
[...]
quoted
We could make it nicer (read "faster") by introducing a
hyp_alternate_select construct that only returns a value instead
of calling a function. I remember writing something like that
at some point, and dropping it...
So here's what this could look like (warning, wacky code ahead,
though I fixed a stupid bug that was present in the previous patch).
The generated code is quite nice (no branch, only an extra mov
instruction on the default path)... Of course, completely untested!
This looks much cleaner than my patch.
While we are at it, is it worth to consider that we just need to set
those bits once for VHE case, not for every world switch as an
optimization?
Ah! That's a much better idea indeed! And we could stop messing with
cntvoff_el2 as well, as it doesn't need to be restored to zero on exit.
Could you try and respin something along those lines?
Yes, I can.

Thanks,
Jintack
Thanks,

        M.
--
Jazz is not dead. It just smells funny...
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help