On (03/20/17 17:09), Petr Mladek wrote: [..] > > BTW: wake_up_klogd_work does not need to be per-CPU as well. > irq_work infrastructure heavily uses per-CPU variables. > But a global struct irq_work is safe, see irq_work_claim().
so I have a patch that turns wake_up_klogd_work into a global variable, out of curiosity, but I'm not entire sure about it. the sort of a problem is that queued irq_works still go into a per-CPU run_lists. per-CPU wake_up_klogd_work permits us to queue irq work on several CPUs so we might have better chances to execute wake_up_klogd_work_func(), while global wake_up_klogd_work will be only in one run_list. this can defer wake_up_klogd_work processing until that particular single CPU handles its interrupt and calls irq_work_run_list(). what do you think? -ss