s390/cpum_cf: Handle EBUSY return code from CPU counter facility reservation
authorThomas Richter <tmricht@linux.ibm.com>
Tue, 22 Jan 2019 10:55:18 +0000 (10:55 +0000)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 22 Feb 2019 08:19:58 +0000 (09:19 +0100)
Rservation of the CPU Measurement Counter facility may fail if
it is already in use by the cf_diag device driver.
This is indicated by a non zero return code (-EBUSY).
However this return code is ignored and the counter facility
may be used in parallel by different device drivers.

Handle the failing reservation and return an error to the
caller.

Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/perf_cpum_cf.c

index 670ff98acb6279050aed75428161a55e7d2e8ae2..e1c54d28713a8d1daaf4f416e4e7b16fc427059b 100644 (file)
@@ -197,7 +197,7 @@ static int __hw_perf_event_init(struct perf_event *event)
        struct perf_event_attr *attr = &event->attr;
        struct hw_perf_event *hwc = &event->hw;
        enum cpumf_ctr_set set;
-       int err;
+       int err = 0;
        u64 ev;
 
        switch (attr->type) {
@@ -273,6 +273,8 @@ static int __hw_perf_event_init(struct perf_event *event)
                        atomic_inc(&num_events);
                mutex_unlock(&pmc_reserve_mutex);
        }
+       if (err)
+               return err;
        event->destroy = hw_perf_event_destroy;
 
        /* Finally, validate version and authorization of the counter set */