lkml.org 
[lkml]   [2008]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 05/17] ath9k/mac80211: disallow fragmentation in ath9k, report to userspace
    2.6.27-stable review patch.  If anyone has any objections, please let us
    know.

    ------------------
    From: Johannes Berg <johannes@sipsolutions.net>

    commit 4233df6b748193d45f79fb7448991a473061a65d upstream

    As I've reported, ath9k currently fails utterly when fragmentation
    is enabled. This makes ath9k "support" hardware fragmentation by
    not supporting fragmentation at all to avoid the double-free issue.
    The patch also changes mac80211 to report errors from the driver
    operation to userspace.

    That hack in ath9k should be removed once the rate control algorithm
    it has is fixed, and we can at that time consider removing the hw
    fragmentation support entirely since it's not used by any driver.

    Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
    Acked-by: Luis R. Rodriguez <lrodriguez@atheros.com>
    Signed-off-by: John W. Linville <linville@tuxdriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/net/wireless/ath9k/main.c | 8 +++++++-
    net/mac80211/wext.c | 2 +-
    2 files changed, 8 insertions(+), 2 deletions(-)

    --- a/drivers/net/wireless/ath9k/main.c
    +++ b/drivers/net/wireless/ath9k/main.c
    @@ -1007,6 +1007,11 @@ static int ath9k_ampdu_action(struct iee
    return ret;
    }

    +static int ath9k_no_fragmentation(struct ieee80211_hw *hw, u32 value)
    +{
    + return -EOPNOTSUPP;
    +}
    +
    static struct ieee80211_ops ath9k_ops = {
    .tx = ath9k_tx,
    .start = ath9k_start,
    @@ -1031,7 +1036,8 @@ static struct ieee80211_ops ath9k_ops =
    .get_tsf = ath9k_get_tsf,
    .reset_tsf = ath9k_reset_tsf,
    .tx_last_beacon = NULL,
    - .ampdu_action = ath9k_ampdu_action
    + .ampdu_action = ath9k_ampdu_action,
    + .set_frag_threshold = ath9k_no_fragmentation,
    };

    void ath_get_beaconconfig(struct ath_softc *sc,
    --- a/net/mac80211/wext.c
    +++ b/net/mac80211/wext.c
    @@ -804,7 +804,7 @@ static int ieee80211_ioctl_siwfrag(struc
    * configure it here */

    if (local->ops->set_frag_threshold)
    - local->ops->set_frag_threshold(
    + return local->ops->set_frag_threshold(
    local_to_hw(local),
    local->fragmentation_threshold);

    --


    \
     
     \ /
      Last update: 2008-10-18 21:07    [W:4.046 / U:0.212 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site