Move emergency_restart call out of bh in Linux ipod module on aarch64/powerpc64.
Calling emergency_restart directly from the softirq/bh ipod icmp handler has a history of causing panics prior to the intended shutdown on both aarch64 and powerpc64. The panics didn't inhibit the intended reboot, but on OPAL-booted ppc64le, were very noisy, because each "hyperthread" cpu attempted a dealloc of the irq handler from within the handler, so the console got a noisy stack trace for each thread. So now if IPOD_QUEUE_RESTART is defined (and it is by default on aarch64 and powerpc64), we move the call to emergency_restart into a dedicated, preallocated workqueue thread, whose sole purpose is to (eventually) reboot the machine. Wasteful, but we don't want to need to initialize anything, or use a shared workqueue, if an IPOD is really necessary, at IPOD time.
Showing with 34 additions and 2 deletions