• Emmanuel Grumbach's avatar
    iwlwifi: pcie: fix stuck queue detection for sleeping clients · aecdc63d
    Emmanuel Grumbach authored
    The stuck queue detection mechanism allows to detect queues
    that are stuck. For sleeping clients, a queue may rightfully
    be stuck: if a poor client implementation stays asleep for
    more than 10s, then we don't want to trigger recovery flows
    because of that client.
    In order to cope with this, I added a mechanism that
    monitors the state of the client: when a client goes to
    sleep, the timer of his queues is frozen. When he wakes up,
    the timer is reset to the right value so that if a client
    was awake for more than 10s and the queues are stuck, only
    then, the recovery flow will kick in.
    This is valid only on non-shared queues: A-MPDU queues.
    
    There was a bug in case we Tx to a sleeping client that has
    an empty A-MPDU queue: the timer was armed to now + 10s.
    This is bad, but pretty harmless.
    The problem is that when the client wakes up, the timer is
    modified to be now + remainder. But remainder is 0 since the
    queue was empty when that client went to sleep...
    
    Fix this by checking the state of the client before playing
    with the timer when we add a packet to an empty queue.
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    aecdc63d
tx.c 53.3 KB