• M
    powerpc/pseries: Make RAS IRQ explicitly dependent on DLPAR WQ · e2d59152
    Michael Ellerman 提交于
    The hotplug code uses its own workqueue to handle IRQ requests
    (pseries_hp_wq), however that workqueue is initialized after
    init_ras_IRQ(). That can lead to a kernel panic if any hotplug
    interrupts fire after init_ras_IRQ() but before pseries_hp_wq is
    initialised. eg:
    
      UDP-Lite hash table entries: 2048 (order: 0, 65536 bytes)
      NET: Registered protocol family 1
      Unpacking initramfs...
      (qemu) object_add memory-backend-ram,id=mem1,size=10G
      (qemu) device_add pc-dimm,id=dimm1,memdev=mem1
      Unable to handle kernel paging request for data at address 0xf94d03007c421378
      Faulting instruction address: 0xc00000000012d744
      Oops: Kernel access of bad area, sig: 11 [#1]
      LE SMP NR_CPUS=2048 NUMA pSeries
      Modules linked in:
      CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.15.0-rc2-ziviani+ #26
      task:         (ptrval) task.stack:         (ptrval)
      NIP:  c00000000012d744 LR: c00000000012d744 CTR: 0000000000000000
      REGS:         (ptrval) TRAP: 0380   Not tainted  (4.15.0-rc2-ziviani+)
      MSR:  8000000000009033 <SF,EE,ME,IR,DR,RI,LE>  CR: 28088042  XER: 20040000
      CFAR: c00000000012d3c4 SOFTE: 0
      ...
      NIP [c00000000012d744] __queue_work+0xd4/0x5c0
      LR [c00000000012d744] __queue_work+0xd4/0x5c0
      Call Trace:
      [c0000000fffefb90] [c00000000012d744] __queue_work+0xd4/0x5c0 (unreliable)
      [c0000000fffefc70] [c00000000012dce4] queue_work_on+0xb4/0xf0
    
    This commit makes the RAS IRQ registration explicitly dependent on the
    creation of the pseries_hp_wq.
    Reported-by: NMin Deng <mdeng@redhat.com>
    Reported-by: NDaniel Henrique Barboza <danielhb@linux.vnet.ibm.com>
    Tested-by: NJose Ricardo Ziviani <joserz@linux.vnet.ibm.com>
    Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
    Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
    e2d59152
pseries.h 2.6 KB