s390/perf: fix bug when creating per-thread event
authorPu Hou <bjhoupu@linux.vnet.ibm.com>
Tue, 5 Sep 2017 03:17:24 +0000 (05:17 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 13 Sep 2017 14:34:23 +0000 (16:34 +0200)
commitfc3100d64f0ae383ae8d845989103da06d62763b
tree76247c79910ab0b5f8519d830cf2441fe3dabec2
parent6d8ef53e8b2fed8b0f91df0c6da7cc92747d934a
s390/perf: fix bug when creating per-thread event

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: <stable@vger.kernel.org> # v4.12+
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>
arch/s390/kernel/perf_cpum_sf.c