pmu-emul.c (ef5f97e9de9fc0d5bb6136de3d01d78c072a452f) pmu-emul.c (6dcf7316e05eccded11fc640813c8a8879f271a6)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) 2015 Linaro Ltd.
4 * Author: Shannon Zhao <shannon.zhao@linaro.org>
5 */
6
7#include <linux/cpu.h>
8#include <linux/kvm.h>

--- 866 unchanged lines hidden (view full) ---

875 int ret = -ENXIO;
876
877 lockdep_assert_held(&kvm->arch.config_lock);
878 mutex_lock(&arm_pmus_lock);
879
880 list_for_each_entry(entry, &arm_pmus, entry) {
881 arm_pmu = entry->arm_pmu;
882 if (arm_pmu->pmu.type == pmu_id) {
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) 2015 Linaro Ltd.
4 * Author: Shannon Zhao <shannon.zhao@linaro.org>
5 */
6
7#include <linux/cpu.h>
8#include <linux/kvm.h>

--- 866 unchanged lines hidden (view full) ---

875 int ret = -ENXIO;
876
877 lockdep_assert_held(&kvm->arch.config_lock);
878 mutex_lock(&arm_pmus_lock);
879
880 list_for_each_entry(entry, &arm_pmus, entry) {
881 arm_pmu = entry->arm_pmu;
882 if (arm_pmu->pmu.type == pmu_id) {
883 if (test_bit(KVM_ARCH_FLAG_HAS_RAN_ONCE, &kvm->arch.flags) ||
883 if (kvm_vm_has_ran_once(kvm) ||
884 (kvm->arch.pmu_filter && kvm->arch.arm_pmu != arm_pmu)) {
885 ret = -EBUSY;
886 break;
887 }
888
889 kvm->arch.arm_pmu = arm_pmu;
890 cpumask_copy(kvm->arch.supported_cpus, &arm_pmu->supported_cpus);
891 ret = 0;

--- 61 unchanged lines hidden (view full) ---

953 if (copy_from_user(&filter, uaddr, sizeof(filter)))
954 return -EFAULT;
955
956 if (((u32)filter.base_event + filter.nevents) > nr_events ||
957 (filter.action != KVM_PMU_EVENT_ALLOW &&
958 filter.action != KVM_PMU_EVENT_DENY))
959 return -EINVAL;
960
884 (kvm->arch.pmu_filter && kvm->arch.arm_pmu != arm_pmu)) {
885 ret = -EBUSY;
886 break;
887 }
888
889 kvm->arch.arm_pmu = arm_pmu;
890 cpumask_copy(kvm->arch.supported_cpus, &arm_pmu->supported_cpus);
891 ret = 0;

--- 61 unchanged lines hidden (view full) ---

953 if (copy_from_user(&filter, uaddr, sizeof(filter)))
954 return -EFAULT;
955
956 if (((u32)filter.base_event + filter.nevents) > nr_events ||
957 (filter.action != KVM_PMU_EVENT_ALLOW &&
958 filter.action != KVM_PMU_EVENT_DENY))
959 return -EINVAL;
960
961 if (test_bit(KVM_ARCH_FLAG_HAS_RAN_ONCE, &kvm->arch.flags))
961 if (kvm_vm_has_ran_once(kvm))
962 return -EBUSY;
963
964 if (!kvm->arch.pmu_filter) {
965 kvm->arch.pmu_filter = bitmap_alloc(nr_events, GFP_KERNEL_ACCOUNT);
966 if (!kvm->arch.pmu_filter)
967 return -ENOMEM;
968
969 /*

--- 82 unchanged lines hidden ---
962 return -EBUSY;
963
964 if (!kvm->arch.pmu_filter) {
965 kvm->arch.pmu_filter = bitmap_alloc(nr_events, GFP_KERNEL_ACCOUNT);
966 if (!kvm->arch.pmu_filter)
967 return -ENOMEM;
968
969 /*

--- 82 unchanged lines hidden ---