| From | Greg Kroah-Hartman <> | Subject | [PATCH 4.13 050/110] s390/perf: fix bug when creating per-thread event | Date | Tue, 3 Oct 2017 14:29:12 +0200 |
| |
4.13-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pu Hou <bjhoupu@linux.vnet.ibm.com>
commit fc3100d64f0ae383ae8d845989103da06d62763b upstream.
A per-thread event could not be created correctly like below:
perf record --per-thread -e rB0000 -- sleep 1 Error: The sys_perf_event_open() syscall returned with 19 (No such device) for event (rB0000). /bin/dmesg may provide additional information. No CONFIG_PERF_EVENTS=y kernel support configured?
This bug was introduced by:
commit c311c797998c1e70eade463dd60b843da4f1a203 Author: Alexey Dobriyan <adobriyan@gmail.com> Date: Mon May 8 15:56:15 2017 -0700
cpumask: make "nr_cpumask_bits" unsigned
If a per-thread event is not attached to any CPU, the cpu field in struct perf_event is -1. The above commit converts the CPU number to unsigned int, which result in an illegal CPU number.
Fixes: c311c797998c ("cpumask: make "nr_cpumask_bits" unsigned") Cc: Alexey Dobriyan <adobriyan@gmail.com> Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Pu Hou <bjhoupu@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
--- arch/s390/kernel/perf_cpum_sf.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
--- a/arch/s390/kernel/perf_cpum_sf.c +++ b/arch/s390/kernel/perf_cpum_sf.c @@ -823,9 +823,12 @@ static int cpumsf_pmu_event_init(struct } /* Check online status of the CPU to which the event is pinned */ - if ((unsigned int)event->cpu >= nr_cpumask_bits || - (event->cpu >= 0 && !cpu_online(event->cpu))) - return -ENODEV; + if (event->cpu >= 0) { + if ((unsigned int)event->cpu >= nr_cpumask_bits) + return -ENODEV; + if (!cpu_online(event->cpu)) + return -ENODEV; + } /* Force reset of idle/hv excludes regardless of what the * user requested.
|