On Oct 5, 2019, at 8:44 PM, Andrew Morton <akpm@linux-foundation.org> wrote:

"ease" isn't the main objective.  A more important question is "what
makes sense".  We should be able to call printk() from anywhere, any
time under any conditions.  That can't be done 100% but it is the
objective.  printk() should be robust and not being able to call
printk() while holding zone->lock isn't robust!

https://github.com/torvalds/linux/commit/dbdda842fe96f8932bae554f0adf463c27c42bc7

If you look at the above commit, it explicitly call out the possible deadlock scenarios and recommend to call printk_deferred() instead in those areas of code where zone->lock looks like one of those candidates.