Re: [PATCH] sparc: perf: fix updated event period in response to PERF_EVENT_IOC_PERIOD

2019-06-02 Thread David Miller
From: Young Xiao <92siuy...@gmail.com>
Date: Wed, 29 May 2019 10:21:48 +0800

> The PERF_EVENT_IOC_PERIOD ioctl command can be used to change the
> sample period of a running perf_event. Consequently, when calculating
> the next event period, the new period will only be considered after the
> previous one has overflowed.
> 
> This patch changes the calculation of the remaining event ticks so that
> they are offset if the period has changed.
> 
> See commit 3581fe0ef37c ("ARM: 7556/1: perf: fix updated event period in
> response to PERF_EVENT_IOC_PERIOD") for details.
> 
> Signed-off-by: Young Xiao <92siuy...@gmail.com>

Applied, thanks.


[PATCH] sparc: perf: fix updated event period in response to PERF_EVENT_IOC_PERIOD

2019-05-28 Thread Young Xiao
The PERF_EVENT_IOC_PERIOD ioctl command can be used to change the
sample period of a running perf_event. Consequently, when calculating
the next event period, the new period will only be considered after the
previous one has overflowed.

This patch changes the calculation of the remaining event ticks so that
they are offset if the period has changed.

See commit 3581fe0ef37c ("ARM: 7556/1: perf: fix updated event period in
response to PERF_EVENT_IOC_PERIOD") for details.

Signed-off-by: Young Xiao <92siuy...@gmail.com>
---
 arch/sparc/kernel/perf_event.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c
index 6de7c68..a58ae9c 100644
--- a/arch/sparc/kernel/perf_event.c
+++ b/arch/sparc/kernel/perf_event.c
@@ -891,6 +891,10 @@ static int sparc_perf_event_set_period(struct perf_event 
*event,
s64 period = hwc->sample_period;
int ret = 0;
 
+   /* The period may have been changed by PERF_EVENT_IOC_PERIOD */
+   if (unlikely(period != hwc->last_period))
+   left = period - (hwc->last_period - left);
+
if (unlikely(left <= -period)) {
left = period;
local64_set(>period_left, left);
-- 
2.7.4