projects/linux·commit eb3d3390

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

eb3d3390 · Linus Torvalds <[email protected]> · 2013-05-24 08:27:32 -07:00

Pull networking fixes from David Miller:
 "It's been a while since my last pull request so quite a few fixes have
  piled up."

Indeed.

 1) Fix nf_{log,queue} compilation with PROC_FS disabled, from Pablo
    Neira Ayuso.

 2) Fix data corruption on some tg3 chips with TSO enabled, from Michael
    Chan.

 3) Fix double insertion of VLAN tags in be2net driver, from Sarveshwar
    Bandi.

 4) Don't have TCP's MD5 support pass > PAGE_SIZE page offsets in
    scatter-gather entries into the crypto layer, the crypto layer can't
    handle that.  From Eric Dumazet.

 5) Fix lockdep splat in 802.1Q MRP code, also from Eric Dumazet.

 6) Fix OOPS in netfilter log module when called from conntrack, from
    Hans Schillstrom.

 7) FEC driver needs to use netif_tx_{lock,unlock}_bh() rather than the
    non-BH disabling variants.  From Fabio Estevam.

 8) TCP GSO can generate out-of-order packets, fix from Eric Dumazet.

 9) vxlan driver doesn't update 'used' field of fdb entries when it
    should, from Sridhar Samudrala.

10) ipv6 should use kzalloc() to allocate inet6 socket cork options,
    otherwise we can OOPS in ip6_cork_release().  From Eric Dumazet.

11) Fix races in bonding set mode, from Nikolay Aleksandrov.

12) Fix checksum generation regression added by "r8169: fix 8168evl
    frame padding.", from Francois Romieu.

13) ip_gre can look at stale SKB data pointer, fix from Eric Dumazet.

14) Fix checksum handling when GSO is enabled in bnx2x driver with
    certain chips, from Yuval Mintz.

15) Fix double free in batman-adv, from Martin Hundebøll.

16) Fix device startup synchronization with firmware in tg3 driver, from
    Nithin Sujit.

17) perf networking dropmonitor doesn't work at all due to mixed up
    trace parameter ordering, from Ben Hutchings.

18) Fix proportional rate reduction handling in tcp_ack(), from Nandita
    Dukkipati.

19) IPSEC layer doesn't return an error when a valid state is detected,
    causing an OOPS.  Fix from Timo Teräs.

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (85 commits)
  be2net: bug fix on returning an invalid nic descriptor
  tcp: xps: fix reordering issues
  net: Revert unused variable changes.
  xfrm: properly handle invalid states as an error
  virtio_net: enable napi for all possible queues during open
  tcp: bug fix in proportional rate reduction.
  net: ethernet: sun: drop unused variable
  net: ethernet: korina: drop unused variable
  net: ethernet: apple: drop unused variable
  qmi_wwan: Added support for Cinterion's PLxx WWAN Interface
  perf: net_dropmonitor: Remove progress indicator
  perf: net_dropmonitor: Use bisection in symbol lookup
  perf: net_dropmonitor: Do not assume ordering of dictionaries
  perf: net_dropmonitor: Fix symbol-relative addresses
  perf: net_dropmonitor: Fix trace parameter order
  net: fec: use a more proper compatible string for MVF type device
  qlcnic: Fix updating netdev->features
  qlcnic: remove netdev->trans_start updates within the driver
  qlcnic: Return proper error codes from probe failure paths
  tg3: Update version to 3.132
  ...
Commit
eb3d33900aa953bcdfe132a71bb03ee592ebbb47
Parents
514e250f · 950e2958

Merge commit. Changes below are compared with the first parent: 514e250f.

Changes

95 files changed · +937 −461

FileStatusAddDelContent
MAINTAINERSmodified+5−5View file
drivers/bcma/scan.cmodified+2−0View file
drivers/isdn/capi/kcapi.cmodified+3−3View file
drivers/net/bonding/bond_3ad.cmodified+17−4View file
drivers/net/bonding/bond_3ad.hmodified+2−0View file
drivers/net/bonding/bond_main.cmodified+12−14View file
drivers/net/bonding/bond_procfs.cmodified+1−1View file
drivers/net/bonding/bond_sysfs.cmodified+8−5View file
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.cmodified+7−2View file
drivers/net/ethernet/broadcom/tg3.cmodified+49−12View file
drivers/net/ethernet/cadence/macb.cmodified+16−2View file
drivers/net/ethernet/cadence/macb.hmodified+7−0View file
drivers/net/ethernet/emulex/benet/be_cmds.cmodified+4−9View file
drivers/net/ethernet/emulex/benet/be_main.cmodified+5−13View file
drivers/net/ethernet/freescale/fec_main.cmodified+7−7View file
drivers/net/ethernet/freescale/gianfar_ptp.cmodified+1−0View file
drivers/net/ethernet/icplus/ipg.hmodified+43−43View file
drivers/net/ethernet/marvell/mv643xx_eth.cmodified+3−3View file
drivers/net/ethernet/qlogic/qlcnic/qlcnic.hmodified+6−0View file
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.cmodified+0−2View file
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.cmodified+45−4View file
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.cmodified+16−49View file
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.cmodified+0−1View file
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.cmodified+3−0View file
drivers/net/ethernet/realtek/8139cp.cmodified+1−0View file
drivers/net/ethernet/realtek/r8169.cmodified+27−14View file
drivers/net/ethernet/sfc/efx.cmodified+5−3View file
drivers/net/ethernet/sfc/net_driver.hmodified+15−16View file
drivers/net/ethernet/sfc/rx.cmodified+4−4View file
drivers/net/usb/qmi_wwan.cmodified+1−0View file
drivers/net/usb/rtl8150.cmodified+46−54View file
drivers/net/virtio_net.cmodified+5−4View file
drivers/net/vxlan.cmodified+14−3View file
drivers/net/wireless/ath/ath9k/ar9003_calib.cmodified+1−1View file
drivers/net/wireless/ath/ath9k/ar9485_initvals.hmodified+1−1View file
drivers/net/wireless/ath/ath9k/ath9k.hmodified+3−1View file
drivers/net/wireless/ath/ath9k/debug.cmodified+8−0View file
drivers/net/wireless/ath/ath9k/debug.hmodified+5−0View file
drivers/net/wireless/ath/ath9k/init.cmodified+4−6View file
drivers/net/wireless/ath/ath9k/main.cmodified+5−3View file
drivers/net/wireless/ath/ath9k/xmit.cmodified+48−26View file
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.cmodified+6−1View file
drivers/net/wireless/iwlegacy/common.cmodified+1−1View file
drivers/net/wireless/iwlwifi/mvm/fw-api.hmodified+27−0View file
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.cmodified+8−4View file
drivers/net/wireless/iwlwifi/mvm/mac80211.cmodified+16−1View file
drivers/net/wireless/iwlwifi/mvm/mvm.hmodified+1−0View file
drivers/net/wireless/iwlwifi/mvm/ops.cmodified+1−0View file
drivers/net/wireless/iwlwifi/mvm/scan.cmodified+6−0View file
drivers/net/wireless/iwlwifi/mvm/sta.cmodified+10−3View file
drivers/net/wireless/iwlwifi/mvm/sta.hmodified+0−2View file
drivers/net/wireless/iwlwifi/mvm/tx.cmodified+36−12View file
drivers/net/wireless/mac80211_hwsim.cmodified+9−9View file
drivers/net/wireless/rtlwifi/rtl8188ee/trx.hmodified+2−2View file
drivers/net/wireless/rtlwifi/rtl8192cu/sw.cmodified+1−0View file
include/linux/bcma/bcma.hmodified+4−1View file
include/linux/brcmphy.hmodified+5−0View file
include/linux/netdevice.hmodified+11−0View file
include/net/mac80211.hmodified+8−4View file
include/net/netfilter/nf_log.hmodified+2−1View file
include/net/netfilter/nfnetlink_log.hmodified+2−1View file
net/802/mrp.cmodified+2−2View file
net/batman-adv/main.cmodified+1−0View file
net/batman-adv/originator.cmodified+16−0View file
net/batman-adv/originator.hmodified+1−0View file
net/batman-adv/soft-interface.cmodified+1−0View file
net/batman-adv/translation-table.cmodified+6−1View file
net/bridge/netfilter/ebt_log.cmodified+5−6View file
net/bridge/netfilter/ebt_ulog.cmodified+11−7View file
net/ipv4/ip_gre.cmodified+2−1View file
net/ipv4/netfilter/ipt_ULOG.cmodified+8−5View file
net/ipv4/tcp.cmodified+26−3View file
net/ipv4/tcp_input.cmodified+13−10View file
net/ipv4/tcp_output.cmodified+6−4View file
net/ipv6/ip6_output.cmodified+1−1View file
net/irda/irlap_frame.cmodified+1−1View file
net/mac80211/ieee80211_i.hmodified+1−0View file
net/mac80211/mlme.cmodified+51−10View file
net/mac80211/rate.cmodified+8−1View file
net/mac80211/rx.cmodified+3−0View file
net/mac80211/tkip.cmodified+2−2View file
net/mac80211/util.cmodified+7−0View file
net/netfilter/nf_log.cmodified+5−2View file
net/netfilter/nfnetlink_log.cmodified+4−2View file
net/netfilter/nfnetlink_queue_core.cmodified+2−0View file
net/netfilter/xt_LOG.cmodified+7−6View file
net/netfilter/xt_NFLOG.cmodified+2−1View file
net/netfilter/xt_TCPOPTSTRIP.cmodified+14−3View file
net/netlabel/netlabel_domainhash.cmodified+69−0View file
net/wireless/core.cmodified+10−7View file
net/wireless/nl80211.cmodified+4−0View file
net/wireless/sme.cmodified+2−1View file
net/wireless/trace.hmodified+13−10View file
net/xfrm/xfrm_output.cmodified+1−0View file
tools/perf/scripts/python/net_dropmonitor.pymodified+21−18View file

Only the first 600 diff lines are shown. Download the complete patch.

MAINTAINERS

View file
diff --git a/MAINTAINERS b/MAINTAINERS
index 94b5a60..b645a3d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -5524,18 +5524,18 @@ F: Documentation/networking/s2io.txt
F: Documentation/networking/vxge.txt
F: drivers/net/ethernet/neterion/
-NETFILTER/IPTABLES/IPCHAINS
-P: Harald Welte
-P: Jozsef Kadlecsik
+NETFILTER/IPTABLES
M: Pablo Neira Ayuso <[email protected]>
M: Patrick McHardy <[email protected]>
+M: Jozsef Kadlecsik <[email protected]>
W: http://www.netfilter.org/
W: http://www.iptables.org/
-T: git git://1984.lsi.us.es/nf
-T: git git://1984.lsi.us.es/nf-next
+Q: http://patchwork.ozlabs.org/project/netfilter-devel/list/
+T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git
+T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git
S: Supported
F: include/linux/netfilter*
F: include/linux/netfilter/

drivers/bcma/scan.c

View file
diff --git a/drivers/bcma/scan.c b/drivers/bcma/scan.c
index bca9c80..8bffa5c 100644
--- a/drivers/bcma/scan.c
+++ b/drivers/bcma/scan.c
@@ -84,6 +84,8 @@ static const struct bcma_device_id_name bcma_bcm_device_names[] = {
{ BCMA_CORE_I2S, "I2S" },
{ BCMA_CORE_SDR_DDR1_MEM_CTL, "SDR/DDR1 Memory Controller" },
{ BCMA_CORE_SHIM, "SHIM" },
+ { BCMA_CORE_PCIE2, "PCIe Gen2" },
+ { BCMA_CORE_ARM_CR4, "ARM CR4" },
{ BCMA_CORE_DEFAULT, "Default" },
};

drivers/isdn/capi/kcapi.c

View file
diff --git a/drivers/isdn/capi/kcapi.c b/drivers/isdn/capi/kcapi.c
index 9b1b274..c123709 100644
--- a/drivers/isdn/capi/kcapi.c
+++ b/drivers/isdn/capi/kcapi.c
@@ -93,7 +93,7 @@ capi_ctr_put(struct capi_ctr *ctr)
static inline struct capi_ctr *get_capi_ctr_by_nr(u16 contr)
{
- if (contr - 1 >= CAPI_MAXCONTR)
+ if (contr < 1 || contr - 1 >= CAPI_MAXCONTR)
return NULL;
return capi_controller[contr - 1];
@@ -103,7 +103,7 @@ static inline struct capi20_appl *__get_capi_appl_by_nr(u16 applid)
{
lockdep_assert_held(&capi_controller_lock);
- if (applid - 1 >= CAPI_MAXAPPL)
+ if (applid < 1 || applid - 1 >= CAPI_MAXAPPL)
return NULL;
return capi_applications[applid - 1];
@@ -111,7 +111,7 @@ static inline struct capi20_appl *__get_capi_appl_by_nr(u16 applid)
static inline struct capi20_appl *get_capi_appl_by_nr(u16 applid)
{
- if (applid - 1 >= CAPI_MAXAPPL)
+ if (applid < 1 || applid - 1 >= CAPI_MAXAPPL)
return NULL;
return rcu_dereference(capi_applications[applid - 1]);

drivers/net/bonding/bond_3ad.c

View file
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
index fc58d11..390061d 100644
--- a/drivers/net/bonding/bond_3ad.c
+++ b/drivers/net/bonding/bond_3ad.c
@@ -2360,14 +2360,15 @@ int bond_3ad_set_carrier(struct bonding *bond)
}
/**
- * bond_3ad_get_active_agg_info - get information of the active aggregator
+ * __bond_3ad_get_active_agg_info - get information of the active aggregator
* @bond: bonding struct to work on
* @ad_info: ad_info struct to fill with the bond's info
*
* Returns: 0 on success
* < 0 on error
*/
-int bond_3ad_get_active_agg_info(struct bonding *bond, struct ad_info *ad_info)
+int __bond_3ad_get_active_agg_info(struct bonding *bond,
+ struct ad_info *ad_info)
{
struct aggregator *aggregator = NULL;
struct port *port;
@@ -2391,6 +2392,18 @@ int bond_3ad_get_active_agg_info(struct bonding *bond, struct ad_info *ad_info)
return -1;
}
+/* Wrapper used to hold bond->lock so no slave manipulation can occur */
+int bond_3ad_get_active_agg_info(struct bonding *bond, struct ad_info *ad_info)
+{
+ int ret;
+
+ read_lock(&bond->lock);
+ ret = __bond_3ad_get_active_agg_info(bond, ad_info);
+ read_unlock(&bond->lock);
+
+ return ret;
+}
+
int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
{
struct slave *slave, *start_at;
@@ -2402,8 +2415,8 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
struct ad_info ad_info;
int res = 1;
- if (bond_3ad_get_active_agg_info(bond, &ad_info)) {
- pr_debug("%s: Error: bond_3ad_get_active_agg_info failed\n",
+ if (__bond_3ad_get_active_agg_info(bond, &ad_info)) {
+ pr_debug("%s: Error: __bond_3ad_get_active_agg_info failed\n",
dev->name);
goto out;
}

drivers/net/bonding/bond_3ad.h

View file
diff --git a/drivers/net/bonding/bond_3ad.h b/drivers/net/bonding/bond_3ad.h
index 0cfaa4a..5d91ad0 100644
--- a/drivers/net/bonding/bond_3ad.h
+++ b/drivers/net/bonding/bond_3ad.h
@@ -273,6 +273,8 @@ void bond_3ad_adapter_speed_changed(struct slave *slave);
void bond_3ad_adapter_duplex_changed(struct slave *slave);
void bond_3ad_handle_link_change(struct slave *slave, char link);
int bond_3ad_get_active_agg_info(struct bonding *bond, struct ad_info *ad_info);
+int __bond_3ad_get_active_agg_info(struct bonding *bond,
+ struct ad_info *ad_info);
int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev);
int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond,
struct slave *slave);

drivers/net/bonding/bond_main.c

View file
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index d0aade0..29b846c 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1362,6 +1362,7 @@ static netdev_features_t bond_fix_features(struct net_device *dev,
slave->dev->features,
mask);
}
+ features = netdev_add_tso_features(features, mask);
out:
read_unlock(&bond->lock);
@@ -2555,8 +2556,8 @@ static void bond_arp_send(struct net_device *slave_dev, int arp_op, __be32 dest_
{
struct sk_buff *skb;
- pr_debug("arp %d on slave %s: dst %x src %x vid %d\n", arp_op,
- slave_dev->name, dest_ip, src_ip, vlan_id);
+ pr_debug("arp %d on slave %s: dst %pI4 src %pI4 vid %d\n", arp_op,
+ slave_dev->name, &dest_ip, &src_ip, vlan_id);
skb = arp_create(arp_op, ETH_P_ARP, dest_ip, slave_dev, src_ip,
NULL, slave_dev->dev_addr, NULL);
@@ -2588,7 +2589,7 @@ static void bond_arp_send_all(struct bonding *bond, struct slave *slave)
__be32 addr;
if (!targets[i])
break;
- pr_debug("basa: target %x\n", targets[i]);
+ pr_debug("basa: target %pI4\n", &targets[i]);
if (!bond_vlan_used(bond)) {
pr_debug("basa: empty vlan: arp_send\n");
addr = bond_confirm_addr(bond->dev, targets[i], 0);
@@ -4470,7 +4471,7 @@ int bond_parse_parm(const char *buf, const struct bond_parm_tbl *tbl)
static int bond_check_params(struct bond_params *params)
{
- int arp_validate_value, fail_over_mac_value, primary_reselect_value;
+ int arp_validate_value, fail_over_mac_value, primary_reselect_value, i;
/*
* Convert string parameters.
@@ -4650,19 +4651,18 @@ static int bond_check_params(struct bond_params *params)
arp_interval = BOND_LINK_ARP_INTERV;
}
- for (arp_ip_count = 0;
- (arp_ip_count < BOND_MAX_ARP_TARGETS) && arp_ip_target[arp_ip_count];
- arp_ip_count++) {
+ for (arp_ip_count = 0, i = 0;
+ (arp_ip_count < BOND_MAX_ARP_TARGETS) && arp_ip_target[i]; i++) {
/* not complete check, but should be good enough to
catch mistakes */
- __be32 ip = in_aton(arp_ip_target[arp_ip_count]);
- if (!isdigit(arp_ip_target[arp_ip_count][0]) ||
- ip == 0 || ip == htonl(INADDR_BROADCAST)) {
+ __be32 ip = in_aton(arp_ip_target[i]);
+ if (!isdigit(arp_ip_target[i][0]) || ip == 0 ||
+ ip == htonl(INADDR_BROADCAST)) {
pr_warning("Warning: bad arp_ip_target module parameter (%s), ARP monitoring will not be performed\n",
- arp_ip_target[arp_ip_count]);
+ arp_ip_target[i]);
arp_interval = 0;
} else {
- arp_target[arp_ip_count] = ip;
+ arp_target[arp_ip_count++] = ip;
}
}
@@ -4696,8 +4696,6 @@ static int bond_check_params(struct bond_params *params)
if (miimon) {
pr_info("MII link monitoring set to %d ms\n", miimon);
} else if (arp_interval) {
- int i;
-
pr_info("ARP monitoring set to %d ms, validate %s, with %d target(s):",
arp_interval,
arp_validate_tbl[arp_validate_value].modename,

drivers/net/bonding/bond_procfs.c

View file
diff --git a/drivers/net/bonding/bond_procfs.c b/drivers/net/bonding/bond_procfs.c
index 94d06f1..4060d41 100644
--- a/drivers/net/bonding/bond_procfs.c
+++ b/drivers/net/bonding/bond_procfs.c
@@ -130,7 +130,7 @@ static void bond_info_show_master(struct seq_file *seq)
seq_printf(seq, "Aggregator selection policy (ad_select): %s\n",
ad_select_tbl[bond->params.ad_select].modename);
- if (bond_3ad_get_active_agg_info(bond, &ad_info)) {
+ if (__bond_3ad_get_active_agg_info(bond, &ad_info)) {
seq_printf(seq, "bond %s has no active aggregator\n",
bond->dev->name);
} else {

drivers/net/bonding/bond_sysfs.c

View file
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
index ea7a388..d7434e0 100644
--- a/drivers/net/bonding/bond_sysfs.c
+++ b/drivers/net/bonding/bond_sysfs.c
@@ -316,6 +316,9 @@ static ssize_t bonding_store_mode(struct device *d,
int new_value, ret = count;
struct bonding *bond = to_bond(d);
+ if (!rtnl_trylock())
+ return restart_syscall();
+
if (bond->dev->flags & IFF_UP) {
pr_err("unable to update mode of %s because interface is up.\n",
bond->dev->name);
@@ -352,6 +355,7 @@ static ssize_t bonding_store_mode(struct device *d,
bond->dev->name, bond_mode_tbl[new_value].modename,
new_value);
out:
+ rtnl_unlock();
return ret;
}
static DEVICE_ATTR(mode, S_IRUGO | S_IWUSR,
@@ -1315,7 +1319,6 @@ static ssize_t bonding_show_mii_status(struct device *d,
}
static DEVICE_ATTR(mii_status, S_IRUGO, bonding_show_mii_status, NULL);
-
/*
* Show current 802.3ad aggregator ID.
*/
@@ -1329,7 +1332,7 @@ static ssize_t bonding_show_ad_aggregator(struct device *d,
if (bond->params.mode == BOND_MODE_8023AD) {
struct ad_info ad_info;
count = sprintf(buf, "%d\n",
- (bond_3ad_get_active_agg_info(bond, &ad_info))
+ bond_3ad_get_active_agg_info(bond, &ad_info)
? 0 : ad_info.aggregator_id);
}
@@ -1351,7 +1354,7 @@ static ssize_t bonding_show_ad_num_ports(struct device *d,
if (bond->params.mode == BOND_MODE_8023AD) {
struct ad_info ad_info;
count = sprintf(buf, "%d\n",
- (bond_3ad_get_active_agg_info(bond, &ad_info))
+ bond_3ad_get_active_agg_info(bond, &ad_info)
? 0 : ad_info.ports);
}
@@ -1373,7 +1376,7 @@ static ssize_t bonding_show_ad_actor_key(struct device *d,
if (bond->params.mode == BOND_MODE_8023AD) {
struct ad_info ad_info;
count = sprintf(buf, "%d\n",
- (bond_3ad_get_active_agg_info(bond, &ad_info))
+ bond_3ad_get_active_agg_info(bond, &ad_info)
? 0 : ad_info.actor_key);
}
@@ -1395,7 +1398,7 @@ static ssize_t bonding_show_ad_partner_key(struct device *d,
if (bond->params.mode == BOND_MODE_8023AD) {
struct ad_info ad_info;
count = sprintf(buf, "%d\n",
- (bond_3ad_get_active_agg_info(bond, &ad_info))
+ bond_3ad_get_active_agg_info(bond, &ad_info)
? 0 : ad_info.partner_key);
}

drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c

View file
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index b8fbe26..be59ec4 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -3313,6 +3313,7 @@ static void bnx2x_set_pbd_gso_e2(struct sk_buff *skb, u32 *parsing_data,
*/
static void bnx2x_set_pbd_gso(struct sk_buff *skb,
struct eth_tx_parse_bd_e1x *pbd,
+ struct eth_tx_start_bd *tx_start_bd,
u32 xmit_type)
{
pbd->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
@@ -3326,11 +3327,14 @@ static void bnx2x_set_pbd_gso(struct sk_buff *skb,
ip_hdr(skb)->daddr,
0, IPPROTO_TCP, 0));
- } else
+ /* GSO on 57710/57711 needs FW to calculate IP checksum */
+ tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IP_CSUM;
+ } else {
pbd->tcp_pseudo_csum =
bswab16(~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
&ipv6_hdr(skb)->daddr,
0, IPPROTO_TCP, 0));
+ }
pbd->global_data |=
cpu_to_le16(ETH_TX_PARSE_BD_E1X_PSEUDO_CS_WITHOUT_LEN);
@@ -3814,7 +3818,8 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
bnx2x_set_pbd_gso_e2(skb, &pbd_e2_parsing_data,
xmit_type);
else
- bnx2x_set_pbd_gso(skb, pbd_e1x, xmit_type);
+ bnx2x_set_pbd_gso(skb, pbd_e1x, tx_start_bd,
+ xmit_type);
}
/* Set the PBD's parsing_data field if not zero

drivers/net/ethernet/broadcom/tg3.c

View file
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 728d42a..1f2dd92 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -94,10 +94,10 @@ static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
#define DRV_MODULE_NAME "tg3"
#define TG3_MAJ_NUM 3
-#define TG3_MIN_NUM 131
+#define TG3_MIN_NUM 132
#define DRV_MODULE_VERSION \
__stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
-#define DRV_MODULE_RELDATE "April 09, 2013"
+#define DRV_MODULE_RELDATE "May 21, 2013"
#define RESET_KIND_SHUTDOWN 0
#define RESET_KIND_INIT 1
@@ -2957,6 +2957,31 @@ static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
return 0;
}
+static bool tg3_phy_power_bug(struct tg3 *tp)
+{
+ switch (tg3_asic_rev(tp)) {
+ case ASIC_REV_5700:
+ case ASIC_REV_5704:
+ return true;
+ case ASIC_REV_5780:
+ if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
+ return true;
+ return false;
+ case ASIC_REV_5717:
+ if (!tp->pci_fn)
+ return true;
+ return false;
+ case ASIC_REV_5719:
+ case ASIC_REV_5720:
+ if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
+ !tp->pci_fn)
+ return true;
+ return false;
+ }
+
+ return false;
+}
+
static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
{
u32 val;
@@ -3016,12 +3041,7 @@ static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
/* The PHY should not be powered down on some chips because
* of bugs.
*/
- if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
- tg3_asic_rev(tp) == ASIC_REV_5704 ||
- (tg3_asic_rev(tp) == ASIC_REV_5780 &&
- (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) ||
- (tg3_asic_rev(tp) == ASIC_REV_5717 &&
- !tp->pci_fn))
+ if (tg3_phy_power_bug(tp))
return;
if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
@@ -7428,6 +7448,20 @@ static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
return (base > 0xffffdcc0) && (base + len + 8 < base);
}
+/* Test for TSO DMA buffers that cross into regions which are within MSS bytes
+ * of any 4GB boundaries: 4G, 8G, etc
+ */
+static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping,
+ u32 len, u32 mss)
+{
+ if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) {
+ u32 base = (u32) mapping & 0xffffffff;
+
+ return ((base + len + (mss & 0x3fff)) < base);
+ }
+ return 0;
+}
+
/* Test for DMA addresses > 40-bit */
static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
int len)
@@ -7464,6 +7498,9 @@ static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
if (tg3_4g_overflow_test(map, len))
hwbug = true;
+ if (tg3_4g_tso_overflow_test(tp, map, len, mss))
+ hwbug = true;
+
if (tg3_40bit_overflow_test(tp, map, len))
hwbug = true;
@@ -8874,6 +8911,10 @@ static int tg3_chip_reset(struct tg3 *tp)
tg3_halt_cpu(tp, RX_CPU_BASE);
}
+ err = tg3_poll_fw(tp);
+ if (err)
+ return err;
+
tw32(GRC_MODE, tp->grc_mode);
if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) {
@@ -8904,10 +8945,6 @@ static int tg3_chip_reset(struct tg3 *tp)
tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
- err = tg3_poll_fw(tp);
- if (err)
- return err;
-
tg3_mdio_start(tp);
if (tg3_flag(tp, PCI_EXPRESS) &&

drivers/net/ethernet/cadence/macb.c

View file
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index 6be513d..c89aa41 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -485,7 +485,8 @@ static void macb_tx_interrupt(struct macb *bp)
status = macb_readl(bp, TSR);
macb_writel(bp, TSR, status);
- macb_writel(bp, ISR, MACB_BIT(TCOMP));
+ if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE)
+ macb_writel(bp, ISR, MACB_BIT(TCOMP));
netdev_vdbg(bp->dev, "macb_tx_interrupt status = 0x%03lx\n",
(unsigned long)status);
@@ -738,7 +739,8 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)
* now.
*/
macb_writel(bp, IDR, MACB_RX_INT_FLAGS);
- macb_writel(bp, ISR, MACB_BIT(RCOMP));
+ if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE)
+ macb_writel(bp, ISR, MACB_BIT(RCOMP));
if (napi_schedule_prep(&bp->napi)) {
netdev_vdbg(bp->dev, "scheduling RX softirq\n");
@@ -1062,6 +1064,17 @@ static void macb_configure_dma(struct macb *bp)
}
}
+/*
+ * Configure peripheral capacities according to integration options used
+ */
+static void macb_configure_caps(struct macb *bp)
+{
+ if (macb_is_gem(bp)) {
+ if (GEM_BF(IRQCOR, gem_readl(bp, DCFG1)) == 0)
+ bp->caps |= MACB_CAPS_ISR_CLEAR_ON_WRITE;
+ }
+}
+
static void macb_init_hw(struct macb *bp)
{
u32 config;
@@ -1084,6 +1097,7 @@ static void macb_init_hw(struct macb *bp)
bp->duplex = DUPLEX_HALF;
macb_configure_dma(bp);
+ macb_configure_caps(bp);
/* Initialize TX and RX buffers */
macb_writel(bp, RBQP, bp->rx_ring_dma);

drivers/net/ethernet/cadence/macb.h

View file
diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
index 993d703..548c0ec 100644
--- a/drivers/net/ethernet/cadence/macb.h
+++ b/drivers/net/ethernet/cadence/macb.h
@@ -300,6 +300,8 @@
#define MACB_REV_SIZE 16
/* Bitfields in DCFG1. */
+#define GEM_IRQCOR_OFFSET 23
+#define GEM_IRQCOR_SIZE 1
#define GEM_DBWDEF_OFFSET 25
#define GEM_DBWDEF_SIZE 3
@@ -323,6 +325,9 @@
#define MACB_MAN_READ 2
#define MACB_MAN_CODE 2
+/* Capability mask bits */
+#define MACB_CAPS_ISR_CLEAR_ON_WRITE 0x1
+
/* Bit manipulation macros */
#define MACB_BIT(name) \
(1 << MACB_##name##_OFFSET)
@@ -574,6 +579,8 @@ struct macb {
unsigned int speed;
unsigned int duplex;
+ u32 caps;
+
phy_interface_t phy_interface;
/* AT91RM9200 transmit */

drivers/net/ethernet/emulex/benet/be_cmds.c

View file
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
index fd7b547..a236ecd 100644
--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
@@ -2976,22 +2976,17 @@ static struct be_nic_resource_desc *be_get_nic_desc(u8 *buf, u32 desc_count,
for (i = 0; i < desc_count; i++) {
desc->desc_len = desc->desc_len ? : RESOURCE_DESC_SIZE;
if (((void *)desc + desc->desc_len) >
- (void *)(buf + max_buf_size)) {
- desc = NULL;
- break;
- }
+ (void *)(buf + max_buf_size))
+ return NULL;
if (desc->desc_type == NIC_RESOURCE_DESC_TYPE_V0 ||
desc->desc_type == NIC_RESOURCE_DESC_TYPE_V1)
- break;
+ return desc;
desc = (void *)desc + desc->desc_len;
}
- if (!desc || i == MAX_RESOURCE_DESC)
- return NULL;
-
- return desc;
+ return NULL;
}
/* Uses Mbox */

drivers/net/ethernet/emulex/benet/be_main.c

View file
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index a444110..ca2967b 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -780,26 +780,18 @@ static struct sk_buff *be_insert_vlan_in_pkt(struct be_adapter *adapter,
if (unlikely(!skb))
return skb;
- if (vlan_tx_tag_present(skb)) {
+ if (vlan_tx_tag_present(skb))
vlan_tag = be_get_tx_vlan_tag(adapter, skb);
- skb = __vlan_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
- if (skb)
- skb->vlan_tci = 0;
- }
-
- if (qnq_async_evt_rcvd(adapter) && adapter->pvid) {
- if (!vlan_tag)
- vlan_tag = adapter->pvid;
- if (skip_hw_vlan)
- *skip_hw_vlan = true;
- }
+ else if (qnq_async_evt_rcvd(adapter) && adapter->pvid)
+ vlan_tag = adapter->pvid;
if (vlan_tag) {
skb = __vlan_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
if (unlikely(!skb))
return skb;
-
skb->vlan_tci = 0;
+ if (skip_hw_vlan)
+ *skip_hw_vlan = true;
}
/* Insert the outer VLAN, if any */

drivers/net/ethernet/freescale/fec_main.c

View file
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index ca9825c..85a0603 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/freescale/gianfar_ptp.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/icplus/ipg.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/marvell/mv643xx_eth.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/qlogic/qlcnic/qlcnic.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/realtek/8139cp.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/realtek/r8169.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/sfc/efx.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/sfc/net_driver.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/ethernet/sfc/rx.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/usb/qmi_wwan.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/usb/rtl8150.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/virtio_net.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/vxlan.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/ar9003_calib.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/ar9485_initvals.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/ath9k.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/debug.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/debug.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/init.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/main.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/xmit.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlegacy/common.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/mvm/fw-api.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/mvm/mac80211.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/mvm/mvm.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/mvm/ops.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/mvm/scan.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/mvm/sta.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/mvm/sta.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/mvm/tx.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/mac80211_hwsim.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/rtlwifi/rtl8188ee/trx.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/rtlwifi/rtl8192cu/sw.c

View file

This diff is incomplete. Download the complete patch.

include/linux/bcma/bcma.h

View file

This diff is incomplete. Download the complete patch.

include/linux/brcmphy.h

View file

This diff is incomplete. Download the complete patch.

include/linux/netdevice.h

View file

This diff is incomplete. Download the complete patch.

include/net/mac80211.h

View file

This diff is incomplete. Download the complete patch.

include/net/netfilter/nf_log.h

View file

This diff is incomplete. Download the complete patch.

include/net/netfilter/nfnetlink_log.h

View file

This diff is incomplete. Download the complete patch.

net/802/mrp.c

View file

This diff is incomplete. Download the complete patch.

net/batman-adv/main.c

View file

This diff is incomplete. Download the complete patch.

net/batman-adv/originator.c

View file

This diff is incomplete. Download the complete patch.

net/batman-adv/originator.h

View file

This diff is incomplete. Download the complete patch.

net/batman-adv/soft-interface.c

View file

This diff is incomplete. Download the complete patch.

net/batman-adv/translation-table.c

View file

This diff is incomplete. Download the complete patch.

net/bridge/netfilter/ebt_log.c

View file

This diff is incomplete. Download the complete patch.

net/bridge/netfilter/ebt_ulog.c

View file

This diff is incomplete. Download the complete patch.

net/ipv4/ip_gre.c

View file

This diff is incomplete. Download the complete patch.

net/ipv4/netfilter/ipt_ULOG.c

View file

This diff is incomplete. Download the complete patch.

net/ipv4/tcp.c

View file

This diff is incomplete. Download the complete patch.

net/ipv4/tcp_input.c

View file

This diff is incomplete. Download the complete patch.

net/ipv4/tcp_output.c

View file

This diff is incomplete. Download the complete patch.

net/ipv6/ip6_output.c

View file

This diff is incomplete. Download the complete patch.

net/irda/irlap_frame.c

View file

This diff is incomplete. Download the complete patch.

net/mac80211/ieee80211_i.h

View file

This diff is incomplete. Download the complete patch.

net/mac80211/mlme.c

View file

This diff is incomplete. Download the complete patch.

net/mac80211/rate.c

View file

This diff is incomplete. Download the complete patch.

net/mac80211/rx.c

View file

This diff is incomplete. Download the complete patch.

net/mac80211/tkip.c

View file

This diff is incomplete. Download the complete patch.

net/mac80211/util.c

View file

This diff is incomplete. Download the complete patch.

net/netfilter/nf_log.c

View file

This diff is incomplete. Download the complete patch.

net/netfilter/nfnetlink_log.c

View file

This diff is incomplete. Download the complete patch.

net/netfilter/nfnetlink_queue_core.c

View file

This diff is incomplete. Download the complete patch.

net/netfilter/xt_LOG.c

View file

This diff is incomplete. Download the complete patch.

net/netfilter/xt_NFLOG.c

View file

This diff is incomplete. Download the complete patch.

net/netfilter/xt_TCPOPTSTRIP.c

View file

This diff is incomplete. Download the complete patch.

net/netlabel/netlabel_domainhash.c

View file

This diff is incomplete. Download the complete patch.

net/wireless/core.c

View file

This diff is incomplete. Download the complete patch.

net/wireless/nl80211.c

View file

This diff is incomplete. Download the complete patch.

net/wireless/sme.c

View file

This diff is incomplete. Download the complete patch.

net/wireless/trace.h

View file

This diff is incomplete. Download the complete patch.

net/xfrm/xfrm_output.c

View file

This diff is incomplete. Download the complete patch.

tools/perf/scripts/python/net_dropmonitor.py

View file

This diff is incomplete. Download the complete patch.