• Johannes Berg's avatar
    mac80211: process station blockack action frames from work · 8b9a4e6e
    Johannes Berg authored
    Processing an association response could take a bit
    of time while we set up the hardware etc. During that
    time, the AP might already send a blockack request.
    If this happens very quickly on a fairly slow machine,
    we can end up processing the blockack request before
    the association processing has finished. Since the
    blockack processing cannot sleep right now, we also
    cannot make it wait in the driver.
    
    As a result, sometimes on slow machines the iwlagn
    driver gets totally confused, and no traffic can pass
    when the aggregation setup was done before the assoc
    setup completed.
    
    I'm working on a proper fix for this, which involves
    queuing all blockack category action frames from a
    work struct, and also allowing the ampdu_action driver
    callback to sleep, which will generally clean up the
    code and make things easier.
    
    However, this is a very involved and complex change.
    To fix the problem at hand in a way that can also be
    backported to stable, I've come up with this patch.
    Here, I simply process all aggregation action frames
    from the managed interface skb queue, which means
    their processing will be serialized with processing
    the association response, thereby fixing the problem.
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    Cc: stable@kernel.org
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    8b9a4e6e
mlme.c 65.1 KB