kernel test robot <[email protected]> writes:

    In file included from arch/arm64/include/asm/kvm_host.h:32,
                     from include/linux/kvm_host.h:45,
                     from arch/arm64/kvm/sys_regs.c:16:
arch/arm64/include/asm/kvm_pmu.h:236:50: warning: 'struct arm_pmu' declared inside parameter list will not be visible outside of this definition or declaration
     static inline bool kvm_pmu_is_partitioned(struct arm_pmu *pmu)
                                                      ^~~~~~~
arch/arm64/include/asm/kvm_pmu.h:241:52: warning: 'struct arm_pmu' declared inside parameter list will not be visible outside of this definition or declaration
     static inline u64 kvm_pmu_host_counter_mask(struct arm_pmu *pmu)
                                                        ^~~~~~~
arch/arm64/include/asm/kvm_pmu.h:246:53: warning: 'struct arm_pmu' declared inside parameter list will not be visible outside of this definition or declaration
     static inline u64 kvm_pmu_guest_counter_mask(struct arm_pmu *pmu)
                                                         ^~~~~~~
arch/arm64/kvm/sys_regs.c:856:6: warning: no previous prototype for 'pmu_access_el0_disabled' [-Wmissing-prototypes]
     bool pmu_access_el0_disabled(struct kvm_vcpu *vcpu)
          ^~~~~~~~~~~~~~~~~~~~~~~
    arch/arm64/kvm/sys_regs.c: In function 'access_pmu_evtyper':
arch/arm64/kvm/sys_regs.c:1076:7: error: implicit declaration of function 'kvm_vcpu_pmu_is_partitioned'; did you mean 'kvm_pmu_is_partitioned'? [-Werror=implicit-function-declaration]
       if (kvm_vcpu_pmu_is_partitioned(vcpu))
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~
           kvm_pmu_is_partitioned
    arch/arm64/kvm/sys_regs.c: In function 'set_pmcr':
arch/arm64/kvm/sys_regs.c:1271:33: error: dereferencing pointer to incomplete type 'struct arm_pmu'
           new_n <= kvm->arch.arm_pmu->hpmn_max))
                                     ^~
    cc1: some warnings being treated as errors

Looks like the main problem here is struct arm_pmu is not defined if we
don't have CONFIG_ARM_PMU. I'll provide a dummy definition for that case
and swap out the field reference for a function call.

Secondary problem is making sure there is a prototype for
pmu_access_el0_disabled in that instance.

vim +1271 arch/arm64/kvm/sys_regs.c

   1253
1254 static int set_pmcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
   1255                     u64 val)
   1256 {
   1257         u8 new_n = FIELD_GET(ARMV8_PMU_PMCR_N, val);
   1258         struct kvm *kvm = vcpu->kvm;
   1259
   1260         mutex_lock(&kvm->arch.config_lock);
   1261
   1262         /*
   1263          * The vCPU can't have more counters than the PMU hardware
   1264          * implements. Ignore this error to maintain compatibility
   1265          * with the existing KVM behavior.
   1266          */
   1267         if (!kvm_vm_has_ran_once(kvm) &&
   1268             !vcpu_has_nv(vcpu)        &&
   1269             new_n <= kvm_arm_pmu_get_max_counters(kvm) &&
   1270             (!kvm_vcpu_pmu_is_partitioned(vcpu) ||
1271                 new_n <= kvm->arch.arm_pmu->hpmn_max))
   1272                 kvm->arch.nr_pmu_counters = new_n;
   1273
   1274         mutex_unlock(&kvm->arch.config_lock);
   1275
   1276         /*
   1277          * Ignore writes to RES0 bits, read only bits that are cleared 
on
   1278          * vCPU reset, and writable bits that KVM doesn't support yet.
   1279          * (i.e. only PMCR.N and bits [7:0] are mutable from userspace)
1280 * The LP bit is RES0 when FEAT_PMUv3p5 is not supported on the vCPU.
   1281          * But, we leave the bit as it is here, as the vCPU's PMUver 
might
1282 * be changed later (NOTE: the bit will be cleared on first vCPU run
   1283          * if necessary).
   1284          */
   1285         val &= ARMV8_PMU_PMCR_MASK;
   1286
   1287         /* The LC bit is RES1 when AArch32 is not supported */
   1288         if (!kvm_supports_32bit_el0())
   1289                 val |= ARMV8_PMU_PMCR_LC;
   1290
   1291         __vcpu_assign_sys_reg(vcpu, r->reg, val);
   1292         kvm_make_request(KVM_REQ_RELOAD_PMU, vcpu);
   1293
   1294         return 0;
   1295 }
   1296

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

Reply via email to