• Thomas Richter's avatar
    s390/cpumf: Fix warning from check_processor_id · b6ffdf27
    Thomas Richter authored
    Function __hw_perf_event_init() used a CPU variable without
    ensuring CPU preemption has been disabled. This caused the
    following warning in the kernel log:
    
      [ 7.277085] BUG: using smp_processor_id() in preemptible
                     [00000000] code: cf-csdiag/1892
      [ 7.277111] caller is cf_diag_event_init+0x13a/0x338
      [ 7.277122] CPU: 10 PID: 1892 Comm: cf-csdiag Not tainted
                     5.0.0-20190318.rc0.git0.9e1a11e0f602.300.fc29.s390x+debug #1
      [ 7.277131] Hardware name: IBM 2964 NC9 712 (LPAR)
      [ 7.277139] Call Trace:
      [ 7.277150] ([<000000000011385a>] show_stack+0x82/0xd0)
      [ 7.277161]  [<0000000000b7a71a>] dump_stack+0x92/0xd0
      [ 7.277174]  [<00000000007b7e9c>] check_preemption_disabled+0xe4/0x100
      [ 7.277183]  [<00000000001228aa>] cf_diag_event_init+0x13a/0x338
      [ 7.277195]  [<00000000002cf3aa>] perf_try_init_event+0x72/0xf0
      [ 7.277204]  [<00000000002d0bba>] perf_event_alloc+0x6fa/0xce0
      [ 7.277214]  [<00000000002dc4a8>] __s390x_sys_perf_event_open+0x398/0xd50
      [ 7.277224]  [<0000000000b9e8f0>] system_call+0xdc/0x2d8
      [ 7.277233] 2 locks held by cf-csdiag/1892:
      [ 7.277241]  #0: 00000000976f5510 (&sig->cred_guard_mutex){+.+.},
                      at: __s390x_sys_perf_event_open+0xd2e/0xd50
      [ 7.277257]  #1: 00000000363b11bd (&pmus_srcu){....},
                      at: perf_event_alloc+0x52e/0xce0
    
    The variable is now accessed in proper context. Use
    get_cpu_var()/put_cpu_var() pair to disable
    preemption during access.
    As the hardware authorization settings apply to all CPUs, it
    does not matter which CPU is used to check the authorization setting.
    
    Remove the event->count assignment. It is not needed as function
    perf_event_alloc() allocates memory for the event with kzalloc() and
    thus count is already set to zero.
    
    Fixes: fe5908bc ("s390/cpum_cf_diag: Add support for s390 counter facility diagnostic trace")
    Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
    Reviewed-by: default avatarHendrik Brueckner <brueckner@linux.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    b6ffdf27
perf_cpum_cf_diag.c 20.5 KB