20 Dec, 2011

1 commit

  • DaveM said:
    Please, this kind of stuff rots forever and not using bool properly
    drives me crazy.

    Joe Perches gave me the spatch script:

    @@
    bool b;
    @@
    -b = 0
    +b = false
    @@
    bool b;
    @@
    -b = 1
    +b = true

    I merely installed coccinelle, read the documentation and took credit.

    Signed-off-by: Rusty Russell
    Signed-off-by: David S. Miller

    Rusty Russell
     

30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

20 Jan, 2010

1 commit


19 Jan, 2010

1 commit

  • While testing the pid rate controller in mac80211_hwsim, I noticed
    that once the controller reached 54 Mbit rates, it would fail to
    lower the rate when necessary. The debug log shows:

    1945 186786 pf_sample 50 3534 3577 50

    My interpretation is that the fixed point scaling of the target
    error value (pf) is incorrect: the error value of 50 compared to
    a target of 14 case should result in a scaling value of
    (14-50) = -36 * 256 or -9216, but instead it is (14 * 256)-50, or
    3534.

    Correct this by doing fixed point scaling after subtraction.

    Signed-off-by: Bob Copeland
    Acked-by: Stefano Brivio
    Acked-by: Mattias Nissler
    Signed-off-by: John W. Linville

    Bob Copeland
     

20 Aug, 2009

2 commits

  • CC [M] net/mac80211/rc80211_pid_algo.o
    net/mac80211/rc80211_pid_algo.c: In function ‘rate_control_pid_rate_init’:
    net/mac80211/rc80211_pid_algo.c:304: warning: unused variable ‘si’

    Signed-off-by: John W. Linville

    John W. Linville
     
  • Mesh uses the tx failure average to compute the (m)path metric. This used to
    be done inside the rate control module. This patch breaks the dependency
    between the mesh stack and the rate control algorithm. Mesh will now work
    independently of the chosen rate control algorithm.

    The mesh stack keeps a moving average of the average transmission losses for
    each mesh peer station. If the fail average exceeds a certain threshold, the
    peer link is marked as broken.

    Signed-off-by: Javier Cardona
    Signed-off-by: John W. Linville

    Javier Cardona
     

25 Jul, 2009

2 commits

  • All current rate control algorithms agree to send management and no-ack
    frames at the lowest rate. They also agree to do this when sta
    and the private rate control data is NULL. We add a hlper to mac80211
    for this and simplify the rate control algorithm code.

    Developers wishing to make enhancements to rate control algorithms
    are for broadcast/multicast can opt to not use this in their
    gate_rate() mac80211 callback.

    Cc: Zhu Yi
    Acked-by: Reinette Chatre
    Cc: ipw3945-devel@lists.sourceforge.net
    Cc: Gabor Juhos
    Acked-by: Felix Fietkau
    Cc: Derek Smithies
    Cc: Chittajit Mitra
    Signed-off-by: Luis R. Rodriguez
    Signed-off-by: John W. Linville

    Luis R. Rodriguez
     
  • Cc: Felix Fietkau
    Cc: Derek Smithies
    Cc: Chittajit Mitra
    Signed-off-by: Luis R. Rodriguez
    Signed-off-by: John W. Linville

    Luis R. Rodriguez
     

19 May, 2009

1 commit


12 May, 2009

1 commit

  • "There is another problem with this piece of code. The sband will be NULL
    after second iteration on single band device and cause null pointer
    dereference. Everything is working with dual band card. Sorry, but i
    don't know how to explain this clearly in English. I have looked on the
    second patch for pid algorithm and found similar bug."

    Reported-by: Karol Szuster
    Signed-off-by: John W. Linville

    John W. Linville
     

09 May, 2009

1 commit


07 May, 2009

1 commit


05 May, 2009

1 commit

  • pid doesn't count with some band having more bitrates than the one
    associated the first time.
    Fix that by counting the maximal available bitrate count and allocate
    big enough space.

    Secondly, fix touching uninitialized memory which causes panics.
    Index sucked from this random memory points to the hell.
    The fix is to sort the rates on each band change.

    Signed-off-by: Jiri Slaby
    Signed-off-by: John W. Linville

    Jiri Slaby
     

26 Nov, 2008

1 commit

  • In commit 9ea2c74 named "mac80211/drivers: rewrite the rate control API",
    the meaning of status.rates[i].count was changed from number of retries
    to total number of tries. As a result, the pid rate-setting algorithm fails
    because every packet appears to have needed a retransmit.

    Signed-off-by: Larry Finger
    Acked-by: Johannes Berg
    Signed-off-by: John W. Linville

    Larry Finger
     

22 Nov, 2008

1 commit

  • This patch eliminates sparse warnings in pid rate scale algorithm
    'debugfs: allow access to signed values' patch hit the dead end
    year ago w/o much echo so I guess there is no real need to address this
    properly.

    Signed-off-by: Tomas Winkler
    Acked-by: Johannes Berg
    Signed-off-by: John W. Linville

    Tomas Winkler
     

01 Nov, 2008

2 commits

  • "Clearing" the rate control algorithm is pointless, none of
    the algorithms actually uses this operation and it's not even
    invoked properly for all channel switching. Also, there's no
    need to since rate control algorithms work per station.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • So after the previous changes we were still unhappy with how
    convoluted the API is and decided to make things simpler for
    everybody. This completely changes the rate control API, now
    taking into account 802.11n with MCS rates and more control,
    most drivers don't support that though.

    Signed-off-by: Felix Fietkau
    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     

25 Sep, 2008

1 commit

  • Long awaited, hard work. This patch totally cleans up the rate control
    API to remove the requirement to include internal headers outside of
    net/mac80211/.

    There's one internal use in the PID algorithm left for mesh networking,
    we'll have to figure out a way to clean that one up and decide how to
    do the peer link evaluation, possibly independent of the rate control
    algorithm or via new API.

    Additionally, ath9k is left using the cross-inclusion hack for now, we
    will add new API where necessary to make this work properly, but right
    now I'm not expert enough to do it. It's still off better than before.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     

16 Sep, 2008

4 commits

  • The sta_info->txrate_idx member isn't used by all RC algorithms
    in the way it was intended to be used, move it into those that
    require it (only PID) and keep track in the core code of which
    rate was last used for reporting to userspace and the mesh MLME.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This variable in sta_info is only used in a meaningful way
    by the Intel RC algorithms, so move it into those.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This patch fixes mac80211 to not rely on the rate control
    algorithm to update sta->tx_retry_failed and sta->tx_retry_count
    (even if we don't currently use them), removes a number of
    completely unused values we don't even show in debugfs and
    changes the code in ieee80211_tx_status() to not look up the
    sta_info repeatedly.

    The only behaviour change here would be not calling the rate
    control function rate_control_tx_status() when no sta_info is
    found, but all rate control algorithms ignore such calls anyway.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This patch splits off mesh handling from the STA/IBSS.
    Unfortunately it increases mesh code size a bit, but I
    think it makes things clearer. The patch also reduces
    per-interface run-time memory usage.

    Also clean up a few places where ifdef is not required.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     

15 Jul, 2008

3 commits

  • David S. Miller
     
  • Conflicts:

    net/netfilter/nf_conntrack_proto_tcp.c

    David S. Miller
     
  • Currently, almost every interface type has a 'bss' pointer
    pointing to BSS information. This BSS information, however,
    is for a _local_ BSS, not for the BSS we joined, so having
    it on a STA mode interface makes little sense, but now they
    have it pointing to the master device, which is an AP mode
    virtual interface. However, except for some bitrate control
    data, this pointer is only used in AP/VLAN modes (for power
    saving stations.)

    Overall, it is not necessary to even have the master netdev
    be a valid virtual interface, and it doesn't have to be on
    the list of interfaces either.

    This patch changes the master netdev to be special, it now
    - no longer is on the list of virtual interfaces, which
    lets me remove a lot of tests for that
    - no longer has sub_if_data attached, since that isn't used

    Additionally, this patch changes some vlan/ap mode handling
    that is related to these 'bss' pointers described above (but
    in the VLAN case they actually make sense because there they
    point to the AP they belong to); it also adds some debugging
    code to IEEE80211_DEV_TO_SUB_IF to validate it is not called
    on the master netdev any more.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     

10 Jul, 2008

1 commit

  • This removes the fast_start parameter from the rc_pid parameters
    information and instead uses the parameter macro when initializing
    the rc_pid state. Since the parameter is only used on initialization,
    there is no point of making exporting it via debugfs. This also fixes
    uninitialized memory references to the fast_start and norm_offset
    parameters detected by the kmemcheck utility. Thanks to Vegard Nossum
    for reporting the bug.

    Signed-off-by: Mattias Nissler
    Signed-off-by: John W. Linville

    Mattias Nissler
     

01 Jul, 2008

1 commit

  • The old infrastructure was:
    - the default algorithm is built into mac80211
    - other algorithms get into their own modules

    The implementation of this complicated scheme was horrible
    (just look at net/mac80211/Makefile), and anyone adding a new
    algorithm would most likely not get it right at his first attempt.

    This patch therefore builds all enabled algorithms into the mac80211
    module.

    The user interface for the rate control algorithms changes as follows:
    - first the user can choose which algorithms to enable (currently only
    MAC80211_RC_PID is available)
    - if more than one algorithm is enabled (currently not possible since
    only one algorithm is present) the user then chooses the default one

    Note:
    - MAC80211_RC_PID is always enables for CONFIG_EMBEDDED=n

    Technical changes:
    - all selected algorithms get into the mac80211 module
    - net/mac80211/Makefile can now become much less complicated
    - support for rc80211_pid_algo.c being modular is no longer required
    - this includes unexporting mesh_plink_broken

    Signed-off-by: Adrian Bunk
    Signed-off-by: John W. Linville

    Adrian Bunk
     

22 May, 2008

2 commits

  • This patch converts mac80211 and all drivers to have transmit
    information and status in skb->cb rather than allocating extra
    memory for it and copying all the data around. To make it fit,
    a union is used where only data that is necessary for all steps
    is kept outside of the union.

    A number of fixes were done by Ivo, as well as the rt2x00 part
    of this patch.

    Signed-off-by: Ivo van Doorn
    Signed-off-by: Johannes Berg
    Acked-by: David S. Miller
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This patch modifies struct ieee80211_tx_control to give band
    info and the rate index (instead of rate pointers) to drivers.
    This mostly serves to reduce the TX control structure size to
    make it fit into skb->cb so that the fragmentation code can
    put it there and we can think about passing it to drivers that
    way in the future.

    The rt2x00 driver update was done by Ivo, thanks.

    Signed-off-by: Ivo van Doorn
    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     

09 Apr, 2008

1 commit


07 Mar, 2008

3 commits

  • This makes access to the STA hash table/list use RCU to protect
    against freeing of items. However, it's not a true RCU, the
    copy step is missing: whenever somebody changes a STA item it
    is simply updated. This is an existing race condition that is
    now somewhat understandable.

    This patch also fixes the race key freeing vs. STA destruction
    by making sure that sta_info_destroy() is always called under
    RTNL and frees the key.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Various cleanups, reducing the #ifdef mess and other things.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Includes integration in struct sta_info of mesh peer link elements, previously
    on their own mesh peer link table.

    Signed-off-by: Luis Carlos Cobo
    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Luis Carlos Cobo
     

01 Mar, 2008

3 commits

  • These things aren't used and the only possible use is within
    rate control algorithms, however those can, if they need it,
    keep track of it in their private data. last_ack_ms isn't
    even updated so completely useless.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Merge rate_control_pid_shift_adjust() to rate_control_pid_adjust_rate()
    in order to make the learning algorithm aware of constraints on rates. Also
    add some comments and rename variables.

    This fixes a bug which prevented 802.11b/g non-AP STAs from working with
    802.11b only AP STAs.

    Signed-off-by: Stefano Brivio
    Signed-off-by: John W. Linville

    Stefano Brivio
     
  • This patch creates new cfg80211 wiphy API for channel and bitrate
    registration and converts mac80211 and drivers to the new API. The
    old mac80211 API is completely ripped out. All drivers (except ath5k)
    are updated to the new API, in many cases I expect that optimisations
    can be done.

    Along with the regulatory code I've also ripped out the
    IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED flag, I believe it to be
    unnecessary if the hardware simply gives us whatever channels it wants
    to support and we then enable/disable them as required, which is pretty
    much required for travelling.

    Additionally, the patch adds proper "basic" rate handling for STA
    mode interface, AP mode interface will have to have new API added
    to allow userspace to set the basic rate set, currently it'll be
    empty... However, the basic rate handling will need to be moved to
    the BSS conf stuff.

    I do expect there to be bugs in this, especially wrt. transmit
    power handling where I'm basically clueless about how it should work.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     

02 Feb, 2008

1 commit


29 Jan, 2008

3 commits

  • Fix last_sample initialization. kzalloc'ing the per-STA data wasn't enough,
    as jiffies can assume negative values as well. This fixes a bug which
    prevented correct PID operation for a while after booting.

    Thanks to Michael Buesch for reporting this.

    Reported-and-tested-by: Michael Buesch
    Signed-off-by: Stefano Brivio
    Signed-off-by: John W. Linville

    Stefano Brivio
     
  • Mattias Nissler's "clean up rate selection" patch incorrectly changes
    the behavior of txrate setting in sta_info. This patch backs out parts
    of the rate selection consolidation in order to fix this issue for now.

    Signed-off-by: Michael Wu
    Signed-off-by: John W. Linville

    Michael Wu
     
  • I would argue that mac80211 should handle fixed rates outside the rate
    control code, which would also allow them to take effect immediately
    instead of during the rate control callback, but this is pretty close
    to correct.

    Signed-Off-By: Andy Lutomirski
    Signed-off-by: John W. Linville
    Signed-off-by: David S. Miller

    Andrew Lutomirski