return (attr->exclude_host != attr->exclude_guest);
 }
 
+static struct kvm_pmu_events *kvm_get_pmu_events(void)
+{
+       struct kvm_host_data *ctx = this_cpu_ptr_hyp_sym(kvm_host_data);
+
+       if (!ctx)
+               return NULL;
+
+       return &ctx->pmu_events;
+}
+
 /*
  * Add events to track that we may want to switch at guest entry/exit
  * time.
  */
 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);
+       struct kvm_pmu_events *pmu = kvm_get_pmu_events();
 
-       if (!kvm_arm_support_pmu_v3() || !ctx || !kvm_pmu_switch_needed(attr))
+       if (!kvm_arm_support_pmu_v3() || !pmu || !kvm_pmu_switch_needed(attr))
                return;
 
        if (!attr->exclude_host)
-               ctx->pmu_events.events_host |= set;
+               pmu->events_host |= set;
        if (!attr->exclude_guest)
-               ctx->pmu_events.events_guest |= set;
+               pmu->events_guest |= set;
 }
 
 /*
  */
 void kvm_clr_pmu_events(u32 clr)
 {
-       struct kvm_host_data *ctx = this_cpu_ptr_hyp_sym(kvm_host_data);
+       struct kvm_pmu_events *pmu = kvm_get_pmu_events();
 
-       if (!kvm_arm_support_pmu_v3() || !ctx)
+       if (!kvm_arm_support_pmu_v3() || !pmu)
                return;
 
-       ctx->pmu_events.events_host &= ~clr;
-       ctx->pmu_events.events_guest &= ~clr;
+       pmu->events_host &= ~clr;
+       pmu->events_guest &= ~clr;
 }
 
 #define PMEVTYPER_READ_CASE(idx)                               \
  */
 void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu)
 {
-       struct kvm_host_data *host;
+       struct kvm_pmu_events *pmu;
        u32 events_guest, events_host;
 
        if (!kvm_arm_support_pmu_v3() || !has_vhe())
                return;
 
        preempt_disable();
-       host = this_cpu_ptr_hyp_sym(kvm_host_data);
-       events_guest = host->pmu_events.events_guest;
-       events_host = host->pmu_events.events_host;
+       pmu = kvm_get_pmu_events();
+       events_guest = pmu->events_guest;
+       events_host = pmu->events_host;
 
        kvm_vcpu_pmu_enable_el0(events_guest);
        kvm_vcpu_pmu_disable_el0(events_host);
  */
 void kvm_vcpu_pmu_restore_host(struct kvm_vcpu *vcpu)
 {
-       struct kvm_host_data *host;
+       struct kvm_pmu_events *pmu;
        u32 events_guest, events_host;
 
        if (!kvm_arm_support_pmu_v3() || !has_vhe())
                return;
 
-       host = this_cpu_ptr_hyp_sym(kvm_host_data);
-       events_guest = host->pmu_events.events_guest;
-       events_host = host->pmu_events.events_host;
+       pmu = kvm_get_pmu_events();
+       events_guest = pmu->events_guest;
+       events_host = pmu->events_host;
 
        kvm_vcpu_pmu_enable_el0(events_host);
        kvm_vcpu_pmu_disable_el0(events_guest);