Skip to content

Commit 3cb8a09

Browse files
Fuad TabbaMarc Zyngier
authored andcommitted
KVM: arm64: Wrapper for getting pmu_events
Eases migrating away from using hyp data and simplifies the code. No functional change intended. Reviewed-by: Oliver Upton <oupton@google.com> Signed-off-by: Fuad Tabba <tabba@google.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20220510095710.148178-2-tabba@google.com
1 parent b2d229d commit 3cb8a09

1 file changed

Lines changed: 26 additions & 16 deletions

File tree

arch/arm64/kvm/pmu.c

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,35 +25,45 @@ static bool kvm_pmu_switch_needed(struct perf_event_attr *attr)
2525
return (attr->exclude_host != attr->exclude_guest);
2626
}
2727

28+
static struct kvm_pmu_events *kvm_get_pmu_events(void)
29+
{
30+
struct kvm_host_data *ctx = this_cpu_ptr_hyp_sym(kvm_host_data);
31+
32+
if (!ctx)
33+
return NULL;
34+
35+
return &ctx->pmu_events;
36+
}
37+
2838
/*
2939
* Add events to track that we may want to switch at guest entry/exit
3040
* time.
3141
*/
3242
void kvm_set_pmu_events(u32 set, struct perf_event_attr *attr)
3343
{
34-
struct kvm_host_data *ctx = this_cpu_ptr_hyp_sym(kvm_host_data);
44+
struct kvm_pmu_events *pmu = kvm_get_pmu_events();
3545

36-
if (!kvm_arm_support_pmu_v3() || !ctx || !kvm_pmu_switch_needed(attr))
46+
if (!kvm_arm_support_pmu_v3() || !pmu || !kvm_pmu_switch_needed(attr))
3747
return;
3848

3949
if (!attr->exclude_host)
40-
ctx->pmu_events.events_host |= set;
50+
pmu->events_host |= set;
4151
if (!attr->exclude_guest)
42-
ctx->pmu_events.events_guest |= set;
52+
pmu->events_guest |= set;
4353
}
4454

4555
/*
4656
* Stop tracking events
4757
*/
4858
void kvm_clr_pmu_events(u32 clr)
4959
{
50-
struct kvm_host_data *ctx = this_cpu_ptr_hyp_sym(kvm_host_data);
60+
struct kvm_pmu_events *pmu = kvm_get_pmu_events();
5161

52-
if (!kvm_arm_support_pmu_v3() || !ctx)
62+
if (!kvm_arm_support_pmu_v3() || !pmu)
5363
return;
5464

55-
ctx->pmu_events.events_host &= ~clr;
56-
ctx->pmu_events.events_guest &= ~clr;
65+
pmu->events_host &= ~clr;
66+
pmu->events_guest &= ~clr;
5767
}
5868

5969
#define PMEVTYPER_READ_CASE(idx) \
@@ -169,16 +179,16 @@ static void kvm_vcpu_pmu_disable_el0(unsigned long events)
169179
*/
170180
void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu)
171181
{
172-
struct kvm_host_data *host;
182+
struct kvm_pmu_events *pmu;
173183
u32 events_guest, events_host;
174184

175185
if (!kvm_arm_support_pmu_v3() || !has_vhe())
176186
return;
177187

178188
preempt_disable();
179-
host = this_cpu_ptr_hyp_sym(kvm_host_data);
180-
events_guest = host->pmu_events.events_guest;
181-
events_host = host->pmu_events.events_host;
189+
pmu = kvm_get_pmu_events();
190+
events_guest = pmu->events_guest;
191+
events_host = pmu->events_host;
182192

183193
kvm_vcpu_pmu_enable_el0(events_guest);
184194
kvm_vcpu_pmu_disable_el0(events_host);
@@ -190,15 +200,15 @@ void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu)
190200
*/
191201
void kvm_vcpu_pmu_restore_host(struct kvm_vcpu *vcpu)
192202
{
193-
struct kvm_host_data *host;
203+
struct kvm_pmu_events *pmu;
194204
u32 events_guest, events_host;
195205

196206
if (!kvm_arm_support_pmu_v3() || !has_vhe())
197207
return;
198208

199-
host = this_cpu_ptr_hyp_sym(kvm_host_data);
200-
events_guest = host->pmu_events.events_guest;
201-
events_host = host->pmu_events.events_host;
209+
pmu = kvm_get_pmu_events();
210+
events_guest = pmu->events_guest;
211+
events_host = pmu->events_host;
202212

203213
kvm_vcpu_pmu_enable_el0(events_host);
204214
kvm_vcpu_pmu_disable_el0(events_guest);

0 commit comments

Comments
 (0)