• Daniel Wagner's avatar
    firmware: do not use fw_lock for fw_state protection · 5b029624
    Daniel Wagner authored
    fw_lock is to use to protect 'corner cases' inside firmware_class. It
    is not exactly clear what those corner cases are nor what it exactly
    protects. fw_state can be used without needing the fw_lock to protect
    its state transition and wake ups.
    
    fw_state is holds the state in status and the completion is used to
    wake up all waiters (in this case that is the user land helper so only
    one). This operation has to be 'atomic' to avoid races.  We can do this
    by using swait which takes care we don't miss any wake up.
    
    We use also swait instead of wait because don't need all the additional
    features wait provides.
    
    Note there some more cleanups possible after with this change. For
    example for !CONFIG_FW_LOADER_USER_HELPER we don't check for the state
    anymore.  Let's to this in the next patch instead mingling to many
    changes into this one. And yes you get a gcc warning "‘__fw_state_check’
    defined but not used [-Wunused-function] code." for the time beeing.
    
    Cc: Ming Lei <ming.lei@canonical.com>
    Signed-off-by: default avatarDaniel Wagner <daniel.wagner@bmw-carit.de>
    Acked-by: default avatarLuis R. Rodriguez <mcgrof@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    5b029624
firmware_class.c 42.7 KB