static int start(void) { int err; if (tegra_profiler_try_lock()) { pr_err("Error: tegra_profiler lock\n"); return -EBUSY; } if (!atomic_cmpxchg(&ctx.started, 0, 1)) { if (ctx.pmu) { err = ctx.pmu->enable(); if (err) { pr_err("error: pmu enable\n"); goto errout; } } if (ctx.pl310) { err = ctx.pl310->enable(); if (err) { pr_err("error: pl310 enable\n"); goto errout; } } ctx.comm->reset(); err = quadd_power_clk_start(); if (err < 0) { pr_err("error: power_clk start\n"); goto errout; } err = quadd_hrt_start(); if (err) { pr_err("error: hrt start\n"); goto errout; } } return 0; errout: atomic_set(&ctx.started, 0); tegra_profiler_unlock(); return err; }
static int start(void) { int err; if (!atomic_cmpxchg(&ctx.started, 0, 1)) { if (ctx.pmu) { err = ctx.pmu->enable(); if (err) { pr_err("error: pmu enable\n"); return err; } } if (ctx.pl310) { err = ctx.pl310->enable(); if (err) { pr_err("error: pl310 enable\n"); return err; } } quadd_mmap_reset(); ctx.comm->reset(); err = quadd_power_clk_start(); if (err < 0) { pr_err("error: power_clk start\n"); return err; } err = quadd_hrt_start(); if (err) { pr_err("error: hrt start\n"); return err; } } return 0; }