Skip to content

Commit

Permalink
FROMLIST: KVM: arm64: Disable PMU support in protected mode
Browse files Browse the repository at this point in the history
The host currently writes directly in EL2 per-CPU data sections from
the PMU code when running in nVHE. In preparation for unmapping the EL2
sections from the host stage 2, disable PMU support in protected mode as
we currently do not have a use-case for it.

Acked-by: Will Deacon <[email protected]>
Signed-off-by: Quentin Perret <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Bug: 178098380
Change-Id: I4e8e2205484f0375a9a9ea15491f099832a03118
  • Loading branch information
Quentin Perret committed Mar 17, 2021
1 parent 6697310 commit 317d5a5
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
3 changes: 2 additions & 1 deletion arch/arm64/kvm/perf.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ int kvm_perf_init(void)
* hardware performance counters. This could ensure the presence of
* a physical PMU and CONFIG_PERF_EVENT is selected.
*/
if (IS_ENABLED(CONFIG_ARM_PMU) && perf_num_counters() > 0)
if (IS_ENABLED(CONFIG_ARM_PMU) && perf_num_counters() > 0
&& !is_protected_kvm_enabled())
static_branch_enable(&kvm_arm_pmu_available);

return perf_register_guest_info_callbacks(&kvm_guest_cbs);
Expand Down
8 changes: 4 additions & 4 deletions arch/arm64/kvm/pmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ void kvm_set_pmu_events(u32 set, struct perf_event_attr *attr)
{
struct kvm_host_data *ctx = this_cpu_ptr_hyp_sym(kvm_host_data);

if (!ctx || !kvm_pmu_switch_needed(attr))
if (!kvm_arm_support_pmu_v3() || !ctx || !kvm_pmu_switch_needed(attr))
return;

if (!attr->exclude_host)
Expand All @@ -49,7 +49,7 @@ void kvm_clr_pmu_events(u32 clr)
{
struct kvm_host_data *ctx = this_cpu_ptr_hyp_sym(kvm_host_data);

if (!ctx)
if (!kvm_arm_support_pmu_v3() || !ctx)
return;

ctx->pmu_events.events_host &= ~clr;
Expand Down Expand Up @@ -172,7 +172,7 @@ void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu)
struct kvm_host_data *host;
u32 events_guest, events_host;

if (!has_vhe())
if (!kvm_arm_support_pmu_v3() || !has_vhe())
return;

preempt_disable();
Expand All @@ -193,7 +193,7 @@ void kvm_vcpu_pmu_restore_host(struct kvm_vcpu *vcpu)
struct kvm_host_data *host;
u32 events_guest, events_host;

if (!has_vhe())
if (!kvm_arm_support_pmu_v3() || !has_vhe())
return;

host = this_cpu_ptr_hyp_sym(kvm_host_data);
Expand Down

0 comments on commit 317d5a5

Please sign in to comment.