s390/cpum_cf: simplify hw_perf_event_destroy()
authorThomas Richter <tmricht@linux.ibm.com>
Tue, 24 Jan 2023 11:20:50 +0000 (12:20 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Wed, 25 Jan 2023 19:51:09 +0000 (20:51 +0100)
To remove an event from the CPU Measurement counter facility
use the lock/unlock scheme as done in event creation. Remove
the atomic_add_unless function to make the code easier.

Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
Acked-by: Hendrik Brueckner <brueckner@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/kernel/perf_cpum_cf.c

index 28fa80fd69fa0db29298e7278a1823081f81f132..e58e49488ad9a0de5140f7dbba20346aa373d5c3 100644 (file)
@@ -397,12 +397,10 @@ static DEFINE_MUTEX(pmc_reserve_mutex);
 /* Release the PMU if event is the last perf event */
 static void hw_perf_event_destroy(struct perf_event *event)
 {
-       if (!atomic_add_unless(&num_events, -1, 1)) {
-               mutex_lock(&pmc_reserve_mutex);
-               if (atomic_dec_return(&num_events) == 0)
-                       __kernel_cpumcf_end();
-               mutex_unlock(&pmc_reserve_mutex);
-       }
+       mutex_lock(&pmc_reserve_mutex);
+       if (atomic_dec_return(&num_events) == 0)
+               __kernel_cpumcf_end();
+       mutex_unlock(&pmc_reserve_mutex);
 }
 
 /* CPUMF <-> perf event mappings for kernel+userspace (basic set) */