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

Commit cec4de30 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

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

David writes:
  "Networking fixes:
   1) Prefix length validation in xfrm layer, from Steffen Klassert.

   2) TX status reporting fix in mac80211, from Andrei Otcheretianski.

   3) Fix hangs due to TX_DROP in mac80211, from Bob Copeland.

   4) Fix DMA error regression in b43, from Larry Finger.

   5) Add input validation to xenvif_set_hash_mapping(), from Jan Beulich.

   6) SMMU unmapping fix in hns driver, from Yunsheng Lin.

   7) Bluetooh crash in unpairing on SMP, from Matias Karhumaa.

   8) WoL handling fixes in the phy layer, from Heiner Kallweit.

   9) Fix deadlock in bonding, from Mahesh Bandewar.

   10) Fill ttl inherit infor in vxlan driver, from Hangbin Liu.

   11) Fix TX timeouts during netpoll, from Michael Chan.

   12) RXRPC layer fixes from David Howells.

   13) Another batch of ndo_poll_controller() removals to deal with
       excessive resource consumption during load.  From Eric Dumazet.

   14) Fix a specific TIPC failure secnario, from LUU Duc Canh.

   15) Really disable clocks in r8169 during suspend so that low
       power states can actually be reached.

   16) Fix SYN backlog lockdep issue in tcp and dccp, from Eric Dumazet.

   17) Fix RCU locking in netpoll SKB send, which shows up in bonding,
       from Dave Jones.

   18) Fix TX stalls in r8169, from Heiner Kallweit.

   19) Fix locksup in nfp due to control message storms, from Jakub
       Kicinski.

   20) Various rmnet bug fixes from Subash Abhinov Kasiviswanathan and
       Sean Tranchetti.

   21) Fix use after free in ip_cmsg_recv_dstaddr(), from Eric Dumazet."

* gitolite.kernel.org:/pub/scm/linux/kernel/git/davem/net: (122 commits)
  ixgbe: check return value of napi_complete_done()
  sctp: fix fall-through annotation
  r8169: always autoneg on resume
  ipv4: fix use-after-free in ip_cmsg_recv_dstaddr()
  net: qualcomm: rmnet: Fix incorrect allocation flag in receive path
  net: qualcomm: rmnet: Fix incorrect allocation flag in transmit
  net: qualcomm: rmnet: Skip processing loopback packets
  net: systemport: Fix wake-up interrupt race during resume
  rtnl: limit IFLA_NUM_TX_QUEUES and IFLA_NUM_RX_QUEUES to 4096
  bonding: fix warning message
  inet: make sure to grab rcu_read_lock before using ireq->ireq_opt
  nfp: avoid soft lockups under control message storm
  declance: Fix continuation with the adapter identification message
  net: fec: fix rare tx timeout
  r8169: fix network stalls due to missing bit TXCFG_AUTO_FIFO
  tun: napi flags belong to tfile
  tun: initialize napi_mutex unconditionally
  tun: remove unused parameters
  bond: take rcu lock in netpoll_send_skb_on_dev
  rtnetlink: Fail dump if target netnsid is invalid
  ...
parents 95773dc0 4233cfe6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -425,7 +425,7 @@ tcp_mtu_probing - INTEGER
	  1 - Disabled by default, enabled when an ICMP black hole detected
	  2 - Always enabled, use initial MSS of tcp_base_mss.

tcp_probe_interval - INTEGER
tcp_probe_interval - UNSIGNED INTEGER
	Controls how often to start TCP Packetization-Layer Path MTU
	Discovery reprobe. The default is reprobing every 10 minutes as
	per RFC4821.
+4 −4
Original line number Diff line number Diff line
@@ -2956,7 +2956,6 @@ F: include/linux/bcm963xx_tag.h

BROADCOM BNX2 GIGABIT ETHERNET DRIVER
M:	Rasesh Mody <rasesh.mody@cavium.com>
M:	Harish Patil <harish.patil@cavium.com>
M:	Dept-GELinuxNICDev@cavium.com
L:	netdev@vger.kernel.org
S:	Supported
@@ -2977,6 +2976,7 @@ F: drivers/scsi/bnx2i/

BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
M:	Ariel Elior <ariel.elior@cavium.com>
M:	Sudarsana Kalluru <sudarsana.kalluru@cavium.com>
M:	everest-linux-l2@cavium.com
L:	netdev@vger.kernel.org
S:	Supported
@@ -5470,7 +5470,8 @@ S: Odd Fixes
F:	drivers/net/ethernet/agere/

ETHERNET BRIDGE
M:	Stephen Hemminger <stephen@networkplumber.org>
M:	Roopa Prabhu <roopa@cumulusnetworks.com>
M:	Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
L:	bridge@lists.linux-foundation.org (moderated for non-subscribers)
L:	netdev@vger.kernel.org
W:	http://www.linuxfoundation.org/en/Net:Bridge
@@ -11979,7 +11980,7 @@ F: Documentation/scsi/LICENSE.qla4xxx
F:	drivers/scsi/qla4xxx/

QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
M:	Harish Patil <harish.patil@cavium.com>
M:	Shahed Shaikh <Shahed.Shaikh@cavium.com>
M:	Manish Chopra <manish.chopra@cavium.com>
M:	Dept-GELinuxNICDev@cavium.com
L:	netdev@vger.kernel.org
@@ -11987,7 +11988,6 @@ S: Supported
F:	drivers/net/ethernet/qlogic/qlcnic/

QLOGIC QLGE 10Gb ETHERNET DRIVER
M:	Harish Patil <harish.patil@cavium.com>
M:	Manish Chopra <manish.chopra@cavium.com>
M:	Dept-GELinuxNICDev@cavium.com
L:	netdev@vger.kernel.org
+37 −28
Original line number Diff line number Diff line
@@ -210,6 +210,7 @@ static void bond_get_stats(struct net_device *bond_dev,
static void bond_slave_arr_handler(struct work_struct *work);
static bool bond_time_in_interval(struct bonding *bond, unsigned long last_act,
				  int mod);
static void bond_netdev_notify_work(struct work_struct *work);

/*---------------------------- General routines -----------------------------*/

@@ -1170,9 +1171,27 @@ static rx_handler_result_t bond_handle_frame(struct sk_buff **pskb)
		}
	}

	/* don't change skb->dev for link-local packets */
	if (is_link_local_ether_addr(eth_hdr(skb)->h_dest))
	/* Link-local multicast packets should be passed to the
	 * stack on the link they arrive as well as pass them to the
	 * bond-master device. These packets are mostly usable when
	 * stack receives it with the link on which they arrive
	 * (e.g. LLDP) they also must be available on master. Some of
	 * the use cases include (but are not limited to): LLDP agents
	 * that must be able to operate both on enslaved interfaces as
	 * well as on bonds themselves; linux bridges that must be able
	 * to process/pass BPDUs from attached bonds when any kind of
	 * STP version is enabled on the network.
	 */
	if (is_link_local_ether_addr(eth_hdr(skb)->h_dest)) {
		struct sk_buff *nskb = skb_clone(skb, GFP_ATOMIC);

		if (nskb) {
			nskb->dev = bond->dev;
			nskb->queue_mapping = 0;
			netif_rx(nskb);
		}
		return RX_HANDLER_PASS;
	}
	if (bond_should_deliver_exact_match(skb, slave, bond))
		return RX_HANDLER_EXACT;

@@ -1269,6 +1288,8 @@ static struct slave *bond_alloc_slave(struct bonding *bond)
			return NULL;
		}
	}
	INIT_DELAYED_WORK(&slave->notify_work, bond_netdev_notify_work);

	return slave;
}

@@ -1276,6 +1297,7 @@ static void bond_free_slave(struct slave *slave)
{
	struct bonding *bond = bond_get_bond_by_slave(slave);

	cancel_delayed_work_sync(&slave->notify_work);
	if (BOND_MODE(bond) == BOND_MODE_8023AD)
		kfree(SLAVE_AD_INFO(slave));

@@ -1297,39 +1319,26 @@ static void bond_fill_ifslave(struct slave *slave, struct ifslave *info)
	info->link_failure_count = slave->link_failure_count;
}

static void bond_netdev_notify(struct net_device *dev,
			       struct netdev_bonding_info *info)
{
	rtnl_lock();
	netdev_bonding_info_change(dev, info);
	rtnl_unlock();
}

static void bond_netdev_notify_work(struct work_struct *_work)
{
	struct netdev_notify_work *w =
		container_of(_work, struct netdev_notify_work, work.work);
	struct slave *slave = container_of(_work, struct slave,
					   notify_work.work);

	if (rtnl_trylock()) {
		struct netdev_bonding_info binfo;

	bond_netdev_notify(w->dev, &w->bonding_info);
	dev_put(w->dev);
	kfree(w);
		bond_fill_ifslave(slave, &binfo.slave);
		bond_fill_ifbond(slave->bond, &binfo.master);
		netdev_bonding_info_change(slave->dev, &binfo);
		rtnl_unlock();
	} else {
		queue_delayed_work(slave->bond->wq, &slave->notify_work, 1);
	}
}

void bond_queue_slave_event(struct slave *slave)
{
	struct bonding *bond = slave->bond;
	struct netdev_notify_work *nnw = kzalloc(sizeof(*nnw), GFP_ATOMIC);

	if (!nnw)
		return;

	dev_hold(slave->dev);
	nnw->dev = slave->dev;
	bond_fill_ifslave(slave, &nnw->bonding_info.slave);
	bond_fill_ifbond(bond, &nnw->bonding_info.master);
	INIT_DELAYED_WORK(&nnw->work, bond_netdev_notify_work);

	queue_delayed_work(slave->bond->wq, &nnw->work, 0);
	queue_delayed_work(slave->bond->wq, &slave->notify_work, 0);
}

void bond_lower_state_changed(struct slave *slave)
+0 −22
Original line number Diff line number Diff line
@@ -2185,25 +2185,6 @@ static netdev_tx_t ena_start_xmit(struct sk_buff *skb, struct net_device *dev)
	return NETDEV_TX_OK;
}

#ifdef CONFIG_NET_POLL_CONTROLLER
static void ena_netpoll(struct net_device *netdev)
{
	struct ena_adapter *adapter = netdev_priv(netdev);
	int i;

	/* Dont schedule NAPI if the driver is in the middle of reset
	 * or netdev is down.
	 */

	if (!test_bit(ENA_FLAG_DEV_UP, &adapter->flags) ||
	    test_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags))
		return;

	for (i = 0; i < adapter->num_queues; i++)
		napi_schedule(&adapter->ena_napi[i].napi);
}
#endif /* CONFIG_NET_POLL_CONTROLLER */

static u16 ena_select_queue(struct net_device *dev, struct sk_buff *skb,
			    struct net_device *sb_dev,
			    select_queue_fallback_t fallback)
@@ -2369,9 +2350,6 @@ static const struct net_device_ops ena_netdev_ops = {
	.ndo_change_mtu		= ena_change_mtu,
	.ndo_set_mac_address	= NULL,
	.ndo_validate_addr	= eth_validate_addr,
#ifdef CONFIG_NET_POLL_CONTROLLER
	.ndo_poll_controller	= ena_netpoll,
#endif /* CONFIG_NET_POLL_CONTROLLER */
};

static int ena_device_validate_params(struct ena_adapter *adapter,
+6 −4
Original line number Diff line number Diff line
@@ -1031,6 +1031,7 @@ static int dec_lance_probe(struct device *bdev, const int type)
	int i, ret;
	unsigned long esar_base;
	unsigned char *esar;
	const char *desc;

	if (dec_lance_debug && version_printed++ == 0)
		printk(version);
@@ -1216,19 +1217,20 @@ static int dec_lance_probe(struct device *bdev, const int type)
	 */
	switch (type) {
	case ASIC_LANCE:
		printk("%s: IOASIC onboard LANCE", name);
		desc = "IOASIC onboard LANCE";
		break;
	case PMAD_LANCE:
		printk("%s: PMAD-AA", name);
		desc = "PMAD-AA";
		break;
	case PMAX_LANCE:
		printk("%s: PMAX onboard LANCE", name);
		desc = "PMAX onboard LANCE";
		break;
	}
	for (i = 0; i < 6; i++)
		dev->dev_addr[i] = esar[i * 4];

	printk(", addr = %pM, irq = %d\n", dev->dev_addr, dev->irq);
	printk("%s: %s, addr = %pM, irq = %d\n",
	       name, desc, dev->dev_addr, dev->irq);

	dev->netdev_ops = &lance_netdev_ops;
	dev->watchdog_timeo = 5*HZ;
Loading