static int etm4_enable_perf(struct coresight_device *csdev, struct perf_event_attr *attr) { struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id())) return -EINVAL; /* Configure the tracer based on the session's specifics */ etm4_parse_event_config(drvdata, attr); /* And enable it */ etm4_enable_hw(drvdata); return 0; }
static int etm4_starting_cpu(unsigned int cpu) { if (!etmdrvdata[cpu]) return 0; spin_lock(&etmdrvdata[cpu]->spinlock); if (!etmdrvdata[cpu]->os_unlock) { etm4_os_unlock(etmdrvdata[cpu]); etmdrvdata[cpu]->os_unlock = true; } if (local_read(&etmdrvdata[cpu]->mode)) etm4_enable_hw(etmdrvdata[cpu]); spin_unlock(&etmdrvdata[cpu]->spinlock); return 0; }
static int etm4_enable_perf(struct coresight_device *csdev, struct perf_event *event) { int ret = 0; struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id())) { ret = -EINVAL; goto out; } /* Configure the tracer based on the session's specifics */ ret = etm4_parse_event_config(drvdata, event); if (ret) goto out; /* And enable it */ etm4_enable_hw(drvdata); out: return ret; }