Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4438a02f authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (42 commits)
  MAINTAINERS: Add Andy Gospodarek as co-maintainer.
  r8169: disable ASPM
  RxRPC: Fix v1 keys
  AF_RXRPC: Handle receiving ACKALL packets
  cnic: Fix lost interrupt on bnx2x
  cnic: Prevent status block race conditions with hardware
  net: dcbnl: check correct ops in dcbnl_ieee_set()
  e1000e: disable broken PHY wakeup for ICH10 LOMs, use MAC wakeup instead
  igb: fix sparse warning
  e1000: fix sparse warning
  netfilter: nf_log: avoid oops in (un)bind with invalid nfproto values
  dccp: fix oops on Reset after close
  ipvs: fix dst_lock locking on dest update
  davinci_emac: Add Carrier Link OK check in Davinci RX Handler
  bnx2x: update driver version to 1.62.00-6
  bnx2x: properly calculate lro_mss
  bnx2x: perform statistics "action" before state transition.
  bnx2x: properly configure coefficients for MinBW algorithm (NPAR mode).
  bnx2x: Fix ethtool -t link test for MF (non-pmf) devices.
  bnx2x: Fix nvram test for single port devices.
  ...
parents fb4b10ab 4cd72c6e
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -40,8 +40,6 @@ decnet.txt
	- info on using the DECnet networking layer in Linux.
depca.txt
	- the Digital DEPCA/EtherWORKS DE1?? and DE2?? LANCE Ethernet driver
dgrs.txt
	- the Digi International RightSwitch SE-X Ethernet driver
dmfe.txt
	- info on the Davicom DM9102(A)/DM9132/DM9801 fast ethernet driver.
e100.txt
@@ -50,8 +48,6 @@ e1000.txt
	- info on Intel's E1000 line of gigabit ethernet boards
eql.txt
	- serial IP load balancing
ethertap.txt
	- the Ethertap user space packet reception and transmission driver
ewrk3.txt
	- the Digital EtherWORKS 3 DE203/4/5 Ethernet driver
filter.txt
@@ -104,8 +100,6 @@ tuntap.txt
	- TUN/TAP device driver, allowing user space Rx/Tx of packets.
vortex.txt
	- info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards.
wavelan.txt
	- AT&T GIS (nee NCR) WaveLAN card: An Ethernet-like radio transceiver
x25.txt
	- general info on X.25 development.
x25-iface.txt
+2 −1
Original line number Diff line number Diff line
@@ -1467,6 +1467,7 @@ F: include/net/bluetooth/

BONDING DRIVER
M:	Jay Vosburgh <fubar@us.ibm.com>
M:	Andy Gospodarek <andy@greyhouse.net>
L:	netdev@vger.kernel.org
W:	http://sourceforge.net/projects/bonding/
S:	Supported
@@ -2033,7 +2034,7 @@ F: Documentation/scsi/dc395x.txt
F:	drivers/scsi/dc395x.*

DCCP PROTOCOL
M:	Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
M:	Gerrit Renker <gerrit@erg.abdn.ac.uk>
L:	dccp@vger.kernel.org
W:	http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp
S:	Maintained
+1 −1
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ void diva_xdi_provide_istream_info (ADAPTER* a,
  stream interface.
  If synchronous service was requested, then function
  does return amount of data written to stream.
  'final' does indicate that pice of data to be written is
  'final' does indicate that piece of data to be written is
  final part of frame (necessary only by structured datatransfer)
  return  0 if zero lengh packet was written
  return -1 if stream is full
+16 −12
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@
 * (you will need to reboot afterwards) */
/* #define BNX2X_STOP_ON_ERROR */

#define DRV_MODULE_VERSION      "1.62.00-5"
#define DRV_MODULE_VERSION      "1.62.00-6"
#define DRV_MODULE_RELDATE      "2011/01/30"
#define BNX2X_BC_VER            0x040200

@@ -1613,18 +1613,22 @@ static inline u32 reg_poll(struct bnx2x *bp, u32 reg, u32 expected, int ms,
#define BNX2X_BTR			4
#define MAX_SPQ_PENDING			8


/* CMNG constants
   derived from lab experiments, and not from system spec calculations !!! */
/* CMNG constants, as derived from system spec calculations */
/* default MIN rate in case VNIC min rate is configured to zero - 100Mbps */
#define DEF_MIN_RATE					100
/* resolution of the rate shaping timer - 100 usec */
#define RS_PERIODIC_TIMEOUT_USEC			100
/* resolution of fairness algorithm in usecs -
   coefficient for calculating the actual t fair */
#define T_FAIR_COEF			10000000
/* number of bytes in single QM arbitration cycle -
   coefficient for calculating the fairness timer */
#define QM_ARB_BYTES			40000
 * coefficient for calculating the fairness timer */
#define QM_ARB_BYTES					160000
/* resolution of Min algorithm 1:100 */
#define MIN_RES						100
/* how many bytes above threshold for the minimal credit of Min algorithm*/
#define MIN_ABOVE_THRESH				32768
/* Fairness algorithm integration time coefficient -
 * for calculating the actual Tfair */
#define T_FAIR_COEF	((MIN_ABOVE_THRESH +  QM_ARB_BYTES) * 8 * MIN_RES)
/* Memory of fairness algorithm . 2 cycles */
#define FAIR_MEM					2


+51 −14
Original line number Diff line number Diff line
@@ -259,10 +259,44 @@ static void bnx2x_tpa_start(struct bnx2x_fastpath *fp, u16 queue,
#endif
}

/* Timestamp option length allowed for TPA aggregation:
 *
 *		nop nop kind length echo val
 */
#define TPA_TSTAMP_OPT_LEN	12
/**
 * Calculate the approximate value of the MSS for this
 * aggregation using the first packet of it.
 *
 * @param bp
 * @param parsing_flags Parsing flags from the START CQE
 * @param len_on_bd Total length of the first packet for the
 *		     aggregation.
 */
static inline u16 bnx2x_set_lro_mss(struct bnx2x *bp, u16 parsing_flags,
				    u16 len_on_bd)
{
	/* TPA arrgregation won't have an IP options and TCP options
	 * other than timestamp.
	 */
	u16 hdrs_len = ETH_HLEN + sizeof(struct iphdr) + sizeof(struct tcphdr);


	/* Check if there was a TCP timestamp, if there is it's will
	 * always be 12 bytes length: nop nop kind length echo val.
	 *
	 * Otherwise FW would close the aggregation.
	 */
	if (parsing_flags & PARSING_FLAGS_TIME_STAMP_EXIST_FLAG)
		hdrs_len += TPA_TSTAMP_OPT_LEN;

	return len_on_bd - hdrs_len;
}

static int bnx2x_fill_frag_skb(struct bnx2x *bp, struct bnx2x_fastpath *fp,
			       struct sk_buff *skb,
			       struct eth_fast_path_rx_cqe *fp_cqe,
			       u16 cqe_idx)
			       u16 cqe_idx, u16 parsing_flags)
{
	struct sw_rx_page *rx_pg, old_rx_pg;
	u16 len_on_bd = le16_to_cpu(fp_cqe->len_on_bd);
@@ -275,8 +309,8 @@ static int bnx2x_fill_frag_skb(struct bnx2x *bp, struct bnx2x_fastpath *fp,

	/* This is needed in order to enable forwarding support */
	if (frag_size)
		skb_shinfo(skb)->gso_size = min((u32)SGE_PAGE_SIZE,
					       max(frag_size, (u32)len_on_bd));
		skb_shinfo(skb)->gso_size = bnx2x_set_lro_mss(bp, parsing_flags,
							      len_on_bd);

#ifdef BNX2X_STOP_ON_ERROR
	if (pages > min_t(u32, 8, MAX_SKB_FRAGS)*SGE_PAGE_SIZE*PAGES_PER_SGE) {
@@ -344,6 +378,8 @@ static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp,
	if (likely(new_skb)) {
		/* fix ip xsum and give it to the stack */
		/* (no need to map the new skb) */
		u16 parsing_flags =
			le16_to_cpu(cqe->fast_path_cqe.pars_flags.flags);

		prefetch(skb);
		prefetch(((char *)(skb)) + L1_CACHE_BYTES);
@@ -373,9 +409,9 @@ static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp,
		}

		if (!bnx2x_fill_frag_skb(bp, fp, skb,
					 &cqe->fast_path_cqe, cqe_idx)) {
			if ((le16_to_cpu(cqe->fast_path_cqe.
			    pars_flags.flags) & PARSING_FLAGS_VLAN))
					 &cqe->fast_path_cqe, cqe_idx,
					 parsing_flags)) {
			if (parsing_flags & PARSING_FLAGS_VLAN)
				__vlan_hwaccel_put_tag(skb,
						 le16_to_cpu(cqe->fast_path_cqe.
							     vlan_tag));
@@ -703,19 +739,20 @@ u16 bnx2x_get_mf_speed(struct bnx2x *bp)
{
	u16 line_speed = bp->link_vars.line_speed;
	if (IS_MF(bp)) {
		u16 maxCfg = (bp->mf_config[BP_VN(bp)] &
						FUNC_MF_CFG_MAX_BW_MASK) >>
						FUNC_MF_CFG_MAX_BW_SHIFT;
		/* Calculate the current MAX line speed limit for the DCC
		 * capable devices
		u16 maxCfg = bnx2x_extract_max_cfg(bp,
						   bp->mf_config[BP_VN(bp)]);

		/* Calculate the current MAX line speed limit for the MF
		 * devices
		 */
		if (IS_MF_SD(bp)) {
		if (IS_MF_SI(bp))
			line_speed = (line_speed * maxCfg) / 100;
		else { /* SD mode */
			u16 vn_max_rate = maxCfg * 100;

			if (vn_max_rate < line_speed)
				line_speed = vn_max_rate;
		} else /* IS_MF_SI(bp)) */
			line_speed = (line_speed * maxCfg) / 100;
		}
	}

	return line_speed;
Loading