s390/cpum_sf: Support ioctl PERF_EVENT_IOC_PERIOD
authorThomas Richter <tmricht@linux.ibm.com>
Mon, 16 Sep 2019 09:21:23 +0000 (11:21 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Thu, 19 Sep 2019 10:56:07 +0000 (12:56 +0200)
commit2cb549a821e9daf441b62d55ca8eb6a9c22acf95
tree6b5e286bf68c8a39d82109c41fd8aa045235db1f
parentcf2957f3907e44ca40392ac19a0c22a14e3fdc18
s390/cpum_sf: Support ioctl PERF_EVENT_IOC_PERIOD

A perf_event can be set up to deliver overflow notifications
via SIGIO signal.  The setup of the event is:

 1. create event with perf_event_open()
 2. assign it a signal for I/O notification with fcntl()
 3. Install signal handler and consume samples

The initial setup of perf_event_open() determines the
period/frequency time span needed to elapse before each signal
is delivered to the user process.

While the event is active, system call
ioctl(.., PERF_EVENT_IOC_PERIOD, value) can be used the change
the frequency/period time span of the active event.
The remaining signal handler invocations honour the new value.

This does not work on s390. In fact the time span does not change
regardless of ioctl's third argument 'value'. The call succeeds
but the time span does not change.

Support this behavior and make it common with other platforms.
This is achieved by changing the interval value of the sampling
control block accordingly and feed this new value every time
the event is enabled using pmu_event_enable().

Before this change the interval value was set only once at
pmu_event_add() and never changed.

Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/perf_event.h
arch/s390/kernel/perf_cpum_sf.c