On 12/1/23 00:55, Sebastian Ott wrote:
On Tue, 28 Nov 2023, Shaoqin Huang wrote:
+static void kvm_arm_pmu_filter_init(CPUState *cs)
+{
+ static bool pmu_filter_init = false;
+ struct kvm_pmu_event_filter filter;
+ struct kvm_device_attr attr = {
+ .group = KVM_ARM_VCPU_PMU_V3_CTRL,
+ .attr = KVM_ARM_VCPU_PMU_V3_FILTER,
+ .addr = (uint64_t)&filter,
+ };
+ KVMState *kvm_state = cs->kvm_state;
+ char *tmp;
+ char *str, act;
+
+ if (!kvm_state->kvm_pmu_filter)
+ return;
+
+ if (kvm_vcpu_ioctl(cs, KVM_HAS_DEVICE_ATTR, attr)) {
+ error_report("The kernel doesn't support the pmu event
filter!\n");
+ abort();
+ }
+
+ /* The filter only needs to be initialized for 1 vcpu. */
+ if (!pmu_filter_init)
+ pmu_filter_init = true;
Imho this is missing an else to bail out. Or the shorter version
if (pmu_filter_init)
return;
pmu_filter_init = true;
Yes. This is what I want to do. Thanks for fixing it.
which could also move above the other tests.
Sebastian
--
Shaoqin