On Tue, Jul 14, 2015 at 08:01:50PM -0700, Sukadev Bhattiprolu wrote:
> +DEFINE_PER_CPU(int, nop_txn_flags);
> +
> +static int nop_txn_flags_get_and_clear(void)
> +{
> + int *flagsp;
> + int flags;
> +
> + flagsp = &get_cpu_var(nop_txn_flags);
> +
> + flags = *flagsp;
> + *flagsp = 0;
> +
> + put_cpu_var(nop_txn_flags);
> +
> + return flags;
> +}
> +
> +static void nop_txn_flags_set(int flags)
> +{
> + int *flagsp;
> +
> + flagsp = &get_cpu_var(nop_txn_flags);
> + *flagsp = flags;
> + put_cpu_var(nop_txn_flags);
> +}
That's really horrible, see below:
> +static void perf_pmu_start_txn(struct pmu *pmu, int flags)
> {
__this_cpu_write(nop_txn_flags, flags);
> +
> + if (flags & ~PERF_PMU_TXN_ADD)
> + return;
> +
> perf_pmu_disable(pmu);
> }
>
> static int perf_pmu_commit_txn(struct pmu *pmu)
> {
int flags = __this_cpu_read(nop_txn_flags);
__this_cpu_write(nop_txn_flags, 0);
> +
> + if (flags & ~PERF_PMU_TXN_ADD)
> + return 0;
> +
> perf_pmu_enable(pmu);
> return 0;
> }
>
> static void perf_pmu_cancel_txn(struct pmu *pmu)
> {
int flags = __this_cpu_read(nop_txn_flags);
__this_cpu_write(nop_txn_flags, 0);
> +
> + if (flags & ~PERF_PMU_TXN_ADD)
> + return;
> +
> perf_pmu_enable(pmu);
> }
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/