• Michael Ellerman's avatar
    powerpc/mpic: Check if cpu_possible() in mpic_physmask() · 0834d627
    Michael Ellerman authored
    In mpic_physmask() we loop over all CPUs up to 32, then get the hard
    SMP processor id of that CPU.
    
    Currently that's possibly walking off the end of the paca array, but
    in a future patch we will change the paca array to be an array of
    pointers, and in that case we will get a NULL for missing CPUs and
    oops. eg:
    
      Unable to handle kernel paging request for data at address 0x88888888888888b8
      Faulting instruction address: 0xc00000000004e380
      Oops: Kernel access of bad area, sig: 11 [#1]
      ...
      NIP .mpic_set_affinity+0x60/0x1a0
      LR  .irq_do_set_affinity+0x48/0x100
    
    Fix it by checking the CPU is possible, this also fixes the code if
    there are gaps in the CPU numbering which probably never happens on
    mpic systems but who knows.
    Debugged-by: default avatarNicholas Piggin <npiggin@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    0834d627
mpic.c 51.1 KB