• T
    init: don't call flush_scheduled_work() from do_initcalls() · ee4569a3
    Tejun Heo 提交于
    The call to flush_scheduled_work() in do_initcalls() is there to make
    sure all works queued to system_wq by initcalls finish before the init
    sections are dropped.
    
    However, the call doesn't make much sense at this point - there
    already are multiple different workqueues and different subsystems are
    free to create and use their own.  Ordering requirements are and
    should be expressed explicitly.
    
    Drop the call to prepare for the deprecation and removal of
    flush_scheduled_work().
    
    Andrew suggested adding sanity check where the workqueue code checks
    whether any pending or running work has the work function in the init
    text section.  However, checking this for running works requires the
    worker to keep track of the current function being executed, and
    checking only the pending works will miss most cases.  As a violation
    will almost always be caught by the usual page fault mechanism, I
    don't think it would be worthwhile to make the workqueue code track
    extra state just for this.
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    ee4569a3
main.c 21.5 KB