• Grant Likely's avatar
    drivercore: Fix ordering between deferred_probe and exiting initcalls · d72cca1e
    Grant Likely authored
    One of the side effects of deferred probe is that some drivers which
    used to be probed before initcalls completed are now happening slightly
    later. This causes two problems.
    - If a console driver gets deferred, then it may not be ready when
      userspace starts. For example, if a uart depends on pinctrl, then the
      uart will get deferred and /dev/console will not be available
    - __init sections will be discarded before built-in drivers are probed.
      Strictly speaking, __init functions should not be called in a drivers
      __probe path, but there are a lot of drivers (console stuff again)
      that do anyway. In the past it was perfectly safe to do so because all
      built-in drivers got probed before the end of initcalls.
    
    This patch fixes the problem by forcing the first pass of the deferred
    list to complete at late_initcall time. This is late enough to catch the
    drivers that are known to have the above issues.
    Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
    Tested-by: default avatarHaojian Zhuang <haojian.zhuang@linaro.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Russell King <linux@arm.linux.org.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: stable <stable@vger.kernel.org> # 3.4+
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    d72cca1e
dd.c 15.6 KB