Re: [PATCH v2 17/23] KVM: arm64: Account for partitioning in PMCR_EL0 access

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



kernel test robot <lkp@xxxxxxxxx> 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




[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux