• L
    mwl8k: fix firmware command serialisation · 618952a7
    Lennert Buytenhek 提交于
    The current mwl8k_priv->fw_lock spinlock doesn't actually protect
    against multiple commands being submitted at once, as it is not kept
    held over the entire firmware command submission.  And since waiting
    for command completion sleeps, we can't use a spinlock anyway.
    
    To fix mwl8k firmware command serialisation properly, we have the
    following requirements:
    - Some commands require that the packet transmit path is idle when
      the command is issued.  (For simplicity, we'll just quiesce the
      transmit path for every command.)
    - There are certain sequences of commands that need to be issued to
      the hardware sequentially, with no other intervening commands.
    
    This leads to an implementation of a "firmware lock" as a mutex that
    can be taken recursively, and which is taken by both the low-level
    command submission function (mwl8k_post_cmd) as well as any users of
    that function that require issuing of an atomic sequence of commands,
    and quiesces the transmit path whenever it's taken.
    Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
    Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
    618952a7
mwl8k.c 79.9 KB