[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <F6DBB30D-B883-4C85-AFB8-8B85F356BA54@fb.com>
Date: Wed, 29 Apr 2020 20:44:54 +0000
From: Song Liu <songliubraving@...com>
To: Peter Zijlstra <peterz@...radead.org>
CC: linux-kernel <linux-kernel@...r.kernel.org>,
Kernel Team <Kernel-team@...com>,
Arnaldo Carvalho de Melo <acme@...hat.com>,
Jiri Olsa <jolsa@...nel.org>,
Alexey Budankov <alexey.budankov@...ux.intel.com>,
Namhyung Kim <namhyung@...nel.org>, Tejun Heo <tj@...nel.org>,
"kernel test robot" <rong.a.chen@...el.com>
Subject: Re: [PATCH v12] perf: Sharing PMU counters across compatible events
> On Apr 20, 2020, at 4:04 PM, Peter Zijlstra <peterz@...radead.org> wrote:
>>
>> static inline u64 perf_event_count(struct perf_event *event)
>> {
>> - return local64_read(&event->count) + atomic64_read(&event->child_count);
>> + u64 count;
>> +
>> + if (likely(event->dup_master != event))
>> + count = local64_read(&event->count);
>> + else
>> + count = local64_read(&event->master_count);
>> +
>> + return count + atomic64_read(&event->child_count);
>> }
>
> So lsat time I said something about SMP ordering here. Where did that
> go?
I am not quite sure about this one. I guess the following is sufficient.
Could you please help me double check?
Thanks,
Song
static inline u64 perf_event_count(struct perf_event *event)
{
struct perf_event *master;
u64 count;
again:
master = READ_ONCE(event->dup_master);
if (master == EVENT_TOMBSTONE)
goto again;
if (likely(master != event))
count = local64_read(&event->count);
else
count = local64_read(&event->master_count);
return count + atomic64_read(&event->child_count);
}
Powered by blists - more mailing lists