From: Christoffer Dall <cdall@kernel.org>
To: Mark Rutland <mark.rutland@arm.com>
Cc: linux-arm-kernel@lists.infradead.org, arnd@arndb.de,
catalin.marinas@arm.com, kvmarm@lists.cs.columbia.edu,
linux-arch@vger.kernel.org, marc.zyngier@arm.com,
suzuki.poulose@arm.com, will.deacon@arm.com, yao.qi@arm.com,
kernel-hardening@lists.openwall.com,
linux-kernel@vger.kernel.org, awallis@codeaurora.org
Subject: Re: [PATCHv2 09/12] arm64/kvm: preserve host HCR_EL2 value
Date: Mon, 9 Apr 2018 21:03:24 +0200 [thread overview]
Message-ID: <20180409190324.GG10904@cbox> (raw)
In-Reply-To: <20180409145709.dneotb6xaznw44c4@lakrids.cambridge.arm.com>
On Mon, Apr 09, 2018 at 03:57:09PM +0100, Mark Rutland wrote:
> On Tue, Feb 06, 2018 at 01:39:15PM +0100, Christoffer Dall wrote:
> > On Mon, Nov 27, 2017 at 04:38:03PM +0000, Mark Rutland wrote:
> > > diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
> > > index 525c01f48867..2205f0be3ced 100644
> > > --- a/arch/arm64/kvm/hyp/switch.c
> > > +++ b/arch/arm64/kvm/hyp/switch.c
> > > @@ -71,6 +71,8 @@ static void __hyp_text __activate_traps(struct kvm_vcpu *vcpu)
> > > {
> > > u64 val;
> > >
> > > + vcpu->arch.host_hcr_el2 = read_sysreg(hcr_el2);
> > > +
> >
> > Looking back at this, it seems excessive to switch this at every
> > round-trip. I think it should be possible to have this as a single
> > global (or per-CPU) variable that gets restored directly when returning
> > from the VM.
>
> I suspect this needs to be per-cpu, to account for heterogeneous
> systems.
>
> I guess if we move hcr_el2 into kvm_cpu_context, that gives us a
> per-vcpu copy for guests, and a per-cpu copy for the host (in the global
> kvm_host_cpu_state).
>
> I'll have a look at how gnarly that turns out. I'm not sure how we can
> initialise that sanely for the !VHE case to match whatever el2_setup
> did.
There's no harm in jumping down to EL2 to read a register during the
initialization phase. All it requires is an annotation of the callee
function, and a kvm_call_hyp(), and it's actually quite fast unless you
start saving/restoring a bunch of additional system registers. See how
we call __kvm_set_tpidr_el2() for example.
Thanks,
-Christoffer
WARNING: multiple messages have this Message-ID (diff)
From: cdall@kernel.org (Christoffer Dall)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv2 09/12] arm64/kvm: preserve host HCR_EL2 value
Date: Mon, 9 Apr 2018 21:03:24 +0200 [thread overview]
Message-ID: <20180409190324.GG10904@cbox> (raw)
In-Reply-To: <20180409145709.dneotb6xaznw44c4@lakrids.cambridge.arm.com>
On Mon, Apr 09, 2018 at 03:57:09PM +0100, Mark Rutland wrote:
> On Tue, Feb 06, 2018 at 01:39:15PM +0100, Christoffer Dall wrote:
> > On Mon, Nov 27, 2017 at 04:38:03PM +0000, Mark Rutland wrote:
> > > diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
> > > index 525c01f48867..2205f0be3ced 100644
> > > --- a/arch/arm64/kvm/hyp/switch.c
> > > +++ b/arch/arm64/kvm/hyp/switch.c
> > > @@ -71,6 +71,8 @@ static void __hyp_text __activate_traps(struct kvm_vcpu *vcpu)
> > > {
> > > u64 val;
> > >
> > > + vcpu->arch.host_hcr_el2 = read_sysreg(hcr_el2);
> > > +
> >
> > Looking back at this, it seems excessive to switch this at every
> > round-trip. I think it should be possible to have this as a single
> > global (or per-CPU) variable that gets restored directly when returning
> > from the VM.
>
> I suspect this needs to be per-cpu, to account for heterogeneous
> systems.
>
> I guess if we move hcr_el2 into kvm_cpu_context, that gives us a
> per-vcpu copy for guests, and a per-cpu copy for the host (in the global
> kvm_host_cpu_state).
>
> I'll have a look at how gnarly that turns out. I'm not sure how we can
> initialise that sanely for the !VHE case to match whatever el2_setup
> did.
There's no harm in jumping down to EL2 to read a register during the
initialization phase. All it requires is an annotation of the callee
function, and a kvm_call_hyp(), and it's actually quite fast unless you
start saving/restoring a bunch of additional system registers. See how
we call __kvm_set_tpidr_el2() for example.
Thanks,
-Christoffer
next prev parent reply other threads:[~2018-04-09 19:03 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-27 16:37 [kernel-hardening] [PATCHv2 00/12] ARMv8.3 pointer authentication userspace support Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` [kernel-hardening] [PATCHv2 01/12] asm-generic: mm_hooks: allow hooks to be overridden individually Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` [kernel-hardening] [PATCHv2 02/12] arm64: add pointer authentication register bits Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` [kernel-hardening] [PATCHv2 03/12] arm64/cpufeature: add ARMv8.3 id_aa64isar1 bits Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` [kernel-hardening] [PATCHv2 04/12] arm64/cpufeature: detect pointer authentication Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` [kernel-hardening] [PATCHv2 05/12] arm64: Don't trap host pointer auth use to EL2 Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2017-11-27 16:37 ` Mark Rutland
2018-02-06 12:39 ` Christoffer Dall
2018-02-06 12:39 ` Christoffer Dall
2018-02-12 16:00 ` Mark Rutland
2018-02-12 16:00 ` Mark Rutland
2017-11-27 16:38 ` [kernel-hardening] [PATCHv2 06/12] arm64: add basic pointer authentication support Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2018-05-22 19:06 ` Adam Wallis
2018-05-22 19:06 ` Adam Wallis
2017-11-27 16:38 ` [kernel-hardening] [PATCHv2 07/12] arm64: expose user PAC bit positions via ptrace Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` [kernel-hardening] [PATCHv2 08/12] arm64: perf: strip PAC when unwinding userspace Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` [kernel-hardening] [PATCHv2 09/12] arm64/kvm: preserve host HCR_EL2 value Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2018-02-06 12:39 ` Christoffer Dall
2018-02-06 12:39 ` Christoffer Dall
2018-04-09 14:57 ` Mark Rutland
2018-04-09 14:57 ` Mark Rutland
2018-04-09 19:03 ` Christoffer Dall [this message]
2018-04-09 19:03 ` Christoffer Dall
2017-11-27 16:38 ` [kernel-hardening] [PATCHv2 10/12] arm64/kvm: context-switch ptrauth registers Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2018-02-06 12:38 ` Christoffer Dall
2018-02-06 12:38 ` Christoffer Dall
2018-03-09 14:28 ` Mark Rutland
2018-03-09 14:28 ` Mark Rutland
2018-04-09 12:58 ` Christoffer Dall
2018-04-09 12:58 ` Christoffer Dall
2018-04-09 14:37 ` Mark Rutland
2018-04-09 14:37 ` Mark Rutland
2017-11-27 16:38 ` [kernel-hardening] [PATCHv2 11/12] arm64: enable pointer authentication Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` [kernel-hardening] [PATCHv2 12/12] arm64: docs: document " Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-27 16:38 ` Mark Rutland
2017-11-28 15:07 ` [kernel-hardening] " Andrew Jones
2017-11-28 15:07 ` Andrew Jones
2017-11-28 15:07 ` Andrew Jones
2017-12-04 12:39 ` [kernel-hardening] " Mark Rutland
2017-12-04 12:39 ` Mark Rutland
2017-12-04 12:39 ` Mark Rutland
2017-12-04 12:49 ` [kernel-hardening] " Andrew Jones
2017-12-04 12:49 ` Andrew Jones
2017-12-04 12:49 ` Andrew Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180409190324.GG10904@cbox \
--to=cdall@kernel.org \
--cc=arnd@arndb.de \
--cc=awallis@codeaurora.org \
--cc=catalin.marinas@arm.com \
--cc=kernel-hardening@lists.openwall.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.zyngier@arm.com \
--cc=mark.rutland@arm.com \
--cc=suzuki.poulose@arm.com \
--cc=will.deacon@arm.com \
--cc=yao.qi@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.