lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <4a69ef66-acc3-c8d6-342d-270be19f201a@linux.intel.com>
Date:   Tue, 19 Dec 2017 18:25:47 -0500
From:   "Liang, Kan" <kan.liang@...ux.intel.com>
To:     Peter Zijlstra <peterz@...radead.org>
Cc:     mingo@...hat.com, acme@...nel.org, linux-kernel@...r.kernel.org,
        tglx@...utronix.de, jolsa@...hat.com, eranian@...gle.com,
        ak@...ux.intel.com
Subject: Re: [PATCH 2/4] perf/x86/intel: fix event update for auto-reload



On 12/19/2017 5:07 PM, Peter Zijlstra wrote:
> On Tue, Dec 19, 2017 at 03:08:58PM -0500, Liang, Kan wrote:
>>> This all looks very wrong... In auto reload we should never call
>>> intel_pmu_save_and_restore() in the first place I think.
>>>
>>> Things like x86_perf_event_update() and x86_perf_event_set_period()
>>> simply _cannot_ do the right thing when we auto reload the counter.
>>>
>>
>> I think it should be OK to call it in first place.
>> For x86_perf_event_update(), the reload_times will tell if it's auto reload.
>> Both period_left and event->count are carefully recalculated for auto
>> reload.
> 
> How does prev_count make sense when we've already reloaded a bunch of
> times?

Same as non-auto-reload, it's the 'left' (unfinished) period from last time.
The period for the first record should always be the 'left' period no 
matter on which case.
For auto-reload, it doesn't need to increase the prev_count with the 
reload. Because for later records, the period should be exactly the same 
as the reload value.

To calculate the event->count,
For auto-reload, the event->count = prev_count + (reload times - 1) * 
reload value + gap between PMI trigger and PMI handler.

For non-auto-reload, the event->count = prev_count + gap between PMI 
trigger and PMI handler.

The 'prev_count' is same for both auto-reload and non-auto-reload.

The gap is a little bit tricky for auto-reload. Because it starts from 
-reload_value. But for non-auto-reload, it starts from 0.
"delta += (reload_val << shift);" is used to correct it.

> 
>> For x86_perf_event_set_period(), there is nothing special needed for auto
>> reload. The period is fixed. The period_left from x86_perf_event_update() is
>> already handled.
> 
> Hurm.. I see. But rather than make an ever bigger trainwreck of things,
> I'd rather you just write a special purpose intel_pmu_save_and_restart()
> just for AUTO_RELOAD.

OK. I will do it in V2.

Thanks,
Kan

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ