All of lore.kernel.org
 help / color / mirror / Atom feed
* [ath9k-devel] Fixing Minstrel Rate
@ 2013-10-13 12:38 Ahmad Showail
  0 siblings, 0 replies; 3+ messages in thread
From: Ahmad Showail @ 2013-10-13 12:38 UTC (permalink / raw)
  To: ath9k-devel

Using Linux kernel version 3.3.4, I was able to fix minstrel rate by
writing static MCS index to debugfs:ieee80211/phyX/rc/fixed_rate_idx.
However, after updating my kernel to version 3.9.10, this method does not
fix the rate any more. Below is the difference between the old and recent
rc80211_minstrel_ht.c. I tried compiling the 3.9 kernel using the old
rc80211_minstrel_ht.c file and found out that the rate fixing is working
again. However, a simple netperf test shows a huge drop in throughput (from
150 to 35 Mb/s) before and after this change.

Any ideas how to fix minstrel rate in recent kernel versions?
---------------------------------------------------------------------------------
[xxxx at m70 mac80211]$ diff rc80211_minstrel_ht.c
original_rc80211_minstrel_ht.c
128a129,131
> static void
> minstrel_ht_update_rates(struct minstrel_priv *mp, struct minstrel_ht_sta
*mi);
>
204a208
>     unsigned int prob;
206a211
>     prob = mr->probability;
208c213
<     if (mr->probability < MINSTREL_FRAC(1, 10)) {
---
>     if (prob < MINSTREL_FRAC(1, 10)) {
212a218,224
>     /*
>      * For the throughput calculation, limit the probability value to 90%
to
>      * account for collision related packet error rate fluctuation
>      */
>     if (prob > MINSTREL_FRAC(9, 10))
>         prob = MINSTREL_FRAC(9, 10);
>
237a250
>     bool mi_rates_valid = false;
248,250d260
<     mi->max_tp_rate = 0;
<     mi->max_tp_rate2 = 0;
<     mi->max_prob_rate = 0;
252a263,264
>         bool mg_rates_valid = false;
>
262,264d273
<         mg->max_tp_rate = 0;
<         mg->max_tp_rate2 = 0;
<         mg->max_prob_rate = 0;
270a280,291
>             /* initialize rates selections starting indexes */
>             if (!mg_rates_valid) {
>                 mg->max_tp_rate = mg->max_tp_rate2 =
>                     mg->max_prob_rate = i;
>                 if (!mi_rates_valid) {
>                     mi->max_tp_rate = mi->max_tp_rate2 =
>                         mi->max_prob_rate = i;
>                     mi_rates_valid = true;
>                 }
>                 mg_rates_valid = true;
>             }
>
450c471
<     bool last;
---
>     bool last, update = false;
499c520
<         MINSTREL_FRAC(20, 100))
---
>         MINSTREL_FRAC(20, 100)) {
500a522,523
>         update = true;
>     }
505c528
<         MINSTREL_FRAC(20, 100))
---
>         MINSTREL_FRAC(20, 100)) {
506a530,531
>         update = true;
>     }
508a534
>         update = true;
513a540,542
>
>     if (update)
>         minstrel_ht_update_rates(mp, mi);
577,578c606
<                      struct ieee80211_tx_rate *rate, int index,
<                      bool sample, bool rtscts)
---
>                      struct ieee80211_sta_rates *ratetbl, int offset, int
index)
581a610,611
>     u8 idx;
>     u16 flags;
587,598c617,625
<     if (sample)
<         rate->count = 1;
<     else if (mr->probability < MINSTREL_FRAC(20, 100))
<         rate->count = 2;
<     else if (rtscts)
<         rate->count = mr->retry_count_rtscts;
<     else
<         rate->count = mr->retry_count;
<
<     rate->flags = 0;
<     if (rtscts)
<         rate->flags |= IEEE80211_TX_RC_USE_RTS_CTS;
---
>     if (mr->probability < MINSTREL_FRAC(20, 100) || !mr->retry_count) {
>         ratetbl->rate[offset].count = 2;
>         ratetbl->rate[offset].count_rts = 2;
>         ratetbl->rate[offset].count_cts = 2;
>     } else {
>         ratetbl->rate[offset].count = mr->retry_count;
>         ratetbl->rate[offset].count_cts = mr->retry_count;
>         ratetbl->rate[offset].count_rts = mr->retry_count_rtscts;
>     }
601c628,652
<         rate->idx = mp->cck_rates[index % ARRAY_SIZE(mp->cck_rates)];
---
>         idx = mp->cck_rates[index % ARRAY_SIZE(mp->cck_rates)];
>         flags = 0;
>     } else {
>         idx = index % MCS_GROUP_RATES +
>               (group->streams - 1) * MCS_GROUP_RATES;
>         flags = IEEE80211_TX_RC_MCS | group->flags;
>     }
>
>     if (offset > 0) {
>         ratetbl->rate[offset].count = ratetbl->rate[offset].count_rts;
>         flags |= IEEE80211_TX_RC_USE_RTS_CTS;
>     }
>
>     ratetbl->rate[offset].idx = idx;
>     ratetbl->rate[offset].flags = flags;
> }
>
> static void
> minstrel_ht_update_rates(struct minstrel_priv *mp, struct minstrel_ht_sta
*mi)
> {
>     struct ieee80211_sta_rates *rates;
>     int i = 0;
>
>     rates = kzalloc(sizeof(*rates), GFP_ATOMIC);
>     if (!rates)
602a654,660
>
>     /* Start with max_tp_rate */
>     minstrel_ht_set_rate(mp, mi, rates, i++, mi->max_tp_rate);
>
>     if (mp->hw->max_rates >= 3) {
>         /* At least 3 tx rates supported, use max_tp_rate2 next */
>         minstrel_ht_set_rate(mp, mi, rates, i++, mi->max_tp_rate2);
605,606c663,670
<     rate->flags |= IEEE80211_TX_RC_MCS | group->flags;
<     rate->idx = index % MCS_GROUP_RATES + (group->streams - 1) *
MCS_GROUP_RATES;
---
>     if (mp->hw->max_rates >= 2) {
>         /*
>          * At least 2 tx rates supported, use max_prob_rate next */
>         minstrel_ht_set_rate(mp, mi, rates, i++, mi->max_prob_rate);
>     }
>
>     rates->rate[i].idx = -1;
>     rate_control_set_rates(mp->hw, mi->sta, rates);
642c706
<      * used max TP rate.
---
>      * used rates.
644c708,710
<     if (sample_idx == mi->max_tp_rate)
---
>     if (sample_idx == mi->max_tp_rate ||
>         sample_idx == mi->max_tp_rate2 ||
>         sample_idx == mi->max_prob_rate)
645a712
>
647,648c714,715
<      * When not using MRR, do not sample if the probability is already
<      * higher than 95% to avoid wasting airtime
---
>      * Do not sample if the probability is already higher than 95%
>      * to avoid wasting airtime.
650c717
<     if (!mp->has_mrr && (mr->probability > MINSTREL_FRAC(95, 100)))
---
>     if (mr->probability > MINSTREL_FRAC(95, 100))
692a760
>     const struct mcs_group *sample_group;
694c762
<     struct ieee80211_tx_rate *ar = info->status.rates;
---
>     struct ieee80211_tx_rate *rate = &info->status.rates[0];
699d766
<     bool sample = false;
717c784
< #ifdef CONFIG_MAC80211_DEBUGFS
---
> #ifdef CPTCFG_MAC80211_DEBUGFS
727,771d793
<     if (sample_idx >= 0) {
<         sample = true;
<         minstrel_ht_set_rate(mp, mi, &ar[0], sample_idx,
<             true, false);
<         info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
<     } else {
<         minstrel_ht_set_rate(mp, mi, &ar[0], mi->max_tp_rate,
<             false, false);
<     }
<
<     if (mp->hw->max_rates >= 3) {
<         /*
<          * At least 3 tx rates supported, use
<          * sample_rate -> max_tp_rate -> max_prob_rate for sampling and
<          * max_tp_rate -> max_tp_rate2 -> max_prob_rate by default.
<          */
<         if (sample_idx >= 0)
<             minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_tp_rate,
<                 false, false);
<         else
<             minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_tp_rate2,
<                 false, true);
<
<         minstrel_ht_set_rate(mp, mi, &ar[2], mi->max_prob_rate,
<                      false, !sample);
<
<         ar[3].count = 0;
<         ar[3].idx = -1;
<     } else if (mp->hw->max_rates == 2) {
<         /*
<          * Only 2 tx rates supported, use
<          * sample_rate -> max_prob_rate for sampling and
<          * max_tp_rate -> max_prob_rate by default.
<          */
<         minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_prob_rate,
<                      false, !sample);
<
<         ar[2].count = 0;
<         ar[2].idx = -1;
<     } else {
<         /* Not using MRR, only use the first rate */
<         ar[1].count = 0;
<         ar[1].idx = -1;
<     }
<
778a801,810
>
>     if (sample_idx < 0)
>         return;
>
>     sample_group = &minstrel_mcs_groups[sample_idx / MCS_GROUP_RATES];
>     info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
>     rate->idx = sample_idx % MCS_GROUP_RATES +
>             (sample_group->streams - 1) * MCS_GROUP_RATES;
>     rate->flags = IEEE80211_TX_RC_MCS | sample_group->flags;
>     rate->count = 1;
827a860,861
>
>     mi->sta = sta;
888a923,926
>     /* create an initial rate table with the lowest supported rates */
>     minstrel_ht_update_stats(mp, mi);
>     minstrel_ht_update_rates(mp, mi);
>
983c1021
< #ifdef CONFIG_MAC80211_DEBUGFS
---
> #ifdef CPTCFG_MAC80211_DEBUGFS
---------------------------------------------------------
Maybe it is worth mentioning that I am getting the following warnings when
compiling the kernel:

----------------------------------------------------------------
WARNING: /lib/modules/3.9.10web10g/kernel/drivers/net/wireless/b43/b43.ko
needs unknown symbol ieee80211_rx
WARNING:
/lib/modules/3.9.10web10g/kernel/drivers/net/wireless/iwlwifi/dvm/iwldvm.ko
needs unknown symbol ieee80211_rx
WARNING:
/lib/modules/3.9.10web10g/kernel/drivers/net/wireless/iwlwifi/mvm/iwlmvm.ko
needs unknown symbol ieee80211_rx
WARNING:
/lib/modules/3.9.10web10g/kernel/drivers/net/wireless/iwlegacy/iwl4965.ko
needs unknown symbol ieee80211_rx
WARNING:
/lib/modules/3.9.10web10g/kernel/drivers/net/wireless/iwlegacy/iwl3945.ko
needs unknown symbol ieee80211_rx
WARNING:
/lib/modules/3.9.10web10g/kernel/drivers/net/wireless/rt2x00/rt2x00lib.ko
needs unknown symbol ieee80211_rx
WARNING:
/lib/modules/3.9.10web10g/kernel/drivers/net/wireless/ath/ath5k/ath5k.ko
needs unknown symbol ieee80211_rx
WARNING:
/lib/modules/3.9.10web10g/kernel/drivers/net/wireless/ath/carl9170/carl9170.ko
needs unknown symbol ieee80211_rx
------------------------------------------------------------------


Regards,
Ahmad
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ath9k.org/pipermail/ath9k-devel/attachments/20131013/26f4f174/attachment.htm 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ath9k-devel] Fixing Minstrel Rate
@ 2013-10-14  1:38 Shinnazar
  2013-10-14 11:49 ` Ahmad Showail
  0 siblings, 1 reply; 3+ messages in thread
From: Shinnazar @ 2013-10-14  1:38 UTC (permalink / raw)
  To: ath9k-devel

An HTML attachment was scrubbed...
URL: http://lists.ath9k.org/pipermail/ath9k-devel/attachments/20131014/f9439be5/attachment-0001.htm 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ath9k-devel] Fixing Minstrel Rate
  2013-10-14  1:38 [ath9k-devel] Fixing Minstrel Rate Shinnazar
@ 2013-10-14 11:49 ` Ahmad Showail
  0 siblings, 0 replies; 3+ messages in thread
From: Ahmad Showail @ 2013-10-14 11:49 UTC (permalink / raw)
  To: ath9k-devel

Thank you Shinnazar for your reply.

Hard coding the rate is not an option for me as I am planning to analyze
the effects of changing the rate in my experiments. Actually, aggregation
was enabled when fixing the rate through debugfs in the 3.3.4 kernel, and I
managed to send A-MPDUs as long as 32 subframes. However, compiling the 3.9
kernel using the old rc80211_minstrel_ht.c file results in disabling
aggregation even if minstrel rate control is active i.e. rate is not fixed.

Ahmad


On Mon, Oct 14, 2013 at 4:38 AM, Shinnazar <seytnazarovsho@ynu.ac.kr> wrote:

> If you set the rate through debugfs, it will disable the aggregation, so
> you have 35 mbps throughput. Instead, I suggest to set the rate through the
> Minstrel HT sourcecode.
>
> Shinnazar
>
>  --- Original Message ---
>  *From : *Ahmad Showail< ashowail@gmail.com >
> *To : *ath9k-devel at lists.ath9k.org
> *CC : *
> *Sent : *2013-10-13 21:38:53
> *Subject : *[ath9k-devel] Fixing Minstrel Rate
>
> _______________________________________________
> ath9k-devel mailing listath9k-devel at lists.ath9k.orghttps://lists.ath9k.org/mailman/listinfo/ath9k-devel
>
> Using Linux kernel version 3.3.4, I was able to fix minstrel rate by
> writing static MCS index to debugfs:ieee80211/phyX/rc/fixed_rate_idx.
> However, after updating my kernel to version 3.9.10, this method does not
> fix the rate any more. Below is the difference between the old and recent
> rc80211_minstrel_ht.c. I tried compiling the 3.9 kernel using the old
> rc80211_minstrel_ht.c file and found out that the rate fixing is working
> again. However, a simple netperf test shows a huge drop in throughput (from
> 150 to 35 Mb/s) before and after this change.
>
> Any ideas how to fix minstrel rate in recent kernel versions?
>
> ---------------------------------------------------------------------------------
> [xxxx at m70 mac80211]$ diff rc80211_minstrel_ht.c
> original_rc80211_minstrel_ht.c
> 128a129,131
> > static void
> > minstrel_ht_update_rates(struct minstrel_priv *mp, struct
> minstrel_ht_sta *mi);
> >
> 204a208
> >     unsigned int prob;
> 206a211
> >     prob = mr->probability;
> 208c213
> <     if (mr->probability < MINSTREL_FRAC(1, 10)) {
> ---
> >     if (prob < MINSTREL_FRAC(1, 10)) {
> 212a218,224
> >     /*
> >      * For the throughput calculation, limit the probability value to
> 90% to
> >      * account for collision related packet error rate fluctuation
> >      */
> >     if (prob > MINSTREL_FRAC(9, 10))
> >         prob = MINSTREL_FRAC(9, 10);
> >
> 237a250
> >     bool mi_rates_valid = false;
> 248,250d260
> <     mi->max_tp_rate = 0;
> <     mi->max_tp_rate2 = 0;
> <     mi->max_prob_rate = 0;
> 252a263,264
> >         bool mg_rates_valid = false;
> >
> 262,264d273
> <         mg->max_tp_rate = 0;
> <         mg->max_tp_rate2 = 0;
> <         mg->max_prob_rate = 0;
> 270a280,291
> >             /* initialize rates selections starting indexes */
> >             if (!mg_rates_valid) {
> >                 mg->max_tp_rate = mg->max_tp_rate2 =
> >                     mg->max_prob_rate = i;
> >                 if (!mi_rates_valid) {
> >                     mi->max_tp_rate = mi->max_tp_rate2 =
> >                         mi->max_prob_rate = i;
> >                     mi_rates_valid = true;
> >                 }
> >                 mg_rates_valid = true;
> >             }
> >
> 450c471
> <     bool last;
> ---
> >     bool last, update = false;
> 499c520
> <         MINSTREL_FRAC(20, 100))
> ---
> >         MINSTREL_FRAC(20, 100)) {
> 500a522,523
> >         update = true;
> >     }
> 505c528
> <         MINSTREL_FRAC(20, 100))
> ---
> >         MINSTREL_FRAC(20, 100)) {
> 506a530,531
> >         update = true;
> >     }
> 508a534
> >         update = true;
> 513a540,542
> >
> >     if (update)
> >         minstrel_ht_update_rates(mp, mi);
> 577,578c606
> <                      struct ieee80211_tx_rate *rate, int index,
> <                      bool sample, bool rtscts)
> ---
> >                      struct ieee80211_sta_rates *ratetbl, int offset,
> int index)
> 581a610,611
> >     u8 idx;
> >     u16 flags;
> 587,598c617,625
> <     if (sample)
> <         rate->count = 1;
> <     else if (mr->probability < MINSTREL_FRAC(20, 100))
> <         rate->count = 2;
> <     else if (rtscts)
> <         rate->count = mr->retry_count_rtscts;
> <     else
> <         rate->count = mr->retry_count;
> <
> <     rate->flags = 0;
> <     if (rtscts)
> <         rate->flags |= IEEE80211_TX_RC_USE_RTS_CTS;
> ---
> >     if (mr->probability < MINSTREL_FRAC(20, 100) || !mr->retry_count) {
> >         ratetbl->rate[offset].count = 2;
> >         ratetbl->rate[offset].count_rts = 2;
> >         ratetbl->rate[offset].count_cts = 2;
> >     } else {
> >         ratetbl->rate[offset].count = mr->retry_count;
> >         ratetbl->rate[offset].count_cts = mr->retry_count;
> >         ratetbl->rate[offset].count_rts = mr->retry_count_rtscts;
> >     }
> 601c628,652
> <         rate->idx = mp->cck_rates[index % ARRAY_SIZE(mp->cck_rates)];
> ---
> >         idx = mp->cck_rates[index % ARRAY_SIZE(mp->cck_rates)];
> >         flags = 0;
> >     } else {
> >         idx = index % MCS_GROUP_RATES +
> >               (group->streams - 1) * MCS_GROUP_RATES;
> >         flags = IEEE80211_TX_RC_MCS | group->flags;
> >     }
> >
> >     if (offset > 0) {
> >         ratetbl->rate[offset].count = ratetbl->rate[offset].count_rts;
> >         flags |= IEEE80211_TX_RC_USE_RTS_CTS;
> >     }
> >
> >     ratetbl->rate[offset].idx = idx;
> >     ratetbl->rate[offset].flags = flags;
> > }
> >
> > static void
> > minstrel_ht_update_rates(struct minstrel_priv *mp, struct
> minstrel_ht_sta *mi)
> > {
> >     struct ieee80211_sta_rates *rates;
> >     int i = 0;
> >
> >     rates = kzalloc(sizeof(*rates), GFP_ATOMIC);
> >     if (!rates)
> 602a654,660
> >
> >     /* Start with max_tp_rate */
> >     minstrel_ht_set_rate(mp, mi, rates, i++, mi->max_tp_rate);
> >
> >     if (mp->hw->max_rates >= 3) {
> >         /* At least 3 tx rates supported, use max_tp_rate2 next */
> >         minstrel_ht_set_rate(mp, mi, rates, i++, mi->max_tp_rate2);
> 605,606c663,670
> <     rate->flags |= IEEE80211_TX_RC_MCS | group->flags;
> <     rate->idx = index % MCS_GROUP_RATES + (group->streams - 1) *
> MCS_GROUP_RATES;
> ---
> >     if (mp->hw->max_rates >= 2) {
> >         /*
> >          * At least 2 tx rates supported, use max_prob_rate next */
> >         minstrel_ht_set_rate(mp, mi, rates, i++, mi->max_prob_rate);
> >     }
> >
> >     rates->rate[i].idx = -1;
> >     rate_control_set_rates(mp->hw, mi->sta, rates);
> 642c706
> <      * used max TP rate.
> ---
> >      * used rates.
> 644c708,710
> <     if (sample_idx == mi->max_tp_rate)
> ---
> >     if (sample_idx == mi->max_tp_rate ||
> >         sample_idx == mi->max_tp_rate2 ||
> >         sample_idx == mi->max_prob_rate)
> 645a712
> >
> 647,648c714,715
> <      * When not using MRR, do not sample if the probability is already
> <      * higher than 95% to avoid wasting airtime
> ---
> >      * Do not sample if the probability is already higher than 95%
> >      * to avoid wasting airtime.
> 650c717
> <     if (!mp->has_mrr && (mr->probability > MINSTREL_FRAC(95, 100)))
> ---
> >     if (mr->probability > MINSTREL_FRAC(95, 100))
> 692a760
> >     const struct mcs_group *sample_group;
> 694c762
> <     struct ieee80211_tx_rate *ar = info->status.rates;
> ---
> >     struct ieee80211_tx_rate *rate = &info->status.rates[0];
> 699d766
> <     bool sample = false;
> 717c784
> < #ifdef CONFIG_MAC80211_DEBUGFS
> ---
> > #ifdef CPTCFG_MAC80211_DEBUGFS
> 727,771d793
> <     if (sample_idx >= 0) {
> <         sample = true;
> <         minstrel_ht_set_rate(mp, mi, &ar[0], sample_idx,
> <             true, false);
> <         info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
> <     } else {
> <         minstrel_ht_set_rate(mp, mi, &ar[0], mi->max_tp_rate,
> <             false, false);
> <     }
> <
> <     if (mp->hw->max_rates >= 3) {
> <         /*
> <          * At least 3 tx rates supported, use
> <          * sample_rate -> max_tp_rate -> max_prob_rate for sampling and
> <          * max_tp_rate -> max_tp_rate2 -> max_prob_rate by default.
> <          */
> <         if (sample_idx >= 0)
> <             minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_tp_rate,
> <                 false, false);
> <         else
> <             minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_tp_rate2,
> <                 false, true);
> <
> <         minstrel_ht_set_rate(mp, mi, &ar[2], mi->max_prob_rate,
> <                      false, !sample);
> <
> <         ar[3].count = 0;
> <         ar[3].idx = -1;
> <     } else if (mp->hw->max_rates == 2) {
> <         /*
> <          * Only 2 tx rates supported, use
> <          * sample_rate -> max_prob_rate for sampling and
> <          * max_tp_rate -> max_prob_rate by default.
> <          */
> <         minstrel_ht_set_rate(mp, mi, &ar[1], mi->max_prob_rate,
> <                      false, !sample);
> <
> <         ar[2].count = 0;
> <         ar[2].idx = -1;
> <     } else {
> <         /* Not using MRR, only use the first rate */
> <         ar[1].count = 0;
> <         ar[1].idx = -1;
> <     }
> <
> 778a801,810
> >
> >     if (sample_idx < 0)
> >         return;
> >
> >     sample_group = &minstrel_mcs_groups[sample_idx / MCS_GROUP_RATES];
> >     info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
> >     rate->idx = sample_idx % MCS_GROUP_RATES +
> >             (sample_group->streams - 1) * MCS_GROUP_RATES;
> >     rate->flags = IEEE80211_TX_RC_MCS | sample_group->flags;
> >     rate->count = 1;
> 827a860,861
> >
> >     mi->sta = sta;
> 888a923,926
> >     /* create an initial rate table with the lowest supported rates */
> >     minstrel_ht_update_stats(mp, mi);
> >     minstrel_ht_update_rates(mp, mi);
> >
> 983c1021
> < #ifdef CONFIG_MAC80211_DEBUGFS
> ---
> > #ifdef CPTCFG_MAC80211_DEBUGFS
> ---------------------------------------------------------
> Maybe it is worth mentioning that I am getting the following warnings when
> compiling the kernel:
>
> ----------------------------------------------------------------
> WARNING: /lib/modules/3.9.10web10g/kernel/drivers/net/wireless/b43/b43.ko
> needs unknown symbol ieee80211_rx
> WARNING:
> /lib/modules/3.9.10web10g/kernel/drivers/net/wireless/iwlwifi/dvm/iwldvm.ko
> needs unknown symbol ieee80211_rx
> WARNING:
> /lib/modules/3.9.10web10g/kernel/drivers/net/wireless/iwlwifi/mvm/iwlmvm.ko
> needs unknown symbol ieee80211_rx
> WARNING:
> /lib/modules/3.9.10web10g/kernel/drivers/net/wireless/iwlegacy/iwl4965.ko
> needs unknown symbol ieee80211_rx
> WARNING:
> /lib/modules/3.9.10web10g/kernel/drivers/net/wireless/iwlegacy/iwl3945.ko
> needs unknown symbol ieee80211_rx
> WARNING:
> /lib/modules/3.9.10web10g/kernel/drivers/net/wireless/rt2x00/rt2x00lib.ko
> needs unknown symbol ieee80211_rx
> WARNING:
> /lib/modules/3.9.10web10g/kernel/drivers/net/wireless/ath/ath5k/ath5k.ko
> needs unknown symbol ieee80211_rx
> WARNING:
> /lib/modules/3.9.10web10g/kernel/drivers/net/wireless/ath/carl9170/carl9170.ko
> needs unknown symbol ieee80211_rx
> ------------------------------------------------------------------
>
>
> Regards,
> Ahmad
>
>
>
>
>
>


-- 
All the Best,

Ahmad Showail
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ath9k.org/pipermail/ath9k-devel/attachments/20131014/9ed389cb/attachment.htm 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-10-14 11:49 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-14  1:38 [ath9k-devel] Fixing Minstrel Rate Shinnazar
2013-10-14 11:49 ` Ahmad Showail
  -- strict thread matches above, loose matches on Subject: below --
2013-10-13 12:38 Ahmad Showail

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.