• Mukesh Ojha's avatar
    firmware_loader: Abort all upcoming firmware load request once reboot triggered · effd7c70
    Mukesh Ojha authored
    There could be following scenario where there is a ongoing reboot
    is going from processA which tries to call all the reboot notifier
    callback and one of them is firmware reboot call which tries to
    abort all the ongoing firmware userspace request under fw_lock but
    there could be another processB which tries to do request firmware,
    which came just after abort done from ProcessA and ask for userspace
    to load the firmware and this can stop the ongoing reboot ProcessA
    to stall for next 60s(default timeout) which may not be expected
    behaviour everyone like to see, instead we should abort any firmware
    load request which came once firmware knows about the reboot through
    notification.
    
          ProcessA                             ProcessB
    
    kernel_restart_prepare
      blocking_notifier_call_chain
       fw_shutdown_notify
         kill_pending_fw_fallback_reqs
          __fw_load_abort
           fw_state_aborted                request_firmware
             __fw_state_set                 firmware_fallback_sysfs
    ...                                       fw_load_from_user_helper
    ..                                         ...
    .                                          ..
                                                usermodehelper_read_trylock
                                                 fw_load_sysfs_fallback
                                                  fw_sysfs_wait_timeout
    usermodehelper_disable
     __usermodehelper_disable
      down_write()
    Signed-off-by: default avatarMukesh Ojha <quic_mojha@quicinc.com>
    Acked-by: default avatarLuis Chamberlain <mcgrof@kernel.org>
    Link: https://lore.kernel.org/r/1698330459-31776-2-git-send-email-quic_mojha@quicinc.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    effd7c70
main.c 40.5 KB