Changeset 38362


Ignore:
Timestamp:
2013-10-10T23:10:45+02:00 (4 years ago)
Author:
nbd
Message:

ath9k: fix rx issues introduced in my last commit (fixes #14307)

Signed-off-by: Felix Fietkau <nbd@…>

Location:
trunk/package/kernel/mac80211/patches
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/kernel/mac80211/patches/300-pending_work.patch

    r38354 r38362  
    53005300 bool is_ath9k_unloaded; 
    53015301 /* We use the hw_value as an index into our private channel structure */ 
    5302 @@ -429,7 +429,6 @@ static int ath9k_init_queues(struct ath_ 
     5302@@ -339,7 +339,6 @@ int ath_descdma_setup(struct ath_softc * 
     5303 { 
     5304        struct ath_common *common = ath9k_hw_common(sc->sc_ah); 
     5305        u8 *ds; 
     5306-       struct ath_buf *bf; 
     5307        int i, bsize, desc_len; 
     5308  
     5309        ath_dbg(common, CONFIG, "%s DMA: %u buffers %u desc/buf\n", 
     5310@@ -391,33 +390,68 @@ int ath_descdma_setup(struct ath_softc * 
     5311                ito64(dd->dd_desc_paddr), /*XXX*/(u32) dd->dd_desc_len); 
     5312  
     5313        /* allocate buffers */ 
     5314-       bsize = sizeof(struct ath_buf) * nbuf; 
     5315-       bf = devm_kzalloc(sc->dev, bsize, GFP_KERNEL); 
     5316-       if (!bf) 
     5317-               return -ENOMEM; 
     5318+       if (is_tx) { 
     5319+               struct ath_buf *bf; 
     5320+ 
     5321+               bsize = sizeof(struct ath_buf) * nbuf; 
     5322+               bf = devm_kzalloc(sc->dev, bsize, GFP_KERNEL); 
     5323+               if (!bf) 
     5324+                       return -ENOMEM; 
     5325+ 
     5326+               for (i = 0; i < nbuf; i++, bf++, ds += (desc_len * ndesc)) { 
     5327+                       bf->bf_desc = ds; 
     5328+                       bf->bf_daddr = DS2PHYS(dd, ds); 
     5329+ 
     5330+                       if (!(sc->sc_ah->caps.hw_caps & 
     5331+                                 ATH9K_HW_CAP_4KB_SPLITTRANS)) { 
     5332+                               /* 
     5333+                                * Skip descriptor addresses which can cause 4KB 
     5334+                                * boundary crossing (addr + length) with a 32 dword 
     5335+                                * descriptor fetch. 
     5336+                                */ 
     5337+                               while (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr)) { 
     5338+                                       BUG_ON((caddr_t) bf->bf_desc >= 
     5339+                                                  ((caddr_t) dd->dd_desc + 
     5340+                                               dd->dd_desc_len)); 
     5341+ 
     5342+                                       ds += (desc_len * ndesc); 
     5343+                                       bf->bf_desc = ds; 
     5344+                                       bf->bf_daddr = DS2PHYS(dd, ds); 
     5345+                               } 
     5346+                       } 
     5347+                       list_add_tail(&bf->list, head); 
     5348+               } 
     5349+       } else { 
     5350+               struct ath_rxbuf *bf; 
     5351  
     5352-       for (i = 0; i < nbuf; i++, bf++, ds += (desc_len * ndesc)) { 
     5353-               bf->bf_desc = ds; 
     5354-               bf->bf_daddr = DS2PHYS(dd, ds); 
     5355- 
     5356-               if (!(sc->sc_ah->caps.hw_caps & 
     5357-                     ATH9K_HW_CAP_4KB_SPLITTRANS)) { 
     5358-                       /* 
     5359-                        * Skip descriptor addresses which can cause 4KB 
     5360-                        * boundary crossing (addr + length) with a 32 dword 
     5361-                        * descriptor fetch. 
     5362-                        */ 
     5363-                       while (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr)) { 
     5364-                               BUG_ON((caddr_t) bf->bf_desc >= 
     5365-                                      ((caddr_t) dd->dd_desc + 
     5366-                                       dd->dd_desc_len)); 
     5367- 
     5368-                               ds += (desc_len * ndesc); 
     5369-                               bf->bf_desc = ds; 
     5370-                               bf->bf_daddr = DS2PHYS(dd, ds); 
     5371+               bsize = sizeof(struct ath_buf) * nbuf; 
     5372+               bf = devm_kzalloc(sc->dev, bsize, GFP_KERNEL); 
     5373+               if (!bf) 
     5374+                       return -ENOMEM; 
     5375+ 
     5376+               for (i = 0; i < nbuf; i++, bf++, ds += (desc_len * ndesc)) { 
     5377+                       bf->bf_desc = ds; 
     5378+                       bf->bf_daddr = DS2PHYS(dd, ds); 
     5379+ 
     5380+                       if (!(sc->sc_ah->caps.hw_caps & 
     5381+                                 ATH9K_HW_CAP_4KB_SPLITTRANS)) { 
     5382+                               /* 
     5383+                                * Skip descriptor addresses which can cause 4KB 
     5384+                                * boundary crossing (addr + length) with a 32 dword 
     5385+                                * descriptor fetch. 
     5386+                                */ 
     5387+                               while (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr)) { 
     5388+                                       BUG_ON((caddr_t) bf->bf_desc >= 
     5389+                                                  ((caddr_t) dd->dd_desc + 
     5390+                                               dd->dd_desc_len)); 
     5391+ 
     5392+                                       ds += (desc_len * ndesc); 
     5393+                                       bf->bf_desc = ds; 
     5394+                                       bf->bf_daddr = DS2PHYS(dd, ds); 
     5395+                               } 
     5396                        } 
     5397+                       list_add_tail(&bf->list, head); 
     5398                } 
     5399-               list_add_tail(&bf->list, head); 
     5400        } 
     5401        return 0; 
     5402 } 
     5403@@ -429,7 +463,6 @@ static int ath9k_init_queues(struct ath_ 
    53035404        sc->beacon.beaconq = ath9k_hw_beaconq_setup(sc->sc_ah); 
    53045405        sc->beacon.cabq = ath_txq_setup(sc, ATH9K_TX_QUEUE_CAB, 0); 
     
    53085409  
    53095410        sc->tx.uapsdq = ath_txq_setup(sc, ATH9K_TX_QUEUE_UAPSD, 0); 
    5310 @@ -516,6 +515,7 @@ static void ath9k_init_misc(struct ath_s 
     5411@@ -516,6 +549,7 @@ static void ath9k_init_misc(struct ath_s 
    53115412 static void ath9k_init_platform(struct ath_softc *sc) 
    53125413 { 
     
    53165417  
    53175418        if (common->bus_ops->ath_bus_type != ATH_PCI) 
    5318 @@ -525,12 +525,27 @@ static void ath9k_init_platform(struct a 
     5419@@ -525,12 +559,27 @@ static void ath9k_init_platform(struct a 
    53195420                               ATH9K_PCI_CUS230)) { 
    53205421                ah->config.xlna_gpio = 9; 
     
    53455446 } 
    53465447  
    5347 @@ -584,6 +599,7 @@ static int ath9k_init_softc(u16 devid, s 
     5448@@ -584,6 +633,7 @@ static int ath9k_init_softc(u16 devid, s 
    53485449 { 
    53495450        struct ath9k_platform_data *pdata = sc->dev->platform_data; 
     
    53535454        int ret = 0, i; 
    53545455        int csz = 0; 
    5355 @@ -600,6 +616,7 @@ static int ath9k_init_softc(u16 devid, s 
     5456@@ -600,6 +650,7 @@ static int ath9k_init_softc(u16 devid, s 
    53565457        ah->reg_ops.rmw = ath9k_reg_rmw; 
    53575458        atomic_set(&ah->intr_ref_cnt, -1); 
     
    53615462        sc->dfs_detector = dfs_pattern_detector_init(ah, NL80211_DFS_UNSET); 
    53625463  
    5363 @@ -631,11 +648,15 @@ static int ath9k_init_softc(u16 devid, s 
     5464@@ -631,11 +682,15 @@ static int ath9k_init_softc(u16 devid, s 
    53645465        ath9k_init_platform(sc); 
    53655466  
     
    53815482        spin_lock_init(&common->cc_lock); 
    53825483  
    5383 @@ -710,13 +731,15 @@ static void ath9k_init_band_txpower(stru 
     5484@@ -710,13 +765,15 @@ static void ath9k_init_band_txpower(stru 
    53845485        struct ieee80211_supported_band *sband; 
    53855486        struct ieee80211_channel *chan; 
     
    53985499        } 
    53995500 } 
    5400 @@ -802,7 +825,8 @@ void ath9k_set_hw_capab(struct ath_softc 
     5501@@ -802,7 +859,8 @@ void ath9k_set_hw_capab(struct ath_softc 
    54015502                IEEE80211_HW_PS_NULLFUNC_STACK | 
    54025503                IEEE80211_HW_SPECTRUM_MGMT | 
  • trunk/package/kernel/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch

    r38354 r38362  
    11--- a/drivers/net/wireless/ath/ath9k/init.c 
    22+++ b/drivers/net/wireless/ath/ath9k/init.c 
    3 @@ -778,6 +778,7 @@ static const struct ieee80211_iface_limi 
     3@@ -812,6 +812,7 @@ static const struct ieee80211_iface_limi 
    44 #endif 
    55                                 BIT(NL80211_IFTYPE_AP) | 
  • trunk/package/kernel/mac80211/patches/501-ath9k-eeprom_endianess.patch

    r38354 r38362  
    8282--- a/drivers/net/wireless/ath/ath9k/init.c 
    8383+++ b/drivers/net/wireless/ath/ath9k/init.c 
    84 @@ -630,6 +630,8 @@ static int ath9k_init_softc(u16 devid, s 
     84@@ -664,6 +664,8 @@ static int ath9k_init_softc(u16 devid, s 
    8585                ah->is_clk_25mhz = pdata->is_clk_25mhz; 
    8686                ah->get_mac_revision = pdata->get_mac_revision; 
  • trunk/package/kernel/mac80211/patches/502-ath9k_ahb_init.patch

    r38354 r38362  
    11--- a/drivers/net/wireless/ath/ath9k/init.c 
    22+++ b/drivers/net/wireless/ath/ath9k/init.c 
    3 @@ -1035,23 +1035,23 @@ static int __init ath9k_init(void) 
     3@@ -1069,23 +1069,23 @@ static int __init ath9k_init(void) 
    44                goto err_out; 
    55        } 
  • trunk/package/kernel/mac80211/patches/530-ath9k_extra_leds.patch

    r38354 r38362  
    163163--- a/drivers/net/wireless/ath/ath9k/init.c 
    164164+++ b/drivers/net/wireless/ath/ath9k/init.c 
    165 @@ -942,7 +942,7 @@ int ath9k_init_device(u16 devid, struct  
     165@@ -976,7 +976,7 @@ int ath9k_init_device(u16 devid, struct  
    166166  
    167167 #ifdef CPTCFG_MAC80211_LEDS 
  • trunk/package/kernel/mac80211/patches/543-ath9k-allow-to-disable-bands-via-platform-data.patch

    r38354 r38362  
    6060--- a/drivers/net/wireless/ath/ath9k/init.c 
    6161+++ b/drivers/net/wireless/ath/ath9k/init.c 
    62 @@ -630,6 +630,8 @@ static int ath9k_init_softc(u16 devid, s 
     62@@ -664,6 +664,8 @@ static int ath9k_init_softc(u16 devid, s 
    6363                ah->is_clk_25mhz = pdata->is_clk_25mhz; 
    6464                ah->get_mac_revision = pdata->get_mac_revision; 
Note: See TracChangeset for help on using the changeset viewer.