From: Sean Christopherson <seanjc@google.com>
To: Will Deacon <will@kernel.org>
Cc: Marc Zyngier <maz@kernel.org>,
kernel-team@android.com, kvm@vger.kernel.org,
Catalin Marinas <catalin.marinas@arm.com>,
Oliver Upton <oliver.upton@linux.dev>,
Andy Lutomirski <luto@amacapital.net>,
linux-arm-kernel@lists.infradead.org,
Michael Roth <michael.roth@amd.com>,
Chao Peng <chao.p.peng@linux.intel.com>,
kvmarm@lists.cs.columbia.edu
Subject: Re: [PATCH v2 00/24] KVM: arm64: Introduce pKVM shadow state at EL2
Date: Wed, 20 Jul 2022 21:17:00 +0000 [thread overview]
Message-ID: <YthwzIS18mutjGhN@google.com> (raw)
In-Reply-To: <20220720184859.GD16603@willie-the-truck>
On Wed, Jul 20, 2022, Will Deacon wrote:
> Hi Sean,
>
> On Tue, Jul 19, 2022 at 04:11:32PM +0000, Sean Christopherson wrote:
> > Or maybe just "pkvm"?
>
> I think the "hyp" part is useful to distinguish the pkvm code running at EL2
> from the pkvm code running at EL1. For example, we have a 'pkvm' member in
> 'struct kvm_arch' which is used by the _host_ at EL1.
Right, my suggestion was to rename that to pkvm_handle to avoid a direct conflict,
and then that naturally yields the "pkvm_handle => pkvm_vm" association. Or are
you expecting to shove more stuff into the that "pkvm" struct?
> So I'd say either "pkvm_hyp" or "hyp" instead of "shadow". The latter is
> nice and short...
I 100% agree that differentating between EL1 and EL2 is important for functions,
structs and global variables, but I would argue it's not so important for fields
and local variables where the "owning" struct/function provides that context. But
that's actually a partial argument for just using "hyp".
My concern with just using e.g. "kvm_hyp" is that, because non-pKVM nVHE also has
the host vs. hyp split, it could lead people to believe that "kvm_hyp" is also
used for the non-pKVM case.
So, what about a blend? E.g. "struct pkvm_hyp_vcpu *hyp_vcpu". That provides
the context that the struct is specific to the EL2 side of pKVM, most usage is
nice and short, and the "hyp" prefix avoids the ambiguity that a bare "pkvm" would
suffer for EL1 vs. EL2.
Doesn't look awful?
static void handle___kvm_vcpu_run(struct kvm_cpu_context *host_ctxt)
{
DECLARE_REG(struct kvm_vcpu *, host_vcpu, host_ctxt, 1);
int ret;
host_vcpu = kern_hyp_va(host_vcpu);
if (unlikely(is_protected_kvm_enabled())) {
struct pkvm_hyp_vcpu *hyp_vcpu;
struct kvm *host_kvm;
host_kvm = kern_hyp_va(host_vcpu->kvm);
hyp_vcpu = pkvm_load_hyp_vcpu(host_kvm->arch.pkvm.handle,
host_vcpu->vcpu_idx);
if (!hyp_vcpu) {
ret = -EINVAL;
goto out;
}
flush_pkvm_guest_state(hyp_vcpu);
ret = __kvm_vcpu_run(shadow_vcpu);
sync_pkvm_guest_state(hyp_vcpu);
pkvm_put_hyp_vcpu(shadow_state);
} else {
/* The host is fully trusted, run its vCPU directly. */
ret = __kvm_vcpu_run(host_vcpu);
}
out:
cpu_reg(host_ctxt, 1) = ret;
}
> > I think that's especially viable if you do away with
> > kvm_shadow_vcpu_state. As of this series at least, kvm_shadow_vcpu_state is
> > completely unnecessary. kvm_vcpu.kvm can be used to get at the VM, and thus pKVM
> > state via container_of(). Then the host_vcpu can be retrieved by using the
> > vcpu_idx, e.g.
> >
> > struct pkvm_vm *pkvm_vm = to_pkvm_vm(pkvm_vcpu->vm);
> > struct kvm_vcpu *host_vcpu;
> >
> > host_vcpu = kvm_get_vcpu(pkvm_vm->host_vm, pkvm_vcpu->vcpu_idx);
>
> Using container_of() here is neat; we can definitely go ahead with that
> change. However, looking at this in more detail with Fuad, removing
> 'struct kvm_shadow_vcpu_state' entirely isn't going to work:
> > struct kvm_vcpu *pkvm_vcpu_load(pkvm_handle_t handle, unsigned int vcpu_idx)
> > {
> > struct kvm_vpcu *pkvm_vcpu = NULL;
> > struct kvm *vm;
> >
> > hyp_spin_lock(&pkvm_global_lock);
> > vm = pkvm_get_vm(handle);
> > if (!vm || atomic_read(&vm->online_vcpus) <= vcpu_idx)
> > goto unlock;
> >
> > pkvm_vcpu = kvm_get_vcpu(vm, vcpu_idx);
>
> kvm_get_vcpu() makes use of an xarray to hold the vCPUs pointers and this is
> really something which we cannot support at EL2 where, amongst other things,
> we do not have support for RCU. Consequently, we do need to keep our own
> mapping from the shad^H^H^H^Hhyp vCPU to the host vCPU.
Hmm, are there guardrails in place to prevent using "unsafe" fields from "struct kvm"
and "struct kvm_vcpu" at EL2? If not, it seems like embedding the common structs
in the hyp/pkvm-specific structs is going bite us in the rear at some point.
Mostly out of curiosity, I assume the EL2 restriction only applies to nVHE mode?
And waaaay off topic, has anyone explored adding macro magic to generate wrappers
to (un)marshall registers to parameters/returns for the hyp functions? E.g. it'd
be neat if you could make the code look like this without having to add a wrapper
for every function:
static int handle___kvm_vcpu_run(unsigned long __host_vcpu)
{
struct kvm_vcpu *host_vcpu = kern_hyp_va(__host_vcpu);
int ret;
if (unlikely(is_protected_kvm_enabled())) {
struct pkvm_hyp_vcpu *hyp_vcpu;
struct kvm *host_kvm;
host_kvm = kern_hyp_va(host_vcpu->kvm);
hyp_vcpu = pkvm_load_hyp_vcpu(host_kvm->arch.pkvm.handle,
host_vcpu->vcpu_idx);
if (!hyp_vcpu)
return -EINVAL;
flush_hypervisor_state(hyp_vcpu);
ret = __kvm_vcpu_run(shadow_vcpu);
sync_hypervisor_state(hyp_vcpu);
pkvm_put_hyp_vcpu(shadow_state);
} else {
/* The host is fully trusted, run its vCPU directly. */
ret = __kvm_vcpu_run(host_vcpu);
}
return ret;
}
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
WARNING: multiple messages have this Message-ID (diff)
From: Sean Christopherson <seanjc@google.com>
To: Will Deacon <will@kernel.org>
Cc: kvmarm@lists.cs.columbia.edu, Ard Biesheuvel <ardb@kernel.org>,
Alexandru Elisei <alexandru.elisei@arm.com>,
Andy Lutomirski <luto@amacapital.net>,
Catalin Marinas <catalin.marinas@arm.com>,
James Morse <james.morse@arm.com>,
Chao Peng <chao.p.peng@linux.intel.com>,
Quentin Perret <qperret@google.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Michael Roth <michael.roth@amd.com>,
Mark Rutland <mark.rutland@arm.com>,
Fuad Tabba <tabba@google.com>,
Oliver Upton <oliver.upton@linux.dev>,
Marc Zyngier <maz@kernel.org>,
kernel-team@android.com, kvm@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 00/24] KVM: arm64: Introduce pKVM shadow state at EL2
Date: Wed, 20 Jul 2022 21:17:00 +0000 [thread overview]
Message-ID: <YthwzIS18mutjGhN@google.com> (raw)
In-Reply-To: <20220720184859.GD16603@willie-the-truck>
On Wed, Jul 20, 2022, Will Deacon wrote:
> Hi Sean,
>
> On Tue, Jul 19, 2022 at 04:11:32PM +0000, Sean Christopherson wrote:
> > Or maybe just "pkvm"?
>
> I think the "hyp" part is useful to distinguish the pkvm code running at EL2
> from the pkvm code running at EL1. For example, we have a 'pkvm' member in
> 'struct kvm_arch' which is used by the _host_ at EL1.
Right, my suggestion was to rename that to pkvm_handle to avoid a direct conflict,
and then that naturally yields the "pkvm_handle => pkvm_vm" association. Or are
you expecting to shove more stuff into the that "pkvm" struct?
> So I'd say either "pkvm_hyp" or "hyp" instead of "shadow". The latter is
> nice and short...
I 100% agree that differentating between EL1 and EL2 is important for functions,
structs and global variables, but I would argue it's not so important for fields
and local variables where the "owning" struct/function provides that context. But
that's actually a partial argument for just using "hyp".
My concern with just using e.g. "kvm_hyp" is that, because non-pKVM nVHE also has
the host vs. hyp split, it could lead people to believe that "kvm_hyp" is also
used for the non-pKVM case.
So, what about a blend? E.g. "struct pkvm_hyp_vcpu *hyp_vcpu". That provides
the context that the struct is specific to the EL2 side of pKVM, most usage is
nice and short, and the "hyp" prefix avoids the ambiguity that a bare "pkvm" would
suffer for EL1 vs. EL2.
Doesn't look awful?
static void handle___kvm_vcpu_run(struct kvm_cpu_context *host_ctxt)
{
DECLARE_REG(struct kvm_vcpu *, host_vcpu, host_ctxt, 1);
int ret;
host_vcpu = kern_hyp_va(host_vcpu);
if (unlikely(is_protected_kvm_enabled())) {
struct pkvm_hyp_vcpu *hyp_vcpu;
struct kvm *host_kvm;
host_kvm = kern_hyp_va(host_vcpu->kvm);
hyp_vcpu = pkvm_load_hyp_vcpu(host_kvm->arch.pkvm.handle,
host_vcpu->vcpu_idx);
if (!hyp_vcpu) {
ret = -EINVAL;
goto out;
}
flush_pkvm_guest_state(hyp_vcpu);
ret = __kvm_vcpu_run(shadow_vcpu);
sync_pkvm_guest_state(hyp_vcpu);
pkvm_put_hyp_vcpu(shadow_state);
} else {
/* The host is fully trusted, run its vCPU directly. */
ret = __kvm_vcpu_run(host_vcpu);
}
out:
cpu_reg(host_ctxt, 1) = ret;
}
> > I think that's especially viable if you do away with
> > kvm_shadow_vcpu_state. As of this series at least, kvm_shadow_vcpu_state is
> > completely unnecessary. kvm_vcpu.kvm can be used to get at the VM, and thus pKVM
> > state via container_of(). Then the host_vcpu can be retrieved by using the
> > vcpu_idx, e.g.
> >
> > struct pkvm_vm *pkvm_vm = to_pkvm_vm(pkvm_vcpu->vm);
> > struct kvm_vcpu *host_vcpu;
> >
> > host_vcpu = kvm_get_vcpu(pkvm_vm->host_vm, pkvm_vcpu->vcpu_idx);
>
> Using container_of() here is neat; we can definitely go ahead with that
> change. However, looking at this in more detail with Fuad, removing
> 'struct kvm_shadow_vcpu_state' entirely isn't going to work:
> > struct kvm_vcpu *pkvm_vcpu_load(pkvm_handle_t handle, unsigned int vcpu_idx)
> > {
> > struct kvm_vpcu *pkvm_vcpu = NULL;
> > struct kvm *vm;
> >
> > hyp_spin_lock(&pkvm_global_lock);
> > vm = pkvm_get_vm(handle);
> > if (!vm || atomic_read(&vm->online_vcpus) <= vcpu_idx)
> > goto unlock;
> >
> > pkvm_vcpu = kvm_get_vcpu(vm, vcpu_idx);
>
> kvm_get_vcpu() makes use of an xarray to hold the vCPUs pointers and this is
> really something which we cannot support at EL2 where, amongst other things,
> we do not have support for RCU. Consequently, we do need to keep our own
> mapping from the shad^H^H^H^Hhyp vCPU to the host vCPU.
Hmm, are there guardrails in place to prevent using "unsafe" fields from "struct kvm"
and "struct kvm_vcpu" at EL2? If not, it seems like embedding the common structs
in the hyp/pkvm-specific structs is going bite us in the rear at some point.
Mostly out of curiosity, I assume the EL2 restriction only applies to nVHE mode?
And waaaay off topic, has anyone explored adding macro magic to generate wrappers
to (un)marshall registers to parameters/returns for the hyp functions? E.g. it'd
be neat if you could make the code look like this without having to add a wrapper
for every function:
static int handle___kvm_vcpu_run(unsigned long __host_vcpu)
{
struct kvm_vcpu *host_vcpu = kern_hyp_va(__host_vcpu);
int ret;
if (unlikely(is_protected_kvm_enabled())) {
struct pkvm_hyp_vcpu *hyp_vcpu;
struct kvm *host_kvm;
host_kvm = kern_hyp_va(host_vcpu->kvm);
hyp_vcpu = pkvm_load_hyp_vcpu(host_kvm->arch.pkvm.handle,
host_vcpu->vcpu_idx);
if (!hyp_vcpu)
return -EINVAL;
flush_hypervisor_state(hyp_vcpu);
ret = __kvm_vcpu_run(shadow_vcpu);
sync_hypervisor_state(hyp_vcpu);
pkvm_put_hyp_vcpu(shadow_state);
} else {
/* The host is fully trusted, run its vCPU directly. */
ret = __kvm_vcpu_run(host_vcpu);
}
return ret;
}
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Sean Christopherson <seanjc@google.com>
To: Will Deacon <will@kernel.org>
Cc: kvmarm@lists.cs.columbia.edu, Ard Biesheuvel <ardb@kernel.org>,
Alexandru Elisei <alexandru.elisei@arm.com>,
Andy Lutomirski <luto@amacapital.net>,
Catalin Marinas <catalin.marinas@arm.com>,
James Morse <james.morse@arm.com>,
Chao Peng <chao.p.peng@linux.intel.com>,
Quentin Perret <qperret@google.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Michael Roth <michael.roth@amd.com>,
Mark Rutland <mark.rutland@arm.com>,
Fuad Tabba <tabba@google.com>,
Oliver Upton <oliver.upton@linux.dev>,
Marc Zyngier <maz@kernel.org>,
kernel-team@android.com, kvm@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 00/24] KVM: arm64: Introduce pKVM shadow state at EL2
Date: Wed, 20 Jul 2022 21:17:00 +0000 [thread overview]
Message-ID: <YthwzIS18mutjGhN@google.com> (raw)
In-Reply-To: <20220720184859.GD16603@willie-the-truck>
On Wed, Jul 20, 2022, Will Deacon wrote:
> Hi Sean,
>
> On Tue, Jul 19, 2022 at 04:11:32PM +0000, Sean Christopherson wrote:
> > Or maybe just "pkvm"?
>
> I think the "hyp" part is useful to distinguish the pkvm code running at EL2
> from the pkvm code running at EL1. For example, we have a 'pkvm' member in
> 'struct kvm_arch' which is used by the _host_ at EL1.
Right, my suggestion was to rename that to pkvm_handle to avoid a direct conflict,
and then that naturally yields the "pkvm_handle => pkvm_vm" association. Or are
you expecting to shove more stuff into the that "pkvm" struct?
> So I'd say either "pkvm_hyp" or "hyp" instead of "shadow". The latter is
> nice and short...
I 100% agree that differentating between EL1 and EL2 is important for functions,
structs and global variables, but I would argue it's not so important for fields
and local variables where the "owning" struct/function provides that context. But
that's actually a partial argument for just using "hyp".
My concern with just using e.g. "kvm_hyp" is that, because non-pKVM nVHE also has
the host vs. hyp split, it could lead people to believe that "kvm_hyp" is also
used for the non-pKVM case.
So, what about a blend? E.g. "struct pkvm_hyp_vcpu *hyp_vcpu". That provides
the context that the struct is specific to the EL2 side of pKVM, most usage is
nice and short, and the "hyp" prefix avoids the ambiguity that a bare "pkvm" would
suffer for EL1 vs. EL2.
Doesn't look awful?
static void handle___kvm_vcpu_run(struct kvm_cpu_context *host_ctxt)
{
DECLARE_REG(struct kvm_vcpu *, host_vcpu, host_ctxt, 1);
int ret;
host_vcpu = kern_hyp_va(host_vcpu);
if (unlikely(is_protected_kvm_enabled())) {
struct pkvm_hyp_vcpu *hyp_vcpu;
struct kvm *host_kvm;
host_kvm = kern_hyp_va(host_vcpu->kvm);
hyp_vcpu = pkvm_load_hyp_vcpu(host_kvm->arch.pkvm.handle,
host_vcpu->vcpu_idx);
if (!hyp_vcpu) {
ret = -EINVAL;
goto out;
}
flush_pkvm_guest_state(hyp_vcpu);
ret = __kvm_vcpu_run(shadow_vcpu);
sync_pkvm_guest_state(hyp_vcpu);
pkvm_put_hyp_vcpu(shadow_state);
} else {
/* The host is fully trusted, run its vCPU directly. */
ret = __kvm_vcpu_run(host_vcpu);
}
out:
cpu_reg(host_ctxt, 1) = ret;
}
> > I think that's especially viable if you do away with
> > kvm_shadow_vcpu_state. As of this series at least, kvm_shadow_vcpu_state is
> > completely unnecessary. kvm_vcpu.kvm can be used to get at the VM, and thus pKVM
> > state via container_of(). Then the host_vcpu can be retrieved by using the
> > vcpu_idx, e.g.
> >
> > struct pkvm_vm *pkvm_vm = to_pkvm_vm(pkvm_vcpu->vm);
> > struct kvm_vcpu *host_vcpu;
> >
> > host_vcpu = kvm_get_vcpu(pkvm_vm->host_vm, pkvm_vcpu->vcpu_idx);
>
> Using container_of() here is neat; we can definitely go ahead with that
> change. However, looking at this in more detail with Fuad, removing
> 'struct kvm_shadow_vcpu_state' entirely isn't going to work:
> > struct kvm_vcpu *pkvm_vcpu_load(pkvm_handle_t handle, unsigned int vcpu_idx)
> > {
> > struct kvm_vpcu *pkvm_vcpu = NULL;
> > struct kvm *vm;
> >
> > hyp_spin_lock(&pkvm_global_lock);
> > vm = pkvm_get_vm(handle);
> > if (!vm || atomic_read(&vm->online_vcpus) <= vcpu_idx)
> > goto unlock;
> >
> > pkvm_vcpu = kvm_get_vcpu(vm, vcpu_idx);
>
> kvm_get_vcpu() makes use of an xarray to hold the vCPUs pointers and this is
> really something which we cannot support at EL2 where, amongst other things,
> we do not have support for RCU. Consequently, we do need to keep our own
> mapping from the shad^H^H^H^Hhyp vCPU to the host vCPU.
Hmm, are there guardrails in place to prevent using "unsafe" fields from "struct kvm"
and "struct kvm_vcpu" at EL2? If not, it seems like embedding the common structs
in the hyp/pkvm-specific structs is going bite us in the rear at some point.
Mostly out of curiosity, I assume the EL2 restriction only applies to nVHE mode?
And waaaay off topic, has anyone explored adding macro magic to generate wrappers
to (un)marshall registers to parameters/returns for the hyp functions? E.g. it'd
be neat if you could make the code look like this without having to add a wrapper
for every function:
static int handle___kvm_vcpu_run(unsigned long __host_vcpu)
{
struct kvm_vcpu *host_vcpu = kern_hyp_va(__host_vcpu);
int ret;
if (unlikely(is_protected_kvm_enabled())) {
struct pkvm_hyp_vcpu *hyp_vcpu;
struct kvm *host_kvm;
host_kvm = kern_hyp_va(host_vcpu->kvm);
hyp_vcpu = pkvm_load_hyp_vcpu(host_kvm->arch.pkvm.handle,
host_vcpu->vcpu_idx);
if (!hyp_vcpu)
return -EINVAL;
flush_hypervisor_state(hyp_vcpu);
ret = __kvm_vcpu_run(shadow_vcpu);
sync_hypervisor_state(hyp_vcpu);
pkvm_put_hyp_vcpu(shadow_state);
} else {
/* The host is fully trusted, run its vCPU directly. */
ret = __kvm_vcpu_run(host_vcpu);
}
return ret;
}
next prev parent reply other threads:[~2022-07-20 21:17 UTC|newest]
Thread overview: 135+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-30 13:57 [PATCH v2 00/24] KVM: arm64: Introduce pKVM shadow state at EL2 Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 01/24] KVM: arm64: Move hyp refcount manipulation helpers Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 02/24] KVM: arm64: Allow non-coalescable pages in a hyp_pool Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 03/24] KVM: arm64: Add flags to struct hyp_page Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-07-18 10:54 ` Vincent Donnefort
2022-07-18 10:54 ` Vincent Donnefort
2022-07-18 10:54 ` Vincent Donnefort
2022-07-18 10:57 ` Vincent Donnefort
2022-07-18 10:57 ` Vincent Donnefort
2022-07-18 10:57 ` Vincent Donnefort
2022-06-30 13:57 ` [PATCH v2 04/24] KVM: arm64: Back hyp_vmemmap for all of memory Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 05/24] KVM: arm64: Make hyp stage-1 refcnt correct on the whole range Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 06/24] KVM: arm64: Unify identifiers used to distinguish host and hypervisor Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-07-20 15:11 ` Oliver Upton
2022-07-20 15:11 ` Oliver Upton
2022-07-20 15:11 ` Oliver Upton
2022-07-20 18:14 ` Will Deacon
2022-07-20 18:14 ` Will Deacon
2022-07-20 18:14 ` Will Deacon
2022-07-29 19:28 ` Oliver Upton
2022-07-29 19:28 ` Oliver Upton
2022-07-29 19:28 ` Oliver Upton
2022-06-30 13:57 ` [PATCH v2 07/24] KVM: arm64: Implement do_donate() helper for donating memory Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 08/24] KVM: arm64: Prevent the donation of no-map pages Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 09/24] KVM: arm64: Add helpers to pin memory shared with hyp Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 10/24] KVM: arm64: Include asm/kvm_mmu.h in nvhe/mem_protect.h Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 11/24] KVM: arm64: Add hyp_spinlock_t static initializer Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 12/24] KVM: arm64: Introduce shadow VM state at EL2 Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-07-18 18:40 ` Vincent Donnefort
2022-07-18 18:40 ` Vincent Donnefort
2022-07-18 18:40 ` Vincent Donnefort
2022-07-19 9:41 ` Marc Zyngier
2022-07-19 9:41 ` Marc Zyngier
2022-07-19 9:41 ` Marc Zyngier
2022-07-20 18:20 ` Will Deacon
2022-07-20 18:20 ` Will Deacon
2022-07-20 18:20 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 13/24] KVM: arm64: Instantiate VM shadow data from EL1 Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 14/24] KVM: arm64: Add pcpu fixmap infrastructure at EL2 Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-07-19 13:30 ` Vincent Donnefort
2022-07-19 13:30 ` Vincent Donnefort
2022-07-19 13:30 ` Vincent Donnefort
2022-07-19 14:09 ` Quentin Perret
2022-07-19 14:09 ` Quentin Perret
2022-07-19 14:09 ` Quentin Perret
2022-07-19 14:10 ` Quentin Perret
2022-07-19 14:10 ` Quentin Perret
2022-07-19 14:10 ` Quentin Perret
2022-06-30 13:57 ` [PATCH v2 15/24] KVM: arm64: Initialise hyp symbols regardless of pKVM Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 16/24] KVM: arm64: Provide I-cache invalidation by VA at EL2 Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 17/24] KVM: arm64: Add generic hyp_memcache helpers Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 18/24] KVM: arm64: Instantiate guest stage-2 page-tables at EL2 Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-07-19 13:32 ` Vincent Donnefort
2022-07-19 13:32 ` Vincent Donnefort
2022-07-19 13:32 ` Vincent Donnefort
2022-07-20 18:26 ` Will Deacon
2022-07-20 18:26 ` Will Deacon
2022-07-20 18:26 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 19/24] KVM: arm64: Return guest memory from EL2 via dedicated teardown memcache Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 20/24] KVM: arm64: Unmap kvm_arm_hyp_percpu_base from the host Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 21/24] KVM: arm64: Maintain a copy of 'kvm_arm_vmid_bits' at EL2 Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 22/24] KVM: arm64: Explicitly map kvm_vgic_global_state " Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [PATCH v2 23/24] KVM: arm64: Don't map host sections in pkvm Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` [RFC PATCH v2 24/24] KVM: arm64: Use the shadow vCPU structure in handle___kvm_vcpu_run() Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-06-30 13:57 ` Will Deacon
2022-07-06 19:17 ` [PATCH v2 00/24] KVM: arm64: Introduce pKVM shadow state at EL2 Sean Christopherson
2022-07-06 19:17 ` Sean Christopherson
2022-07-06 19:17 ` Sean Christopherson
2022-07-08 16:23 ` Will Deacon
2022-07-08 16:23 ` Will Deacon
2022-07-08 16:23 ` Will Deacon
2022-07-19 16:11 ` Sean Christopherson
2022-07-19 16:11 ` Sean Christopherson
2022-07-19 16:11 ` Sean Christopherson
2022-07-20 9:25 ` Marc Zyngier
2022-07-20 9:25 ` Marc Zyngier
2022-07-20 9:25 ` Marc Zyngier
2022-07-20 18:48 ` Will Deacon
2022-07-20 18:48 ` Will Deacon
2022-07-20 18:48 ` Will Deacon
2022-07-20 21:17 ` Sean Christopherson [this message]
2022-07-20 21:17 ` Sean Christopherson
2022-07-20 21:17 ` Sean Christopherson
2022-07-19 14:24 ` Vincent Donnefort
2022-07-19 14:24 ` Vincent Donnefort
2022-07-19 14:24 ` Vincent Donnefort
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=YthwzIS18mutjGhN@google.com \
--to=seanjc@google.com \
--cc=catalin.marinas@arm.com \
--cc=chao.p.peng@linux.intel.com \
--cc=kernel-team@android.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=luto@amacapital.net \
--cc=maz@kernel.org \
--cc=michael.roth@amd.com \
--cc=oliver.upton@linux.dev \
--cc=will@kernel.org \
/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.