Netdev List
 help / color / mirror / Atom feed
* Re: TSO and IPoIB performance degradation
From: Michael S. Tsirkin @ 2006-03-20 13:35 UTC (permalink / raw)
  To: Arjan van de Ven
  Cc: netdev, rdreier, rick.jones2, linux-kernel, openib-general,
	David S. Miller, Lennert Buytenhek
In-Reply-To: <1142855615.3114.33.camel@laptopd505.fenrus.org>

Quoting Arjan van de Ven <arjan@infradead.org>:
> > I read it as if he was proposing to have a sysctl knob to turn off
> > TCP congestion control completely (which has so many issues it's not
> > even funny.)
> 
> owww that's so bad I didn't even consider that

No, I think that comment was taken out of thread context. We were talking about
stretching ACKs - while avoiding stretch ACKs is important for TCP congestion
control, it's not the only mechanism.

-- 
Michael S. Tsirkin
Staff Engineer, Mellanox Technologies

^ permalink raw reply

* Re: TSO and IPoIB performance degradation
From: Michael S. Tsirkin @ 2006-03-20 12:04 UTC (permalink / raw)
  To: Lennert Buytenhek
  Cc: netdev, rdreier, rick.jones2, linux-kernel, openib-general,
	David S. Miller, Arjan van de Ven
In-Reply-To: <20060320114933.GA3058@xi.wantstofly.org>

Quoting r. Lennert Buytenhek <buytenh@wantstofly.org>:
> > > > I disagree with Linux changing it's behavior.  It would be great to
> > > > turn off congestion control completely over local gigabit networks,
> > > > but that isn't determinable in any way, so we don't do that.
> > > 
> > > Interesting. Would it make sense to make it another tunable knob in
> > > /proc, sysfs or sysctl then?
> > 
> > that's not the right level; since that is per interface. And you only
> > know the actual interface waay too late (as per earlier posts).
> > Per socket.. maybe
> > But then again it's not impossible to have packets for one socket go out
> > to multiple interfaces
> > (think load balancing bonding over 2 interfaces, one IB another
> > ethernet)
> 
> I read it as if he was proposing to have a sysctl knob to turn off
> TCP congestion control completely (which has so many issues it's not
> even funny.)

Not really, that was David :)

What started this thread was the fact that since 2.6.11 Linux
does not stretch ACKs anymore. RFC 2581 does mention that it might be OK to
stretch ACKs "after careful consideration", and we are seeing that it helps
IP over InfiniBand, so recent Linux kernels perform worse in that respect.

And since there does not seem to be a way to figure it out automagically when
doing this is a good idea, I proposed adding some kind of knob that will let the
user apply the consideration for us.

-- 
Michael S. Tsirkin
Staff Engineer, Mellanox Technologies

^ permalink raw reply

* Re: TSO and IPoIB performance degradation
From: Arjan van de Ven @ 2006-03-20 11:53 UTC (permalink / raw)
  To: Lennert Buytenhek
  Cc: netdev, rdreier, rick.jones2, linux-kernel, openib-general,
	David S. Miller
In-Reply-To: <20060320114933.GA3058@xi.wantstofly.org>

On Mon, 2006-03-20 at 12:49 +0100, Lennert Buytenhek wrote:
> On Mon, Mar 20, 2006 at 12:47:03PM +0100, Arjan van de Ven wrote:
> 
> > > > I disagree with Linux changing it's behavior.  It would be great to
> > > > turn off congestion control completely over local gigabit networks,
> > > > but that isn't determinable in any way, so we don't do that.
> > > 
> > > Interesting. Would it make sense to make it another tunable knob in
> > > /proc, sysfs or sysctl then?
> > 
> > that's not the right level; since that is per interface. And you only
> > know the actual interface waay too late (as per earlier posts).
> > Per socket.. maybe
> > But then again it's not impossible to have packets for one socket go out
> > to multiple interfaces
> > (think load balancing bonding over 2 interfaces, one IB another
> > ethernet)
> 
> I read it as if he was proposing to have a sysctl knob to turn off
> TCP congestion control completely (which has so many issues it's not
> even funny.)

owww that's so bad I didn't even consider that

^ permalink raw reply

* Re: TSO and IPoIB performance degradation
From: Lennert Buytenhek @ 2006-03-20 11:49 UTC (permalink / raw)
  To: Arjan van de Ven
  Cc: netdev, rdreier, rick.jones2, linux-kernel, openib-general,
	David S. Miller
In-Reply-To: <1142855223.3114.30.camel@laptopd505.fenrus.org>

On Mon, Mar 20, 2006 at 12:47:03PM +0100, Arjan van de Ven wrote:

> > > I disagree with Linux changing it's behavior.  It would be great to
> > > turn off congestion control completely over local gigabit networks,
> > > but that isn't determinable in any way, so we don't do that.
> > 
> > Interesting. Would it make sense to make it another tunable knob in
> > /proc, sysfs or sysctl then?
> 
> that's not the right level; since that is per interface. And you only
> know the actual interface waay too late (as per earlier posts).
> Per socket.. maybe
> But then again it's not impossible to have packets for one socket go out
> to multiple interfaces
> (think load balancing bonding over 2 interfaces, one IB another
> ethernet)

I read it as if he was proposing to have a sysctl knob to turn off
TCP congestion control completely (which has so many issues it's not
even funny.)

^ permalink raw reply

* Re: TSO and IPoIB performance degradation
From: Arjan van de Ven @ 2006-03-20 11:47 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: netdev, rdreier, rick.jones2, linux-kernel, openib-general,
	David S. Miller
In-Reply-To: <20060320112753.GX29929@mellanox.co.il>

On Mon, 2006-03-20 at 13:27 +0200, Michael S. Tsirkin wrote:
> Quoting David S. Miller <davem@davemloft.net>:
> > I disagree with Linux changing it's behavior.  It would be great to
> > turn off congestion control completely over local gigabit networks,
> > but that isn't determinable in any way, so we don't do that.
> 
> Interesting. Would it make sense to make it another tunable knob in
> /proc, sysfs or sysctl then?

that's not the right level; since that is per interface. And you only
know the actual interface waay too late (as per earlier posts).
Per socket.. maybe
But then again it's not impossible to have packets for one socket go out
to multiple interfaces
(think load balancing bonding over 2 interfaces, one IB another
ethernet)

^ permalink raw reply

* Re: [PATCH] scm: fold __scm_send() into scm_send()
From: Ingo Oeser @ 2006-03-20 11:44 UTC (permalink / raw)
  To: Chris Wright; +Cc: Ingo Oeser, davem, linux-kernel, netdev, Andrew Morton
In-Reply-To: <20060313173103.7681b49d.akpm@osdl.org>

Hi Chris,

Andrew Morton wrote:
> Ingo Oeser <ioe-lkml@rameria.de> wrote:
> >
> >  -int scm_send(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm)
> >  -{
> >  -	struct task_struct *p = current;
> >  -	scm->creds = (struct ucred) {
> >  -		.uid = p->uid,
> >  -		.gid = p->gid,
> >  -		.pid = p->tgid
> >  -	};
> >  -	scm->fp = NULL;
> >  -	scm->sid = security_sk_sid(sock->sk, NULL, 0);
> >  -	scm->seq = 0;
> >  -	if (msg->msg_controllen <= 0)
> >  -		return 0;
> >  -	return __scm_send(sock, msg, scm);
> >  -}
> 
> It's worth noting that scm_send() will call security_sk_sid() even if
> (msg->msg_controllen <= 0).

Chris, do you know if this is needed in this case?

> If that test is likely to be true with any frequency then perhaps we can
> optimise things...

That test seems to be the original intention for the splitup. 

The security modules just put their hooks here. Maybe we can
fold these hooks into __scm_send() and have the old
splitup again to get the old code paths back.

It seems that the credential copy in af_unix.c 

memcpy(UNIXCREDS(skb), &siocb->scm->creds, sizeof(struct ucred));
if (siocb->scm->fp)
            unix_attach_fds(siocb->scm, skb);

doesn't depend on the "msg_controllen <= 0" test. If we can introduce this 
dependency there, we can put credential setup into __scm_send().

I would suggest we fold these two lines into a function and decide this later.

Chris, would this suffice?

Regards

Ingo Oeser

BTW: ioe-lkml@rameria.de is simply netdev@axxeo.de at work :-)

^ permalink raw reply

* Re: TSO and IPoIB performance degradation
From: Michael S. Tsirkin @ 2006-03-20 11:27 UTC (permalink / raw)
  To: David S. Miller
  Cc: netdev, rdreier, rick.jones2, linux-kernel, openib-general
In-Reply-To: <20060320.023704.70907203.davem@davemloft.net>

Quoting David S. Miller <davem@davemloft.net>:
> I disagree with Linux changing it's behavior.  It would be great to
> turn off congestion control completely over local gigabit networks,
> but that isn't determinable in any way, so we don't do that.

Interesting. Would it make sense to make it another tunable knob in
/proc, sysfs or sysctl then?

-- 
Michael S. Tsirkin
Staff Engineer, Mellanox Technologies

^ permalink raw reply

* [git patches] net driver updates
From: Jeff Garzik @ 2006-03-20 11:17 UTC (permalink / raw)
  To: netdev; +Cc: linux-kernel

[just sent upstream; patch snipped due to size]

Please pull from 'upstream-linus' branch of
git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git

to receive the following updates:

 Documentation/DocBook/sis900.tmpl          |  585 ----------
 Documentation/networking/sis900.txt        |  257 ----
 Documentation/DocBook/Makefile             |    2 
 Documentation/feature-removal-schedule.txt |    7 
 Documentation/networking/00-INDEX          |    2 
 Documentation/networking/README.ipw2100    |   12 
 Documentation/networking/README.ipw2200    |   44 
 arch/ppc/platforms/hdpu.c                  |    5 
 drivers/net/3c509.c                        |   70 -
 drivers/net/3c523.c                        |    9 
 drivers/net/3c59x.c                        |    7 
 drivers/net/7990.c                         |    2 
 drivers/net/8139cp.c                       |    2 
 drivers/net/8139too.c                      |    4 
 drivers/net/82596.c                        |    2 
 drivers/net/Kconfig                        |   29 
 drivers/net/apne.c                         |    7 
 drivers/net/arcnet/Kconfig                 |    4 
 drivers/net/arcnet/arc-rawmode.c           |    2 
 drivers/net/arcnet/arc-rimi.c              |   68 -
 drivers/net/arcnet/arcnet.c                |   20 
 drivers/net/arcnet/com90xx.c               |  132 +-
 drivers/net/arcnet/rfc1051.c               |    2 
 drivers/net/arcnet/rfc1201.c               |    2 
 drivers/net/arm/etherh.c                   |    3 
 drivers/net/bnx2.c                         |   10 
 drivers/net/bnx2_fw.h                      |   84 -
 drivers/net/bonding/bond_alb.c             |    2 
 drivers/net/bonding/bond_main.c            |   45 
 drivers/net/bonding/bond_sysfs.c           |    6 
 drivers/net/bonding/bonding.h              |   33 
 drivers/net/chelsio/espi.c                 |   14 
 drivers/net/chelsio/subr.c                 |    2 
 drivers/net/dgrs.c                         |    2 
 drivers/net/dgrs_firmware.c                |    4 
 drivers/net/dl2k.c                         |    4 
 drivers/net/e100.c                         |    6 
 drivers/net/e1000/e1000.h                  |   68 -
 drivers/net/e1000/e1000_ethtool.c          |  110 --
 drivers/net/e1000/e1000_hw.c               |  734 +++++++++++++
 drivers/net/e1000/e1000_hw.h               |  319 +++++
 drivers/net/e1000/e1000_main.c             |  609 ++++-------
 drivers/net/e1000/e1000_param.c            |    2 
 drivers/net/eepro100.c                     |    4 
 drivers/net/epic100.c                      |    4 
 drivers/net/eth16i.c                       |   11 
 drivers/net/fealnx.c                       |    2 
 drivers/net/forcedeth.c                    |  593 ++++++++++-
 drivers/net/hamachi.c                      |    2 
 drivers/net/hamradio/baycom_epp.c          |    2 
 drivers/net/hp100.c                        |   35 
 drivers/net/ibm_emac/ibm_emac_core.c       |   40 
 drivers/net/ibm_emac/ibm_emac_core.h       |    2 
 drivers/net/ibm_emac/ibm_emac_debug.c      |    2 
 drivers/net/ibm_emac/ibm_emac_rgmii.h      |    2 
 drivers/net/ibm_emac/ibm_emac_zmii.c       |    7 
 drivers/net/ibm_emac/ibm_emac_zmii.h       |    2 
 drivers/net/irda/Kconfig                   |    4 
 drivers/net/macsonic.c                     |    2 
 drivers/net/mv643xx_eth.c                  | 1560 ++++++++++-------------------
 drivers/net/mv643xx_eth.h                  |  250 +---
 drivers/net/natsemi.c                      |  192 ++-
 drivers/net/ne-h8300.c                     |    5 
 drivers/net/ne.c                           |    7 
 drivers/net/ne2.c                          |    7 
 drivers/net/ne2k-pci.c                     |    2 
 drivers/net/ns83820.c                      |    7 
 drivers/net/oaknet.c                       |    3 
 drivers/net/pcmcia/3c574_cs.c              |    2 
 drivers/net/pcmcia/3c589_cs.c              |    5 
 drivers/net/pcmcia/fmvj18x_cs.c            |    2 
 drivers/net/pcmcia/nmclan_cs.c             |    2 
 drivers/net/pcmcia/pcnet_cs.c              |    3 
 drivers/net/pcmcia/smc91c92_cs.c           |    4 
 drivers/net/pcmcia/xirc2ps_cs.c            |    2 
 drivers/net/pcnet32.c                      |    6 
 drivers/net/phy/phy.c                      |    2 
 drivers/net/plip.c                         |    4 
 drivers/net/ppp_async.c                    |    3 
 drivers/net/ppp_synctty.c                  |    2 
 drivers/net/r8169.c                        |    4 
 drivers/net/s2io.c                         |  617 ++++++++++-
 drivers/net/s2io.h                         |   55 -
 drivers/net/sb1000.c                       |    2 
 drivers/net/sb1250-mac.c                   |  109 +-
 drivers/net/seeq8005.c                     |    5 
 drivers/net/sgiseeq.c                      |   17 
 drivers/net/shaper.c                       |    3 
 drivers/net/sis190.c                       |    2 
 drivers/net/sis900.c                       |    8 
 drivers/net/sk98lin/h/skaddr.h             |   48 
 drivers/net/sk98lin/h/skcsum.h             |    6 
 drivers/net/sk98lin/h/skgeinit.h           |   56 -
 drivers/net/sk98lin/h/skgepnmi.h           |    4 
 drivers/net/sk98lin/h/skgesirq.h           |    1 
 drivers/net/sk98lin/h/ski2c.h              |    3 
 drivers/net/sk98lin/h/skvpd.h              |   15 
 drivers/net/sk98lin/skaddr.c               |   35 
 drivers/net/sk98lin/skgeinit.c             |  148 --
 drivers/net/sk98lin/skgemib.c              |    7 
 drivers/net/sk98lin/skgepnmi.c             |  153 --
 drivers/net/sk98lin/skgesirq.c             |   24 
 drivers/net/sk98lin/ski2c.c                |    6 
 drivers/net/sk98lin/sklm80.c               |   72 -
 drivers/net/sk98lin/skrlmt.c               |    1 
 drivers/net/sk98lin/skvpd.c                |  108 --
 drivers/net/sk98lin/skxmac2.c              |  461 --------
 drivers/net/skfp/fplustm.c                 |   14 
 drivers/net/skfp/pcmplc.c                  |    4 
 drivers/net/skfp/skfddi.c                  |    2 
 drivers/net/starfire.c                     |   40 
 drivers/net/sundance.c                     |   10 
 drivers/net/sungem_phy.c                   |    2 
 drivers/net/tg3.c                          |    4 
 drivers/net/tokenring/lanstreamer.c        |    3 
 drivers/net/tokenring/olympic.c            |    9 
 drivers/net/tulip/de2104x.c                |   18 
 drivers/net/tulip/pnic.c                   |    3 
 drivers/net/tulip/winbond-840.c            |    2 
 drivers/net/tulip/xircom_cb.c              |    9 
 drivers/net/typhoon.c                      |    2 
 drivers/net/wan/Kconfig                    |    2 
 drivers/net/wan/hostess_sv11.c             |    1 
 drivers/net/wan/sealevel.c                 |    1 
 drivers/net/wireless/Kconfig               |   32 
 drivers/net/wireless/airo.c                |  338 +++++-
 drivers/net/wireless/atmel.c               |  110 --
 drivers/net/wireless/ipw2100.c             |  266 +++-
 drivers/net/wireless/ipw2100.h             |   17 
 drivers/net/wireless/ipw2200.c             | 1239 +++++++++++------------
 drivers/net/wireless/ipw2200.h             |  103 -
 drivers/net/wireless/netwave_cs.c          |    2 
 drivers/net/wireless/strip.c               |    4 
 drivers/net/wireless/wavelan.p.h           |    6 
 drivers/net/wireless/wavelan_cs.p.h        |    9 
 drivers/net/yellowfin.c                    |    6 
 drivers/net/zorro8390.c                    |    7 
 include/linux/arcdevice.h                  |    9 
 include/linux/if.h                         |    3 
 include/linux/if_ether.h                   |    1 
 include/linux/mv643xx.h                    |   27 
 include/net/ieee80211.h                    |  177 +++
 include/net/ieee80211_crypt.h              |    3 
 net/Kconfig                                |    3 
 net/core/Makefile                          |    2 
 net/core/dev.c                             |   36 
 net/ieee80211/ieee80211_crypt.c            |   11 
 net/ieee80211/ieee80211_crypt_ccmp.c       |    8 
 net/ieee80211/ieee80211_crypt_tkip.c       |   56 -
 net/ieee80211/ieee80211_crypt_wep.c        |    5 
 net/ieee80211/ieee80211_geo.c              |   48 
 net/ieee80211/ieee80211_module.c           |   20 
 net/ieee80211/ieee80211_rx.c               |  167 ++-
 net/ieee80211/ieee80211_tx.c               |   30 
 net/ieee80211/ieee80211_wx.c               |  152 ++
 net/socket.c                               |    9 
 156 files changed, 5816 insertions(+), 5303 deletions(-)

Adrian Bunk:
      drivers/net/sk98lin/: possible cleanups
      drivers/net/arcnet/: possible cleanups
      drivers/net/s2io.c: make code static
      net/: fix the WIRELESS_EXT abuse
      AIRO{,_CS} <-> CRYPTO fixes
      drivers/net/wireless/ipw2100.c: make ipw2100_wpa_assoc_frame() static
      drivers/net/wireless/ipw2200: possible cleanups
      [netdrvr] schedule eepro100 for removal
      remove obsolete sis900 documentation
      CONFIG_FORCEDETH updates
      chelsio/espi.c:tricn_init(): remove dead code
      drivers/net/e1000/: proper prototypes
      drivers/net/wireless/ipw2200.c: make ipw_qos_current_mode() static
      drivers/net/wireless/ipw2200.c: fix an array overun

Al Viro:
      arcnet probing cleanups and fixes
      ibm_emac sparse annotations
      appletalk/cops.h: missing const in struct ltfirmware
      macsonic.c: missed s/driver_unregister/platform_driver_unregister/
      missing include of asm/irq.h in drivers/net
      bogus include of linux/irq.h in 7990.c
      wrong ifdefs in 82596.c
      dead code removed in hp100

Andreas Happe:
      ipw2200: add monitor and qos entries to Kconfig

Andrew Morton:
      git-netdev-all: s2io fixes
      s2io c99 warning fix

Arjan van de Ven:
      Massive net driver const-ification.

Arnaldo Carvalho de Melo:
      sundance: Really read addr 0

Ayaz Abdulla:
      forcedeth: Add vlan support
      forcedeth: Add support for 64bit rings
      forcedeth: Add support for MSI/MSIX

Bill Moss:
      ipw2200: Add signal level to iwlist scan output

Cahill, Ben M:
      ipw2200: Set a meaningful silence threshold value
      ipw2200: Enables the "slow diversity" algorithm

Catalin(ux aka Dino) BOIE:
      Fix io ordering problems in e100

Dale Farnsworth:
      mv643xx_eth: Remove needless mp->port_mac_addr
      mv643xx_eth: Merge unicast and multicast address filtering code
      mv643xx_eth: Rename mp->tx_ring_skbs to mp->tx_desc_count
      mv643xx_eth: Make port queue enable/disable code consistent
      mv643xx_eth: Clean up platform_data configuration
      mv643xx_eth: Remove duplicate includes of linux/in.h and linux/ip.h
      mv643xx_eth: Fix misplaced parenthesis in mv643xx_eth_port_disable_rx
      mv643xx_eth: Rename "channels" to "queues"
      mv643xx_eth: Select CONFIG_MII on CONFIG_MV643XX_ETH
      mv643xx_eth: Refactor tx command queuing code
      mv643xx_eth: Refactor/clean up tx queue handling
      mv643xx_eth: Move #defines of constants to mv643xx_eth.h
      mv643xx_eth: Clean up interrupt handling
      mv643xx_eth: Remove non-working feature: task level rx queue refill
      mv643xx_eth: Remove BIT0-BIT31 #defines

Dan Williams:
      wireless/airo: add IWENCODEEXT and IWAUTH support
      wireless/ipw2200: support WE-18 WPA enc_capa
      wireless/atmel: convert constants to ieee80211 layer equivalents
      wireless/airo: fix setting TX key index plus key in ENCODEEXT
      wireless/airo: Remove 'Setting transmit key' info messages

Denis Vlasenko:
      WEP fields are incorrectly shown to be INSIDE snap in the doc
      ieee80211: trivial fix for misplaced ()'s

Eric Sesterhenn / snakebyte:
      BUG_ON() Conversion in net/tulip/xircom_cb.c
      BUG_ON() Conversion in net/tulip/de2104x.c
      BUG_ON() Conversion in net/tulip/winbond-840.c

Henrik Brix Andersen:
      ipw2200: print geography code upon module load

Ingo Molnar:
      ipw2100: semaphore to mutexes conversion

James Chapman:
      mv643xx_eth: use MII library for PHY management
      mv643xx_eth: use MII library for ethtool functions

James Ketrenos:
      ipw2200: stop netdev queue if h/w doesn't have space for new packets
      ipw2200: switch to the new ipw2200-fw-3.0 image format
      ieee80211: Don't update network statistics from off-channel packets.

Jan Niehusmann:
      let IPW2{1,2}00 select IEEE80211

Jay Vosburgh:
      bonding: suppress duplicate packets

Jeff Kirsher:
      e1000: Remove Multiqueue code until we have support for MSI-X in our hardware
      e1000: Fix dead counters
      e1000: Fix lock up while setting ring parameters
      e1000: Fix unecessary delay for 82573 controllers
      e1000: Fix AMT losing connectivity when switching VLAN in passive mode
      e1000: Fix dhcp issue when the skb structure fields are not filled properly
      e1000: Fix 82543 issue when reading eeprom
      e1000: Fix RSS if enabled in mid-connection
      e1000: Fix Quadport Wake on LAN
      e1000: Fix network problems when forced at 100Mb/s and to fix TSO when forced at 100Mb/s
      e1000: Fix filling skb descriptors while using packet split
      e1000: Add 82573 controller support to TSO fix
      e1000: Add enabled Jumbo frame support for 82573L
      e1000: Add performance enahancement by balancing TX and RX
      e1000: Add support for new hardware (ESB2)
      e1000: Fixed the following issues with ESB2 (requires ESB2 support):
      e1000: Add copybreak when using packet split
      e1000: Added a performance enhancement - prefetch
      e1000: Added driver comments and whitespace changes.  Modified long lines of code to ensure they would not wrap beyond 80 characters.
      e1000: Fix mii-tool access to setting speed and duplex

Johannes Berg:
      ieee80211: fix sparse warning about missing "static"

Jon Mason:
      trivial: fix spelling errors in Kconfigs

Komuro:
      pcnet_cs: add new id (Logitec LPM-LN100TE)

Larry Finger:
      ieee80211: common wx auth code
      Add two management functions to ieee80211_rx.c
      Remove duplicated code from ipw2200.c

Marcelo Feitoza Parisi:
      drivers/net/*: use time_after() and friends

Mark Brown:
      natsemi: NAPI and a bugfix
      natsemi: NAPI and a bugfix

Olivier Hochreutiner:
      ipw2200: wireless extension sensitivity threshold support

Pekka Enberg:
      3c509: use proper suspend/resume API

Pete Zaitcev:
      ieee80211_geo.c: remove frivolous BUG_ON's

Ralf Baechle:
      sb1250-mac: Add support for the BCM1480
      Sparse: Cleanup sgiseeq sparse warnings.

Ravinandan Arakali:
      S2io: Large Receive Offload (LRO) feature(v2) for Neterion (s2io) 10GbE Xframe PCI-X and PCI-E NICs

Stefan Rompf:
      starfire: Implement suspend/resume
      ipw2200: Fix WPA network selection problem
      ipw2100: add radiotap headers to packtes captured in monitor mode

Zhu Yi:
      ieee80211: Log if netif_rx() drops the packet
      ieee80211: Add LEAP authentication type
      ieee80211: add flags for all geo channels
      ieee80211: Add spectrum management information
      ieee80211: kmalloc+memset -> kzalloc cleanups
      ieee80211: TIM information element parsing
      ieee80211: Add TKIP crypt->build_iv
      ieee80211: Add 802.11h data type and structures
      ieee80211: Add helpers for IBSS DFS handling
      ieee80211: Add 802.11h information element parsing
      ipw2100: Add LEAP authentication algorithm support
      ipw2100: Make iwconfig txpower setting consistent with user input
      ipw2100: Add generic geo information
      ipw2100: remove white space and better format the code
      increase ipw2100 driver version to git-1.1.4
      ipw2200: Fix indirect SRAM/register 8/16-bit write routines
      ipw2200: Mask out the WEP_KEY command dump from debug log for security reason
      ipw2200: Add LEAP authentication algorithm support
      ipw2200: Bluetooth coexistence support
      ipw2200: use jiffies_to_msec() wherever possible
      ipw2200: Make LED blinking frequency independent of HZ
      ipw2200: add module parameter to enable/disable roaming
      ipw2200: Scale firmware loading watchdog with the firmware size
      ipw2200: stack reduction
      ipw2200: Fix qos_cmd param switch bug
      ipw2200: increase ipw2200 driver version
      ipw2200: remove white space and better format the code
      ipw2200: Semaphore to mutexes conversion
      ipw2200: Disable hwcrypto by default
      ieee80211: Use IWEVGENIE to set WPA IE
      ipw2200: Fix software crypto shared WEP authentication problem
      ipw2200: fix a potential NULL pointer dereference
      ipw2200: use generic ieee80211_get_hdrlen() to get packet length
      ipw2200: remove the WPA card associates to non-WPA AP checking
      ipw2200: Fix rf_kill is activated after mode change with 'disable=1'
      ipw2200: Fix ipw_sw_reset() implementation inconsistent with comment
      ipw2200: Filter unsupported channels out in ad-hoc mode
      ipw2200: Change debug level for firmware error logging
      ipw2200: export `debug' module param only if CONFIG_IPW2200_DEBUG
      ipw2200: Update ipw2200 version stamp to 1.1.1
      ipw2x00: expend Copyright to 2006
      ipw2100: Fix radiotap code gcc warning
      ipw2100: move mutex.h include from ipw2100.c to ipw2100.h
      ipw2100: Update version ipw2100 stamp to 1.2.2

^ permalink raw reply

* Re: TSO and IPoIB performance degradation
From: David S. Miller @ 2006-03-20 10:37 UTC (permalink / raw)
  To: mst; +Cc: netdev, rdreier, rick.jones2, linux-kernel, openib-general
In-Reply-To: <20060320102234.GV29929@mellanox.co.il>

From: "Michael S. Tsirkin" <mst@mellanox.co.il>
Date: Mon, 20 Mar 2006 12:22:34 +0200

> Quoting r. David S. Miller <davem@davemloft.net>:
> > The path an SKB can take is opaque and unknown until the very last
> > moment it is actually given to the device transmit function.
> 
> Why, I was proposing looking at dst cache. If that's NULL, well,
> we won't stretch ACKs. Worst case we apply the wrong optimization.
> Right?

Where you receive a packet from isn't very useful for determining
even the full patch on which that packet itself flowed.

More importantly, packets also do not necessarily go back out over the
same path on which packets are received for a connection.  This is
actually quite common.

Maybe packets for this connection come in via IPoIB but go out via
gigabit ethernet and another route altogether.

> What I'd like to clarify, however: rfc2581 explicitly states that in
> some cases it might be OK to generate ACKs less frequently than
> every second full-sized segment. Given Matt's measurements, TCP on
> top of IP over InfiniBand on Linux seems to hit one of these cases.
> Do you agree to that?

I disagree with Linux changing it's behavior.  It would be great to
turn off congestion control completely over local gigabit networks,
but that isn't determinable in any way, so we don't do that.

The IPoIB situation is no different, you can set all the bits you want
in incoming packets, the barrier to doing this remains the same.

It hurts performance if any packet drop occurs because it will require
an extra round trip for recovery to begin to be triggered at the
sender.

The network is a black box, routes to and from a destination are
arbitrary, and so is packet rewriting and reflection, so being able to
say "this all occurs on IPoIB" is simply infeasible.

I don't know how else to say this, we simply cannot special case IPoIB
or any other topology type.

^ permalink raw reply

* Re: TSO and IPoIB performance degradation
From: Michael S. Tsirkin @ 2006-03-20 10:22 UTC (permalink / raw)
  To: David S. Miller
  Cc: netdev, rdreier, rick.jones2, linux-kernel, openib-general
In-Reply-To: <20060320.015500.72136710.davem@davemloft.net>

Quoting r. David S. Miller <davem@davemloft.net>:
> The path an SKB can take is opaque and unknown until the very last
> moment it is actually given to the device transmit function.

Why, I was proposing looking at dst cache. If that's NULL, well,
we won't stretch ACKs. Worst case we apply the wrong optimization.
Right?

> People need to get the "special case this topology" ideas out of their
> heads. :-)

Okay, I get that.

What I'd like to clarify, however: rfc2581 explicitly states that in some cases
it might be OK to generate ACKs less frequently than every second full-sized
segment. Given Matt's measurements, TCP on top of IP over InfiniBand on Linux
seems to hit one of these cases.  Do you agree to that?

-- 
Michael S. Tsirkin
Staff Engineer, Mellanox Technologies

^ permalink raw reply

* Re: TSO and IPoIB performance degradation
From: David S. Miller @ 2006-03-20  9:55 UTC (permalink / raw)
  To: mst; +Cc: netdev, rdreier, rick.jones2, linux-kernel, openib-general
In-Reply-To: <20060320090629.GA11352@mellanox.co.il>

From: "Michael S. Tsirkin" <mst@mellanox.co.il>
Date: Mon, 20 Mar 2006 11:06:29 +0200

> Is it the case then that this requirement is less essential on
> networks such as IP over InfiniBand, which are very low latency
> and essencially lossless (with explicit congestion contifications
> in hardware)?

You can never assume any attribute of the network whatsoever.
Even if initially the outgoing device is IPoIB, something in
the middle, like a traffic classification or netfilter rule,
could rewrite the packet and make it go somewhere else.

This even applies to loopback packets, because packets can
get rewritten and redirected even once they are passed in
via netif_receive_skb().

> And as Matt Leininger's research appears to show, stretch ACKs
> are good for performance in case of IP over InfiniBand.
>
> Given all this, would it make sense to add a per-netdevice (or per-neighbour)
> flag to re-enable the trick for these net devices (as was done before
> 314324121f9b94b2ca657a494cf2b9cb0e4a28cc)?
> IP over InfiniBand driver would then simply set this flag.

See above, this is not feasible.

The path an SKB can take is opaque and unknown until the very last
moment it is actually given to the device transmit function.

People need to get the "special case this topology" ideas out of their
heads. :-)

^ permalink raw reply

* Re: TSO and IPoIB performance degradation
From: Michael S. Tsirkin @ 2006-03-20  9:06 UTC (permalink / raw)
  To: David S. Miller
  Cc: netdev, rdreier, rick.jones2, linux-kernel, openib-general
In-Reply-To: <20060309.232301.77550306.davem@davemloft.net>

Quoting r. David S. Miller <davem@davemloft.net>:
> > well, there are stacks which do "stretch acks" (after a fashion) that 
> > make sure when they see packet loss to "do the right thing" wrt sending 
> > enough acks to allow cwnds to open again in a timely fashion.
> 
> Once a loss happens, it's too late to stop doing the stretch ACKs, the
> damage is done already.  It is going to take you at least one
> extra RTT to recover from the loss compared to if you were not doing
> stretch ACKs.
> 
> You have to keep giving consistent well spaced ACKs back to the
> receiver in order to recover from loss optimally.

Is it the case then that this requirement is less essential on
networks such as IP over InfiniBand, which are very low latency
and essencially lossless (with explicit congestion contifications
in hardware)?

> The ACK every 2 full sized frames behavior of TCP is absolutely
> essential.

Interestingly, I was pointed towards the following RFC draft
http://www.ietf.org/internet-drafts/draft-ietf-tcpm-rfc2581bis-00.txt

    The requirement that an ACK "SHOULD" be generated for at least every
    second full-sized segment is listed in [RFC1122] in one place as a
    SHOULD and another as a MUST.  Here we unambiguously state it is a
    SHOULD.  We also emphasize that this is a SHOULD, meaning that an
    implementor should indeed only deviate from this requirement after
    careful consideration of the implications.

And as Matt Leininger's research appears to show, stretch ACKs
are good for performance in case of IP over InfiniBand.

Given all this, would it make sense to add a per-netdevice (or per-neighbour)
flag to re-enable the trick for these net devices (as was done before
314324121f9b94b2ca657a494cf2b9cb0e4a28cc)?
IP over InfiniBand driver would then simply set this flag.

David, would you accept such a patch? It would be nice to get 2.6.17
back to within at least 10% of 2.6.11.

-- 
Michael S. Tsirkin
Staff Engineer, Mellanox Technologies

^ permalink raw reply

* [PATCH 6/12] [NET] Support the BCM1x55 and BCM1x80 chips
From: Martin Michlmayr @ 2006-03-20  4:40 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel, linux-mips, netdev
In-Reply-To: <20060320043802.GA20389@deprecation.cyrius.com>

From: Broadcom Corporation

Add support for the BCM1x55 and BCM1x80 chips.  The BCM1x80 features
four Ethernet devices.  This patch has been in the linux-mips tree
for several months and has also been tested by Debian.

Signed-off-by: Andy Isaacson <adi@broadcom.com>
Signed-off-by: Mark E Mason <mark.e.mason@broadcom.com>
Signed-off-by: Martin Michlmayr <tbm@cyrius.com>


--- linux-2.6/drivers/net/sb1250-mac.c	2006-03-05 19:35:04.000000000 +0000
+++ mips.git/drivers/net/sb1250-mac.c	2006-03-05 18:51:16.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001,2002,2003 Broadcom Corporation
+ * Copyright (C) 2001,2002,2003,2004 Broadcom Corporation
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -43,6 +43,7 @@
 #define SBMAC_ETH0_HWADDR "40:00:00:00:01:00"
 #define SBMAC_ETH1_HWADDR "40:00:00:00:01:01"
 #define SBMAC_ETH2_HWADDR "40:00:00:00:01:02"
+#define SBMAC_ETH3_HWADDR "40:00:00:00:01:03"
 #endif
 
 
@@ -57,7 +58,7 @@
 
 #define CONFIG_SBMAC_COALESCE
 
-#define MAX_UNITS 3		/* More are supported, limit only on options */
+#define MAX_UNITS 4		/* More are supported, limit only on options */
 
 /* Time in jiffies before concluding the transmitter is hung. */
 #define TX_TIMEOUT  (2*HZ)
@@ -85,11 +86,11 @@
    The media type is usually passed in 'options[]'.
 */
 #ifdef MODULE
-static int options[MAX_UNITS] = {-1, -1, -1};
+static int options[MAX_UNITS] = {-1, -1, -1, -1};
 module_param_array(options, int, NULL, S_IRUGO);
 MODULE_PARM_DESC(options, "1-" __MODULE_STRING(MAX_UNITS));
 
-static int full_duplex[MAX_UNITS] = {-1, -1, -1};
+static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1};
 module_param_array(full_duplex, int, NULL, S_IRUGO);
 MODULE_PARM_DESC(full_duplex, "1-" __MODULE_STRING(MAX_UNITS));
 #endif
@@ -105,13 +106,26 @@
 #endif
 
 #include <asm/sibyte/sb1250.h>
-#include <asm/sibyte/sb1250_defs.h>
+#if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
+#include <asm/sibyte/bcm1480_regs.h>
+#include <asm/sibyte/bcm1480_int.h>
+#elif defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X)
 #include <asm/sibyte/sb1250_regs.h>
-#include <asm/sibyte/sb1250_mac.h>
-#include <asm/sibyte/sb1250_dma.h>
 #include <asm/sibyte/sb1250_int.h>
+#else
+#error invalid SiByte MAC configuation
+#endif
 #include <asm/sibyte/sb1250_scd.h>
+#include <asm/sibyte/sb1250_mac.h>
+#include <asm/sibyte/sb1250_dma.h>
 
+#if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
+#define UNIT_INT(n)		(K_BCM1480_INT_MAC_0 + ((n) * 2))
+#elif defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X)
+#define UNIT_INT(n)		(K_INT_MAC_0 + (n))
+#else
+#error invalid SiByte MAC configuation
+#endif
 
 /**********************************************************************
  *  Simple types
@@ -142,6 +156,10 @@
 
 #define NUMCACHEBLKS(x) (((x)+SMP_CACHE_BYTES-1)/SMP_CACHE_BYTES)
 
+#define SBMAC_READCSR(t)	__raw_readq((unsigned long)t)
+#define SBMAC_WRITECSR(t,v)	__raw_writeq(v, (unsigned long)t)
+
+
 #define SBMAC_MAX_TXDESCR	32
 #define SBMAC_MAX_RXDESCR	32
 
@@ -1476,10 +1494,10 @@
 	 * and make sure that RD_THRSH + WR_THRSH <=128 for pass2 and above
 	 * Use a larger RD_THRSH for gigabit
 	 */
-	if (periph_rev >= 2)
-		th_value = 64;
-	else
+	if (soc_type == K_SYS_SOC_TYPE_BCM1250 && periph_rev < 2)
 		th_value = 28;
+	else
+		th_value = 64;
 
 	fifo = V_MAC_TX_WR_THRSH(4) |	/* Must be '4' or '8' */
 		((s->sbm_speed == sbmac_speed_1000)
@@ -1589,13 +1607,17 @@
 	 * Turn on the rest of the bits in the enable register
 	 */
 
+#if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
+	__raw_writeq(M_MAC_RXDMA_EN0 |
+		       M_MAC_TXDMA_EN0, s->sbm_macenable);
+#elif defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X)
 	__raw_writeq(M_MAC_RXDMA_EN0 |
 		       M_MAC_TXDMA_EN0 |
 		       M_MAC_RX_ENABLE |
 		       M_MAC_TX_ENABLE, s->sbm_macenable);
-
-
-
+#else
+#error invalid SiByte MAC configuation
+#endif
 
 #ifdef CONFIG_SBMAC_COALESCE
 	/*
@@ -1786,11 +1808,12 @@
 	reg &= ~M_MAC_IPHDR_OFFSET | V_MAC_IPHDR_OFFSET(15);
 	__raw_writeq(reg, sc->sbm_rxfilter);
 
-	/* read system identification to determine revision */
-	if (periph_rev >= 2) {
-		sc->rx_hw_checksum = ENABLE;
-	} else {
+	/* BCM1250 pass1 didn't have hardware checksum.  Everything
+	   later does.  */
+	if (soc_type == K_SYS_SOC_TYPE_BCM1250 && periph_rev < 2) {
 		sc->rx_hw_checksum = DISABLE;
+	} else {
+		sc->rx_hw_checksum = ENABLE;
 	}
 }
 
@@ -2220,7 +2243,7 @@
 
 
 
-#if defined(SBMAC_ETH0_HWADDR) || defined(SBMAC_ETH1_HWADDR) || defined(SBMAC_ETH2_HWADDR)
+#if defined(SBMAC_ETH0_HWADDR) || defined(SBMAC_ETH1_HWADDR) || defined(SBMAC_ETH2_HWADDR) || defined(SBMAC_ETH3_HWADDR)
 /**********************************************************************
  *  SBMAC_PARSE_XDIGIT(str)
  *
@@ -2397,6 +2420,11 @@
 			sc->sbm_dev->name);
 	}
 
+	if (periph_rev >= 2) {
+		printk(KERN_INFO "%s: enabling TCP rcv checksum\n",
+			sc->sbm_dev->name);
+	}
+
 	/*
 	 * Display Ethernet address (this is called during the config
 	 * process so we need to finish off the config message that
@@ -2792,7 +2820,7 @@
 
 
 
-#if defined(SBMAC_ETH0_HWADDR) || defined(SBMAC_ETH1_HWADDR) || defined(SBMAC_ETH2_HWADDR)
+#if defined(SBMAC_ETH0_HWADDR) || defined(SBMAC_ETH1_HWADDR) || defined(SBMAC_ETH2_HWADDR) || defined(SBMAC_ETH3_HWADDR)
 static void
 sbmac_setup_hwaddr(int chan,char *addr)
 {
@@ -2818,25 +2846,7 @@
 	unsigned long port;
 	int chip_max_units;
 
-	/*
-	 * For bringup when not using the firmware, we can pre-fill
-	 * the MAC addresses using the environment variables
-	 * specified in this file (or maybe from the config file?)
-	 */
-#ifdef SBMAC_ETH0_HWADDR
-	sbmac_setup_hwaddr(0,SBMAC_ETH0_HWADDR);
-#endif
-#ifdef SBMAC_ETH1_HWADDR
-	sbmac_setup_hwaddr(1,SBMAC_ETH1_HWADDR);
-#endif
-#ifdef SBMAC_ETH2_HWADDR
-	sbmac_setup_hwaddr(2,SBMAC_ETH2_HWADDR);
-#endif
-
-	/*
-	 * Walk through the Ethernet controllers and find
-	 * those who have their MAC addresses set.
-	 */
+	/* Set the number of available units based on the SOC type.  */
 	switch (soc_type) {
 	case K_SYS_SOC_TYPE_BCM1250:
 	case K_SYS_SOC_TYPE_BCM1250_ALT:
@@ -2848,6 +2858,10 @@
 	case K_SYS_SOC_TYPE_BCM1250_ALT2: /* Hybrid */
 		chip_max_units = 2;
 		break;
+	case K_SYS_SOC_TYPE_BCM1x55:
+	case K_SYS_SOC_TYPE_BCM1x80:
+		chip_max_units = 4;
+		break;
 	default:
 		chip_max_units = 0;
 		break;
@@ -2855,6 +2869,32 @@
 	if (chip_max_units > MAX_UNITS)
 		chip_max_units = MAX_UNITS;
 
+	/*
+	 * For bringup when not using the firmware, we can pre-fill
+	 * the MAC addresses using the environment variables
+	 * specified in this file (or maybe from the config file?)
+	 */
+#ifdef SBMAC_ETH0_HWADDR
+	if (chip_max_units > 0)
+	  sbmac_setup_hwaddr(0,SBMAC_ETH0_HWADDR);
+#endif
+#ifdef SBMAC_ETH1_HWADDR
+	if (chip_max_units > 1)
+	  sbmac_setup_hwaddr(1,SBMAC_ETH1_HWADDR);
+#endif
+#ifdef SBMAC_ETH2_HWADDR
+	if (chip_max_units > 2)
+	  sbmac_setup_hwaddr(2,SBMAC_ETH2_HWADDR);
+#endif
+#ifdef SBMAC_ETH3_HWADDR
+	if (chip_max_units > 3)
+	  sbmac_setup_hwaddr(3,SBMAC_ETH3_HWADDR);
+#endif
+
+	/*
+	 * Walk through the Ethernet controllers and find
+	 * those who have their MAC addresses set.
+	 */
 	for (idx = 0; idx < chip_max_units; idx++) {
 
 	        /*
@@ -2886,7 +2926,7 @@
 
 		printk(KERN_DEBUG "sbmac: configuring MAC at %lx\n", port);
 
-		dev->irq = K_INT_MAC_0 + idx;
+		dev->irq = UNIT_INT(idx);
 		dev->base_addr = port;
 		dev->mem_end = 0;
 		if (sbmac_init(dev, idx)) {

-- 
Martin Michlmayr
http://www.cyrius.com/

^ permalink raw reply

* [PATCH 5/12] [NET] Bring declance.c in sync with linux-mips tree
From: Martin Michlmayr @ 2006-03-20  4:39 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel, linux-mips, netdev
In-Reply-To: <20060320043802.GA20389@deprecation.cyrius.com>

There are three changes between the Linus' and linux-mips git trees
regarding the declaner driver.  Two are cosmetic and one fixes a
call to the wrong function.

Signed-off-by: Martin Michlmayr <tbm@cyrius.com>
Acked-by: Maciej W. Rozycki <macro@linux-mips.org>


--- linux-2.6/drivers/net/declance.c	2006-03-05 19:35:04.000000000 +0000
+++ mips.git/drivers/net/declance.c	2006-03-05 18:51:15.000000000 +0000
@@ -704,8 +704,8 @@
 	return IRQ_HANDLED;
 }
 
-static irqreturn_t
-lance_interrupt(const int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t lance_interrupt(const int irq, void *dev_id,
+				   struct pt_regs *regs)
 {
 	struct net_device *dev = (struct net_device *) dev_id;
 	struct lance_private *lp = netdev_priv(dev);
@@ -1255,7 +1255,7 @@
 	return 0;
 
 err_out_free_dev:
-	kfree(dev);
+	free_netdev(dev);
 
 err_out:
 	return ret;
@@ -1301,6 +1301,7 @@
 	while (root_lance_dev) {
 		struct net_device *dev = root_lance_dev;
 		struct lance_private *lp = netdev_priv(dev);
+
 		unregister_netdev(dev);
 #ifdef CONFIG_TC
 		if (lp->slot >= 0)

-- 
Martin Michlmayr
http://www.cyrius.com/

^ permalink raw reply

* [PATCH 4/12] [NET] Improve description of MV643XX_ETH
From: Martin Michlmayr @ 2006-03-20  4:39 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel, linux-mips, netdev
In-Reply-To: <20060320043802.GA20389@deprecation.cyrius.com>

Slightly improve the wording of the description of MV643XX_ETH
in Kconfig.  This difference was found between the mainline and
linux-mips kernel trees.

Signed-off-by: Martin Michlmayr <tbm@cyrius.com>


--- linux-2.6/drivers/net/Kconfig	2006-03-13 18:55:59.000000000 +0000
+++ mips.git/drivers/net/Kconfig	2006-03-13 18:43:52.000000000 +0000
@@ -2197,8 +2213,8 @@
 	depends on MOMENCO_OCELOT_C || MOMENCO_JAGUAR_ATX || MV64360 || MOMENCO_OCELOT_3 || PPC_MULTIPLATFORM
 	help
 	  This driver supports the gigabit Ethernet on the Marvell MV643XX
-	  chipset which is used in the Momenco Ocelot C and Jaguar ATX and
-	  Pegasos II, amongst other PPC and MIPS boards.
+	  chipset which is used in the Momenco Ocelot C Ocelot, Jaguar ATX
+	  and Pegasos II, amongst other PPC and MIPS boards.
 
 config MV643XX_ETH_0
 	bool "MV-643XX Port 0"

-- 
Martin Michlmayr
http://www.cyrius.com/

^ permalink raw reply

* Re: [PATCH] TC: bug fixes to the "sample" clause
From: Russell Stuart @ 2006-03-20  3:11 UTC (permalink / raw)
  To: hadi; +Cc: netdev, lartc
In-Reply-To: <1142606049.5322.89.camel@jzny2>

On Fri, 2006-03-17 at 09:34 -0500, jamal wrote:
> If you are unable to do this then I will. I just dont have time until this
> Sunday.
> I will not respond to any further emails which do not contain data - instead
> I am going to produce mine.

After that wrist-slap I spent some time putting together 
some data.  I am still not really sure what you are after,
so if this isn't it please let me know:

http://ace-host.stuart.id.au/russell/files/tc/hash-analysis/

One other thing: I have made a rather embarrassing error
earlier.  When I computed my metric's I posted earlier 
about 2.4 and 2.6, I emulated the 2.6 hash incorrectly.
If it has of been correct, rather than showing a landside
win for 2.4, it would of shown that 2.6 was slightly 
better.

^ permalink raw reply

* Re: [AX.25] Fix potencial memory hole.
From: David S. Miller @ 2006-03-19 21:20 UTC (permalink / raw)
  To: ralf; +Cc: netdev, linux-hams
In-Reply-To: <20060319124246.GA6261@linux-mips.org>

From: Ralf Baechle DL5RB <ralf@linux-mips.org>
Date: Sun, 19 Mar 2006 12:42:46 +0000

> If the AX.25 dialect chosen by the sysadmin is set to DAMA master / 3
> (or DAMA slave / 2, if CONFIG_AX25_DAMA_SLAVE=n) ax25_kick() will fall
> through the switch statement without calling ax25_send_iframe() or any
> other function that would eventually free skbn thus leaking the packet.
> 
> Fix by restricting the sysctl inferface to allow only actually supported
> AX.25 dialects.
> 
> The system administration mistake needed for this to happen is rather
> unlikely, so this is an uncritical hole.
> 
> Coverity #651.
> 
> Signed-off-by: Ralf Baechle DL5RB <ralf@linux-mips.org>

Applied, thanks a lot Ralf.

^ permalink raw reply

* [AX.25] Fix potencial memory hole.
From: Ralf Baechle DL5RB @ 2006-03-19 12:42 UTC (permalink / raw)
  To: David S. Miller, netdev, linux-hams

If the AX.25 dialect chosen by the sysadmin is set to DAMA master / 3
(or DAMA slave / 2, if CONFIG_AX25_DAMA_SLAVE=n) ax25_kick() will fall
through the switch statement without calling ax25_send_iframe() or any
other function that would eventually free skbn thus leaking the packet.

Fix by restricting the sysctl inferface to allow only actually supported
AX.25 dialects.

The system administration mistake needed for this to happen is rather
unlikely, so this is an uncritical hole.

Coverity #651.

Signed-off-by: Ralf Baechle DL5RB <ralf@linux-mips.org>

diff --git a/include/net/ax25.h b/include/net/ax25.h
index 2250a18..d052b22 100644
--- a/include/net/ax25.h
+++ b/include/net/ax25.h
@@ -110,8 +110,15 @@ enum { 
 enum {
 	AX25_PROTO_STD_SIMPLEX,
 	AX25_PROTO_STD_DUPLEX,
+#ifdef CONFIG_AX25_DAMA_SLAVE
 	AX25_PROTO_DAMA_SLAVE,
-	AX25_PROTO_DAMA_MASTER
+#ifdef CONFIG_AX25_DAMA_MASTER
+	AX25_PROTO_DAMA_MASTER,
+#define AX25_PROTO_MAX AX25_PROTO_DAMA_MASTER
+#endif
+#endif
+	__AX25_PROTO_MAX,
+	AX25_PROTO_MAX = __AX25_PROTO_MAX -1
 };
 
 enum {
diff --git a/net/ax25/sysctl_net_ax25.c b/net/ax25/sysctl_net_ax25.c
index f67711f..894a225 100644
--- a/net/ax25/sysctl_net_ax25.c
+++ b/net/ax25/sysctl_net_ax25.c
@@ -24,7 +24,7 @@ static int min_t3[1],   		max_t3[] = {36
 static int min_idle[1],  		max_idle[] = {65535 * HZ};
 static int min_n2[] = {1},		max_n2[] = {31};
 static int min_paclen[] = {1},		max_paclen[] = {512};
-static int min_proto[1],		max_proto[] = {3};
+static int min_proto[1],		max_proto[] = { AX25_PROTO_MAX };
 static int min_ds_timeout[1],   	max_ds_timeout[] = {65535 * HZ};
 
 static struct ctl_table_header *ax25_table_header;

^ permalink raw reply related

* [-mm patch] net/core/scm.c: make scm_detach_fds() static
From: Adrian Bunk @ 2006-03-18 18:45 UTC (permalink / raw)
  To: Andrew Morton, davem; +Cc: linux-kernel, netdev
In-Reply-To: <20060318044056.350a2931.akpm@osdl.org>

On Sat, Mar 18, 2006 at 04:40:56AM -0800, Andrew Morton wrote:
>...
> Changes since 2.6.16-rc6-mm1:
>...
>  git-net.patch
>...
>  git trees.
>...


We can now make scm_detach_fds() static.


Signed-off-by: Adrian Bunk <bunk@stusta.de>

---

 include/net/scm.h |    1 -
 net/core/scm.c    |    3 +--
 2 files changed, 1 insertion(+), 3 deletions(-)

--- linux-2.6.16-rc6-mm2-full/include/net/scm.h.old	2006-03-18 18:48:20.000000000 +0100
+++ linux-2.6.16-rc6-mm2-full/include/net/scm.h	2006-03-18 18:48:25.000000000 +0100
@@ -24,7 +24,6 @@
 	unsigned long		seq;		/* Connection seqno	*/
 };
 
-extern void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm);
 extern void scm_detach_fds_compat(struct msghdr *msg, struct scm_cookie *scm);
 extern void __scm_destroy(struct scm_cookie *scm);
 extern struct scm_fp_list * scm_fp_dup(struct scm_fp_list *fpl);
--- linux-2.6.16-rc6-mm2-full/net/core/scm.c.old	2006-03-18 18:48:35.000000000 +0100
+++ linux-2.6.16-rc6-mm2-full/net/core/scm.c	2006-03-18 18:48:46.000000000 +0100
@@ -210,7 +210,7 @@
 	return err;
 }
 
-void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm)
+static void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm)
 {
 	struct cmsghdr __user *cm = (struct cmsghdr __user*)msg->msg_control;
 
@@ -329,5 +329,4 @@
 EXPORT_SYMBOL(scm_send);
 EXPORT_SYMBOL(scm_recv);
 EXPORT_SYMBOL(put_cmsg);
-EXPORT_SYMBOL(scm_detach_fds);
 EXPORT_SYMBOL(scm_fp_dup);

^ permalink raw reply

* [PATCH 2.6.16-rc6 1/1] ipw2200: Add Kconfig entries for QOS and Monitor mode
From: Andreas Happe @ 2006-03-18 17:47 UTC (permalink / raw)
  To: Adrian Bunk, Andrew Morton, linux-kernel, jgarzik, netdev, zhu.yi
In-Reply-To: <20060317191447.GC21830@tuxdriver.com>

Adds Kconfig entries for enabling Monitor mode and Quality of service
to the ipw2200 driver. It also renames the IPW_QOS define to
IPW2200_QOS.

As Monitor mode generates lots of firmware errors it depends upon
BROKEN. QOS is under development, so it depends upon EXPERIMENTAL.

Signed-off-by: Andreas Happe <andreashappe@snikt.net>
diff -uNr linux-2.6.16-rc6-base/drivers/net/wireless/ipw2200.c linux-2.6.15/drivers/net/wireless/ipw2200.c
--- linux-2.6.16-rc6-base/drivers/net/wireless/ipw2200.c	2006-03-18 18:20:16.000000000 +0100
+++ linux-2.6.15/drivers/net/wireless/ipw2200.c	2006-03-18 18:24:08.000000000 +0100
@@ -60,7 +60,7 @@
 	'a', 'b', 'g', '?'
 };
 
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 static int qos_enable = 0;
 static int qos_burst_enable = 0;
 static int qos_no_ack_mask = 0;
@@ -124,7 +124,7 @@
 				       *qos_param);
 static int ipw_send_qos_info_command(struct ipw_priv *priv, struct ieee80211_qos_information_element
 				     *qos_param);
-#endif				/* CONFIG_IPW_QOS */
+#endif				/* CONFIG_IPW2200_QOS */
 
 static struct iw_statistics *ipw_get_wireless_stats(struct net_device *dev);
 static void ipw_remove_current_network(struct ipw_priv *priv);
@@ -4208,7 +4208,7 @@
 					queue_work(priv->workqueue,
 						   &priv->system_config);
 
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 #define IPW_GET_PACKET_STYPE(x) WLAN_FC_GET_STYPE( \
 			 le16_to_cpu(((struct ieee80211_hdr *)(x))->frame_ctl))
 					if ((priv->status & STATUS_AUTH) &&
@@ -6549,7 +6549,7 @@
 	return 0;
 }
 
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 
 /* QoS */
 /*
@@ -7031,7 +7031,7 @@
 	return ipw_send_cmd(priv, &cmd);
 }
 
-#endif				/* CONFIG_IPW_QOS */
+#endif				/* CONFIG_IPW2200_QOS */
 
 static int ipw_associate_network(struct ipw_priv *priv,
 				 struct ieee80211_network *network,
@@ -7193,7 +7193,7 @@
 
 	priv->assoc_network = network;
 
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 	ipw_qos_association(priv, network);
 #endif
 
@@ -8027,10 +8027,10 @@
 		IPW_DEBUG_INFO("Bind to static channel %d\n", channel);
 		/* TODO: Validate that provided channel is in range */
 	}
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 	ipw_qos_init(priv, qos_enable, qos_burst_enable,
 		     burst_duration_CCK, burst_duration_OFDM);
-#endif				/* CONFIG_IPW_QOS */
+#endif				/* CONFIG_IPW2200_QOS */
 
 	switch (mode) {
 	case 1:
@@ -9636,7 +9636,7 @@
 	    txb->fragments[0]->data;
 	int i = 0;
 	struct tfd_frame *tfd;
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 	int tx_id = ipw_get_tx_queue_number(priv, pri);
 	struct clx2_tx_queue *txq = &priv->txq[tx_id];
 #else
@@ -9749,9 +9749,9 @@
 		/* No hardware encryption */
 		tfd->u.data.tx_flags |= DCT_FLAG_NO_WEP;
 
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 	ipw_qos_set_tx_queue_command(priv, pri, &(tfd->u.data), unicast);
-#endif				/* CONFIG_IPW_QOS */
+#endif				/* CONFIG_IPW2200_QOS */
 
 	/* payload */
 	tfd->u.data.num_chunks = cpu_to_le32(min((u8) (NUM_TFD_CHUNKS - 2),
@@ -9828,12 +9828,12 @@
 static int ipw_net_is_queue_full(struct net_device *dev, int pri)
 {
 	struct ipw_priv *priv = ieee80211_priv(dev);
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 	int tx_id = ipw_get_tx_queue_number(priv, pri);
 	struct clx2_tx_queue *txq = &priv->txq[tx_id];
 #else
 	struct clx2_tx_queue *txq = &priv->txq[0];
-#endif				/* CONFIG_IPW_QOS */
+#endif				/* CONFIG_IPW2200_QOS */
 
 	if (ipw_queue_space(&txq->q) < txq->q.high_mark)
 		return 1;
@@ -10157,10 +10157,10 @@
 	INIT_WORK(&priv->merge_networks,
 		  (void (*)(void *))ipw_merge_adhoc_network, priv);
 
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 	INIT_WORK(&priv->qos_activate, (void (*)(void *))ipw_bg_qos_activate,
 		  priv);
-#endif				/* CONFIG_IPW_QOS */
+#endif				/* CONFIG_IPW2200_QOS */
 
 	tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
 		     ipw_irq_tasklet, (unsigned long)priv);
@@ -10309,10 +10309,10 @@
 		if (ipw_send_rts_threshold(priv, priv->rts_threshold))
 			goto error;
 	}
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 	IPW_DEBUG_QOS("QoS: call ipw_qos_activate\n");
 	ipw_qos_activate(priv, NULL);
-#endif				/* CONFIG_IPW_QOS */
+#endif				/* CONFIG_IPW2200_QOS */
 
 	if (ipw_set_random_seed(priv))
 		goto error;
@@ -11023,11 +11023,11 @@
 	priv->ieee->set_security = shim__set_security;
 	priv->ieee->is_queue_full = ipw_net_is_queue_full;
 
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 	priv->ieee->handle_probe_response = ipw_handle_beacon;
 	priv->ieee->handle_beacon = ipw_handle_probe_response;
 	priv->ieee->handle_assoc_response = ipw_handle_assoc_response;
-#endif				/* CONFIG_IPW_QOS */
+#endif				/* CONFIG_IPW2200_QOS */
 
 	priv->ieee->perfect_rssi = -20;
 	priv->ieee->worst_rssi = -85;
@@ -11256,7 +11256,7 @@
 module_param(channel, int, 0444);
 MODULE_PARM_DESC(channel, "channel to limit associate to (default 0 [ANY])");
 
-#ifdef CONFIG_IPW_QOS
+#ifdef CONFIG_IPW2200_QOS
 module_param(qos_enable, int, 0444);
 MODULE_PARM_DESC(qos_enable, "enable all QoS functionalitis");
 
@@ -11271,7 +11271,7 @@
 
 module_param(burst_duration_OFDM, int, 0444);
 MODULE_PARM_DESC(burst_duration_OFDM, "set OFDM burst value");
-#endif				/* CONFIG_IPW_QOS */
+#endif				/* CONFIG_IPW2200_QOS */
 
 #ifdef CONFIG_IPW2200_MONITOR
 module_param(mode, int, 0444);
diff -uNr linux-2.6.16-rc6-base/drivers/net/wireless/Kconfig linux-2.6.15/drivers/net/wireless/Kconfig
--- linux-2.6.16-rc6-base/drivers/net/wireless/Kconfig	2006-03-18 18:20:16.000000000 +0100
+++ linux-2.6.15/drivers/net/wireless/Kconfig	2006-03-18 18:33:33.000000000 +0100
@@ -237,6 +237,26 @@
 	  If you are not trying to debug or develop the IPW2200 driver, you 
 	  most likely want to say N here.
 
+config IPW2200_MONITOR
+	bool "Enable promiscuous mode"
+	depends on IPW2200 && BROKEN
+	---help---
+	Enables promiscuous/monitor mode support for the ipw2200 driver.
+	
+	With this feature compiled into the driver, you can switch to.
+	promiscuous mode via the Wireless Tool's Monitor mode.  While in this
+	mode, no packets can be sent.
+	
+config IPW2200_QOS
+	bool "Enable QoS support"
+	depends on IPW2200 && EXPERIMENTAL
+	---help---
+	Enables QOS (Quality of Service) and WMM (Wireless MultiMedia) support
+	for the ipw2200 driver.
+	
+	Enable this option if you need shaping of data which is transmitted
+	over the wireless card (i.e. VoIP).
+	
 config AIRO
 	tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"
 	depends on NET_RADIO && ISA_DMA_API && CRYPTO && (PCI || BROKEN)

^ permalink raw reply

* Re: [PATCH] TC: bug fixes to the "sample" clause
From: Russell Stuart @ 2006-03-18  5:10 UTC (permalink / raw)
  To: hadi; +Cc: netdev, lartc
In-Reply-To: <1142606049.5322.89.camel@jzny2>

On Fri, 2006-03-17 at 09:34 -0500, jamal wrote:
> - the 2.4 algorithm performs very poorly for < 8 bits if you use a
> standard mask for ALL cases except when you use a lot of memory, most of
> which is _wasted_, in which case it performs equally. There are only 8
> masks in an 8 bit ranging from length of 1 to 8. Should not be hard to prove
> or disprove. Should be very easy to see when you plot.

Agreed.

> - You made the claim the 2.6 algorithm performs poorly if you had
> a 16 bit mask. You showed one sample of data. I dont even remember your
> sample anymore because you keep bombarding me with a lot of claims.
> I gave you the parameters which will help convince me. I showed you a 
> sample using similar parameters why the old one was buggy in the case of 
> 8 bits. There are only 16 possible masks for 16 bits (of length 1-16).
> Why cant you just give me similar results? Why do we have to go back
> and forth with a lot of hand waving when we can settle this easily?

I guess there are a couple of points here I don't understand:

- I don't see how 2.4 was "buggy", but perhaps we have different
  definitions of buggy.  I regard giving the wrong result as
  buggy.  Neither algorithm does that.

- I don't understand your point about "there are only 16 
  possible masks for 16 bits".  What do you want me to show?

> I will not respond to any further emails which do not contain 
> data - instead I am going to produce mine.

Put the 2.4 vs 2.6 argument aside.  The best solution as is 
to adopt the "new" algorithm I proposed.  Here is why:

1.  It can emulate either the 2.4 or 2.6 algorithm by a
    suitable choice of mask.  I can prove formally this 
    if you need me to.

2.  There is no dataset where the "new" algorithm is slower 
    than either 2.4, or 2.6.  This follows from (1).

3.  There are datasets where it is faster than the 2.6,
    algorithm, and datasets where it is faster than the
    2.4 algorithm.

    This follows from the fact that there are datasets
    where 2.6 is faster than 2.4, and there are datasets
    where 2.4 is faster than 2.6.  I think you know this
    already, but if not I can give some simple examples
    to prove it - just ask.

4.  Timing.  If we are going to change the algorithm,
    this is the time to do it - while the algorithm in
    "tc" is wrong and must be changed anyway.

For your convenience I have cut & pasted from the previous
email the comparison of the 2.4, 2.6 and "new" algorithm:

  2.4 Algorithm:           2.6 algorithm:       New Algorithm:
  --------------           --------------       --------------
  hash = (hash>>16)^hash;  hash = hash>>shift;  hash = hash>>shift;
  hash = (hash>>8)^hash;   return hash & 0xff;  hash = (hash>>16)^hash;
  return hash & 0xff;                           hash = (hash>>8)^hash;
                                                return hash & 0xff;

^ permalink raw reply

* Re: [2.6 patch] ieee80211_wx.c: remove dead code
From: John W. Linville @ 2006-03-18  1:14 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: netdev, linux-kernel
In-Reply-To: <20060315164015.GZ13973@stusta.de>

On Wed, Mar 15, 2006 at 05:40:15PM +0100, Adrian Bunk wrote:
> Since sec->key_sizes[] is an u8, len can't be < 0.
> 
> Spotted by the Coverity checker.

Merged to upstream branch of wireless-2.6...thanks!

John
-- 
John W. Linville
linville@tuxdriver.com

^ permalink raw reply

* Re: [2.6 patch] drivers/net/wireless/ipw2200.c: fix an array overun
From: John W. Linville @ 2006-03-18  1:13 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: yi.zhu, jketreno, netdev, linux-kernel
In-Reply-To: <20060311034258.GJ21864@stusta.de>

On Sat, Mar 11, 2006 at 04:42:58AM +0100, Adrian Bunk wrote:
> This patch fixes a big array overun found by the Coverity checker.

Merged to upstream branch of wireless-2.6...thanks!

John
-- 
John W. Linville
linville@tuxdriver.com

^ permalink raw reply

* Re: [2.6 patch] drivers/net/wireless/ipw2200.c: make ipw_qos_current_mode() static
From: John W. Linville @ 2006-03-18  1:11 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: yi.zhu, jketreno, linux-kernel, netdev
In-Reply-To: <20060304121431.GN9295@stusta.de>

On Sat, Mar 04, 2006 at 01:14:31PM +0100, Adrian Bunk wrote:
> This patch makes the needlessly global function ipw_qos_current_mode() 
> static.

Merged to upstream branch of wireless-2.6...thanks!

John
-- 
John W. Linville
linville@tuxdriver.com

^ permalink raw reply

* Re: 2.6.16-rc5-mm2: IPW_QOS: two remarks
From: John W. Linville @ 2006-03-17 19:14 UTC (permalink / raw)
  To: Andreas Happe, Adrian Bunk
  Cc: Andrew Morton, linux-kernel, jgarzik, netdev, zhu.yi
In-Reply-To: <200603050146.27529.andreashappe@snikt.net>

On Sun, Mar 05, 2006 at 01:46:26AM +0100, Andreas Happe wrote:

> Add the following config entries for the ipw2200 driver to 
> drivers/net/wireless/Kconfig
>  * IPW2200_MONITOR
> 	enables Monitor mode, as this seems to generate lots of firmware errors
> 	it depends upon BROKEN
>  * IPW2200_QOS
> 	enables QoS feature - this is under development right now, so it depends 
> 	upon EXPERIMENTAL.

Your patch appears to be whitespace-damaged.  Please configure your
mailer appropriately.

Also, please stick to the patch format described here:

	http://linux.yyz.us/patch-format.html

In particular, don't put anything in the message that doesn't belong
in the kernel's changelog, such as email-ish messages.

On Tue, Mar 07, 2006 at 06:06:42PM +0100, Adrian Bunk wrote:
> On Sun, Mar 05, 2006 at 01:46:26AM +0100, Andreas Happe wrote:
> > On Friday 03 March 2006 16:26, Adrian Bunk wrote:
> >...
> > > - please add a help text
> > 
> > i could add some stuff about WMM to its help text, but I think someone more 
> > involved with the ipw2200-project should do that.
> 
> Even a short help text is better than no help text.

I agree w/ Adrian.  Since you are touching it, please put something
appropriate in the Kconfig file.  Zhu Yi may be able to help if you
aren't sure what the help text should say.

Thanks!

John
-- 
John W. Linville
linville@tuxdriver.com

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox