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

Commit ff3421de authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull networking fixes from David Miller:

 1) sadb_msg prepared for IPSEC userspace forgets to initialize the
    satype field, fix from Nicolas Dichtel.

 2) Fix mac80211 synchronization during station removal, from Johannes
    Berg.

 3) Fix IPSEC sequence number notifications when they wrap, from Steffen
    Klassert.

 4) Fix cfg80211 wdev tracing crashes when add_virtual_intf() returns an
    error pointer, from Johannes Berg.

 5) In mac80211, don't call into the channel context code with the
    interface list mutex held.  From Johannes Berg.

 6) In mac80211, if we don't actually associate, do not restart the STA
    timer, otherwise we can crash.  From Ben Greear.

 7) Missing dma_mapping_error() check in e1000, ixgb, and e1000e.  From
    Christoph Paasch.

 8) Fix sja1000 driver defines to not conflict with SH port, from Marc
    Kleine-Budde.

 9) Don't call il4965_rs_use_green with a NULL station, from Colin Ian
    King.

10) Suspend/Resume in the FEC driver fail because the buffer descriptors
    are not initialized at all the moments in which they should.  Fix
    from Frank Li.

11) cpsw and davinci_emac drivers both use the wrong interface to
    restart a stopped TX queue.  Use netif_wake_queue not
    netif_start_queue, the latter is for initialization/bringup not
    active management of the queue.  From Mugunthan V N.

12) Fix regression in rate calculations done by
    psched_ratecfg_precompute(), missing u64 type promotion.  From
    Sergey Popovich.

13) Fix length overflow in tg3 VPD parsing, from Kees Cook.

14) AOE driver fails to allocate enough headroom, resulting in crashes.
    Fix from Eric Dumazet.

15) RX overflow happens too quickly in sky2 driver because pause packet
    thresholds are not programmed correctly.  From Mirko Lindner.

16) Bonding driver manages arp_interval and miimon settings incorrectly,
    disabling one unintentionally disables both.  Fix from Nikolay
    Aleksandrov.

17) smsc75xx drivers don't program the RX mac properly for jumbo frames.
    Fix from Steve Glendinning.

18) Fix off-by-one in Codel packet scheduler.  From Vijay Subramanian.

19) Fix packet corruption in atl1c by disabling MSI support, from Hannes
    Frederic Sowa.

20) netdev_rx_handler_unregister() needs a synchronize_net() to fix
    crashes in bonding driver unload stress tests.  From Eric Dumazet.

21) rxlen field of ks8851 RX packet descriptors not interpreted
    correctly (it is 12 bits not 16 bits, so needs to be masked after
    shifting the 32-bit value down 16 bits).  Fix from Max Nekludov.

22) Fix missed RX/TX enable in sh_eth driver due to mishandling of link
    change indications.  From Sergei Shtylyov.

23) Fix crashes during spurious ECI interrupts in sh_eth driver, also
    from Sergei Shtylyov.

24) dm9000 driver initialization is done wrong for revision B devices
    with DSP PHY, from Joseph CHANG.

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (53 commits)
  DM9000B: driver initialization upgrade
  sh_eth: make 'link' field of 'struct sh_eth_private' *int*
  sh_eth: workaround for spurious ECI interrupt
  sh_eth: fix handling of no LINK signal
  ks8851: Fix interpretation of rxlen field.
  net: add a synchronize_net() in netdev_rx_handler_unregister()
  MAINTAINERS: Update netxen_nic maintainers list
  atl1e: drop pci-msi support because of packet corruption
  net: fq_codel: Fix off-by-one error
  net: calxedaxgmac: Wake-on-LAN fixes
  net: calxedaxgmac: fix rx ring handling when OOM
  net: core: Remove redundant call to 'nf_reset' in 'dev_forward_skb'
  smsc75xx: fix jumbo frame support
  net: fix the use of this_cpu_ptr
  bonding: fix disabling of arp_interval and miimon
  ipv6: don't accept node local multicast traffic from the wire
  sky2: Threshold for Pause Packet is set wrong
  sky2: Receive Overflows not counted
  aoe: reserve enough headroom on skbs
  line up comment for ndo_bridge_getlink
  ...
parents 07961ac7 6741f40d
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -5065,9 +5065,8 @@ S: Maintained
F:	drivers/net/ethernet/marvell/sk*
F:	drivers/net/ethernet/marvell/sk*


MARVELL LIBERTAS WIRELESS DRIVER
MARVELL LIBERTAS WIRELESS DRIVER
M:	Dan Williams <dcbw@redhat.com>
L:	libertas-dev@lists.infradead.org
L:	libertas-dev@lists.infradead.org
S:	Maintained
S:	Orphan
F:	drivers/net/wireless/libertas/
F:	drivers/net/wireless/libertas/


MARVELL MV643XX ETHERNET DRIVER
MARVELL MV643XX ETHERNET DRIVER
@@ -5569,6 +5568,7 @@ F: include/uapi/linux/if_*
F:	include/uapi/linux/netdevice.h
F:	include/uapi/linux/netdevice.h


NETXEN (1/10) GbE SUPPORT
NETXEN (1/10) GbE SUPPORT
M:	Manish Chopra <manish.chopra@qlogic.com>
M:	Sony Chacko <sony.chacko@qlogic.com>
M:	Sony Chacko <sony.chacko@qlogic.com>
M:	Rajesh Borundia <rajesh.borundia@qlogic.com>
M:	Rajesh Borundia <rajesh.borundia@qlogic.com>
L:	netdev@vger.kernel.org
L:	netdev@vger.kernel.org
+2 −1
Original line number Original line Diff line number Diff line
@@ -51,8 +51,9 @@ new_skb(ulong len)
{
{
	struct sk_buff *skb;
	struct sk_buff *skb;


	skb = alloc_skb(len, GFP_ATOMIC);
	skb = alloc_skb(len + MAX_HEADER, GFP_ATOMIC);
	if (skb) {
	if (skb) {
		skb_reserve(skb, MAX_HEADER);
		skb_reset_mac_header(skb);
		skb_reset_mac_header(skb);
		skb_reset_network_header(skb);
		skb_reset_network_header(skb);
		skb->protocol = __constant_htons(ETH_P_AOE);
		skb->protocol = __constant_htons(ETH_P_AOE);
+48 −44
Original line number Original line Diff line number Diff line
@@ -527,7 +527,7 @@ static ssize_t bonding_store_arp_interval(struct device *d,
		goto out;
		goto out;
	}
	}
	if (new_value < 0) {
	if (new_value < 0) {
		pr_err("%s: Invalid arp_interval value %d not in range 1-%d; rejected.\n",
		pr_err("%s: Invalid arp_interval value %d not in range 0-%d; rejected.\n",
		       bond->dev->name, new_value, INT_MAX);
		       bond->dev->name, new_value, INT_MAX);
		ret = -EINVAL;
		ret = -EINVAL;
		goto out;
		goto out;
@@ -542,12 +542,13 @@ static ssize_t bonding_store_arp_interval(struct device *d,
	pr_info("%s: Setting ARP monitoring interval to %d.\n",
	pr_info("%s: Setting ARP monitoring interval to %d.\n",
		bond->dev->name, new_value);
		bond->dev->name, new_value);
	bond->params.arp_interval = new_value;
	bond->params.arp_interval = new_value;
	if (new_value) {
		if (bond->params.miimon) {
		if (bond->params.miimon) {
			pr_info("%s: ARP monitoring cannot be used with MII monitoring. %s Disabling MII monitoring.\n",
			pr_info("%s: ARP monitoring cannot be used with MII monitoring. %s Disabling MII monitoring.\n",
				bond->dev->name, bond->dev->name);
				bond->dev->name, bond->dev->name);
			bond->params.miimon = 0;
			bond->params.miimon = 0;
		}
		}
	if (!bond->params.arp_targets[0]) {
		if (!bond->params.arp_targets[0])
			pr_info("%s: ARP monitoring has been set up, but no ARP targets have been specified.\n",
			pr_info("%s: ARP monitoring has been set up, but no ARP targets have been specified.\n",
				bond->dev->name);
				bond->dev->name);
	}
	}
@@ -557,10 +558,13 @@ static ssize_t bonding_store_arp_interval(struct device *d,
		 * timer will get fired off when the open function
		 * timer will get fired off when the open function
		 * is called.
		 * is called.
		 */
		 */
		if (!new_value) {
			cancel_delayed_work_sync(&bond->arp_work);
		} else {
			cancel_delayed_work_sync(&bond->mii_work);
			cancel_delayed_work_sync(&bond->mii_work);
			queue_delayed_work(bond->wq, &bond->arp_work, 0);
			queue_delayed_work(bond->wq, &bond->arp_work, 0);
		}
		}

	}
out:
out:
	rtnl_unlock();
	rtnl_unlock();
	return ret;
	return ret;
@@ -702,7 +706,7 @@ static ssize_t bonding_store_downdelay(struct device *d,
	}
	}
	if (new_value < 0) {
	if (new_value < 0) {
		pr_err("%s: Invalid down delay value %d not in range %d-%d; rejected.\n",
		pr_err("%s: Invalid down delay value %d not in range %d-%d; rejected.\n",
		       bond->dev->name, new_value, 1, INT_MAX);
		       bond->dev->name, new_value, 0, INT_MAX);
		ret = -EINVAL;
		ret = -EINVAL;
		goto out;
		goto out;
	} else {
	} else {
@@ -757,8 +761,8 @@ static ssize_t bonding_store_updelay(struct device *d,
		goto out;
		goto out;
	}
	}
	if (new_value < 0) {
	if (new_value < 0) {
		pr_err("%s: Invalid down delay value %d not in range %d-%d; rejected.\n",
		pr_err("%s: Invalid up delay value %d not in range %d-%d; rejected.\n",
		       bond->dev->name, new_value, 1, INT_MAX);
		       bond->dev->name, new_value, 0, INT_MAX);
		ret = -EINVAL;
		ret = -EINVAL;
		goto out;
		goto out;
	} else {
	} else {
@@ -968,10 +972,10 @@ static ssize_t bonding_store_miimon(struct device *d,
	}
	}
	if (new_value < 0) {
	if (new_value < 0) {
		pr_err("%s: Invalid miimon value %d not in range %d-%d; rejected.\n",
		pr_err("%s: Invalid miimon value %d not in range %d-%d; rejected.\n",
		       bond->dev->name, new_value, 1, INT_MAX);
		       bond->dev->name, new_value, 0, INT_MAX);
		ret = -EINVAL;
		ret = -EINVAL;
		goto out;
		goto out;
	} else {
	}
	pr_info("%s: Setting MII monitoring interval to %d.\n",
	pr_info("%s: Setting MII monitoring interval to %d.\n",
		bond->dev->name, new_value);
		bond->dev->name, new_value);
	bond->params.miimon = new_value;
	bond->params.miimon = new_value;
@@ -983,22 +987,22 @@ static ssize_t bonding_store_miimon(struct device *d,
		pr_info("%s: Note: Updating downdelay (to %d) since it is a multiple of the miimon value.\n",
		pr_info("%s: Note: Updating downdelay (to %d) since it is a multiple of the miimon value.\n",
			bond->dev->name,
			bond->dev->name,
			bond->params.downdelay * bond->params.miimon);
			bond->params.downdelay * bond->params.miimon);
		if (bond->params.arp_interval) {
	if (new_value && bond->params.arp_interval) {
		pr_info("%s: MII monitoring cannot be used with ARP monitoring. Disabling ARP monitoring...\n",
		pr_info("%s: MII monitoring cannot be used with ARP monitoring. Disabling ARP monitoring...\n",
			bond->dev->name);
			bond->dev->name);
		bond->params.arp_interval = 0;
		bond->params.arp_interval = 0;
			if (bond->params.arp_validate) {
		if (bond->params.arp_validate)
				bond->params.arp_validate =
			bond->params.arp_validate = BOND_ARP_VALIDATE_NONE;
					BOND_ARP_VALIDATE_NONE;
			}
	}
	}

	if (bond->dev->flags & IFF_UP) {
	if (bond->dev->flags & IFF_UP) {
		/* If the interface is up, we may need to fire off
		/* If the interface is up, we may need to fire off
		 * the MII timer. If the interface is down, the
		 * the MII timer. If the interface is down, the
		 * timer will get fired off when the open function
		 * timer will get fired off when the open function
		 * is called.
		 * is called.
		 */
		 */
		if (!new_value) {
			cancel_delayed_work_sync(&bond->mii_work);
		} else {
			cancel_delayed_work_sync(&bond->arp_work);
			cancel_delayed_work_sync(&bond->arp_work);
			queue_delayed_work(bond->wq, &bond->mii_work, 0);
			queue_delayed_work(bond->wq, &bond->mii_work, 0);
		}
		}
+1 −0
Original line number Original line Diff line number Diff line
@@ -46,6 +46,7 @@ config CAN_EMS_PCI
config CAN_PEAK_PCMCIA
config CAN_PEAK_PCMCIA
	tristate "PEAK PCAN-PC Card"
	tristate "PEAK PCAN-PC Card"
	depends on PCMCIA
	depends on PCMCIA
	depends on HAS_IOPORT
	---help---
	---help---
	  This driver is for the PCAN-PC Card PCMCIA adapter (1 or 2 channels)
	  This driver is for the PCAN-PC Card PCMCIA adapter (1 or 2 channels)
	  from PEAK-System (http://www.peak-system.com). To compile this
	  from PEAK-System (http://www.peak-system.com). To compile this
+2 −2
Original line number Original line Diff line number Diff line
@@ -348,7 +348,7 @@ static inline int plx_pci_check_sja1000(const struct sja1000_priv *priv)
	 */
	 */
	if ((priv->read_reg(priv, REG_CR) & REG_CR_BASICCAN_INITIAL_MASK) ==
	if ((priv->read_reg(priv, REG_CR) & REG_CR_BASICCAN_INITIAL_MASK) ==
	    REG_CR_BASICCAN_INITIAL &&
	    REG_CR_BASICCAN_INITIAL &&
	    (priv->read_reg(priv, REG_SR) == REG_SR_BASICCAN_INITIAL) &&
	    (priv->read_reg(priv, SJA1000_REG_SR) == REG_SR_BASICCAN_INITIAL) &&
	    (priv->read_reg(priv, REG_IR) == REG_IR_BASICCAN_INITIAL))
	    (priv->read_reg(priv, REG_IR) == REG_IR_BASICCAN_INITIAL))
		flag = 1;
		flag = 1;


@@ -360,7 +360,7 @@ static inline int plx_pci_check_sja1000(const struct sja1000_priv *priv)
	 * See states on p. 23 of the Datasheet.
	 * See states on p. 23 of the Datasheet.
	 */
	 */
	if (priv->read_reg(priv, REG_MOD) == REG_MOD_PELICAN_INITIAL &&
	if (priv->read_reg(priv, REG_MOD) == REG_MOD_PELICAN_INITIAL &&
	    priv->read_reg(priv, REG_SR) == REG_SR_PELICAN_INITIAL &&
	    priv->read_reg(priv, SJA1000_REG_SR) == REG_SR_PELICAN_INITIAL &&
	    priv->read_reg(priv, REG_IR) == REG_IR_PELICAN_INITIAL)
	    priv->read_reg(priv, REG_IR) == REG_IR_PELICAN_INITIAL)
		return flag;
		return flag;


Loading