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

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

 1) Fix two regressions in ipv6 route lookups, particularly wrt output
    interface specifications in the lookup key.  From David Ahern.

 2) Fix checks in ipv6 IPSEC tunnel pre-encap fragmentation, from
    Herbert Xu.

 3) Fix mis-advertisement of 1000BASE-T on bcm63xx_enet, from Simon
    Arlott.

 4) Some smsc phys misbehave with energy detect mode enabled, so add a
    DT property and disable it on such switches.  From Heiko Schocher.

 5) Fix TSO corruption on TX in mv643xx_eth, from Philipp Kirchhofer.

 6) Fix regression added by removal of openvswitch vport stats, from
    James Morse.

 7) Vendor Kconfig options should be bool, not tristate, from Andreas
    Schwab.

 8) Use non-_BH() net stats bump in tcp_xmit_probe_skb(), otherwise we
    barf during TCP REPAIR operations.

 9) Fix various bugs in openvswitch conntrack support, from Joe
    Stringer.

10) Fix NETLINK_LIST_MEMBERSHIPS locking, from David Herrmann.

11) Don't have VSOCK do sock_put() in interrupt context, from Jorgen
    Hansen.

12) Fix skb_realloc_headroom() failures properly in ISDN, from Karsten
    Keil.

13) Add some device IDs to qmi_wwan, from Bjorn Mork.

14) Fix ovs egress tunnel information when using lwtunnel devices, from
    Pravin B Shelar.

15) Add missing NETIF_F_FRAGLIST to macvtab feature list, from Jason
    Wang.

16) Fix incorrect handling of throw routes when the result of the throw
    cannot find a match, from Xin Long.

17) Protect ipv6 MTU calculations from wrap-around, from Hannes Frederic
    Sowa.

18) Fix failed autonegotiation on KSZ9031 micrel PHYs, from Nathan
    Sullivan.

19) Add missing memory barries in descriptor accesses or xgbe driver,
    from Thomas Lendacky.

20) Fix release conditon test in pppoe_release(), from Guillaume Nault.

21) Fix gianfar bugs wrt filter configuration, from Claudiu Manoil.

22) Fix violations of RX buffer alignment in sh_eth driver, from Sergei
    Shtylyov.

23) Fixing missing of_node_put() calls in various places around the
    networking, from Julia Lawall.

24) Fix incorrect leaf now walking in ipv4 routing tree, from Alexander
    Duyck.

25) RDS doesn't check pskb_pull()/pskb_trim() return values, from
    Sowmini Varadhan.

26) Fix VLAN configuration in mlx4 driver, from Jack Morgenstein.

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (79 commits)
  ipv6: protect mtu calculation of wrap-around and infinite loop by rounding issues
  Revert "Merge branch 'ipv6-overflow-arith'"
  net/mlx4: Copy/set only sizeof struct mlx4_eqe bytes
  net/mlx4_en: Explicitly set no vlan tags in WQE ctrl segment when no vlan is present
  vhost: fix performance on LE hosts
  bpf: sample: define aarch64 specific registers
  amd-xgbe: Fix race between access of desc and desc index
  RDS-TCP: Recover correctly from pskb_pull()/pksb_trim() failure in rds_tcp_data_recv
  forcedeth: fix unilateral interrupt disabling in netpoll path
  openvswitch: Fix skb leak using IPv6 defrag
  ipv6: Export nf_ct_frag6_consume_orig()
  openvswitch: Fix double-free on ip_defrag() errors
  fib_trie: leaf_walk_rcu should not compute key if key is less than pn->key
  net: mv643xx_eth: add missing of_node_put
  ath6kl: add missing of_node_put
  net: phy: mdio: add missing of_node_put
  netdev/phy: add missing of_node_put
  net: netcp: add missing of_node_put
  net: thunderx: add missing of_node_put
  ipv6: gre: support SIT encapsulation
  ...
parents 38dab9ac 89bc7848
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -39,6 +39,7 @@ Required properties:
Optional properties:
Optional properties:
- dual_emac_res_vlan	: Specifies VID to be used to segregate the ports
- dual_emac_res_vlan	: Specifies VID to be used to segregate the ports
- mac-address		: See ethernet.txt file in the same directory
- mac-address		: See ethernet.txt file in the same directory
- phy-handle		: See ethernet.txt file in the same directory


Note: "ti,hwmods" field is used to fetch the base address and irq
Note: "ti,hwmods" field is used to fetch the base address and irq
resources from TI, omap hwmod data base during device registration.
resources from TI, omap hwmod data base during device registration.
+24 −0
Original line number Original line Diff line number Diff line
SMSC LAN87xx Ethernet PHY

Some boards require special tuning values. Configure them
through an Ethernet OF device node.

Optional properties:

- smsc,disable-energy-detect:
  If set, do not enable energy detect mode for the SMSC phy.
  default: enable energy detect mode

Examples:
smsc phy with disabled energy detect mode on an am335x based board.
&davinci_mdio {
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&davinci_mdio_default>;
	pinctrl-1 = <&davinci_mdio_sleep>;
	status = "okay";

	ethernetphy0: ethernet-phy@0 {
		reg = <0>;
		smsc,disable-energy-detect;
	};
};
+8 −0
Original line number Original line Diff line number Diff line
@@ -4428,6 +4428,14 @@ L: linuxppc-dev@lists.ozlabs.org
S:	Maintained
S:	Maintained
F:	drivers/net/ethernet/freescale/ucc_geth*
F:	drivers/net/ethernet/freescale/ucc_geth*


FREESCALE eTSEC ETHERNET DRIVER (GIANFAR)
M:	Claudiu Manoil <claudiu.manoil@freescale.com>
L:	netdev@vger.kernel.org
S:	Maintained
F:	drivers/net/ethernet/freescale/gianfar*
X:	drivers/net/ethernet/freescale/gianfar_ptp.c
F:	Documentation/devicetree/bindings/net/fsl-tsec-phy.txt

FREESCALE QUICC ENGINE UCC UART DRIVER
FREESCALE QUICC ENGINE UCC UART DRIVER
M:	Timur Tabi <timur@tabi.org>
M:	Timur Tabi <timur@tabi.org>
L:	linuxppc-dev@lists.ozlabs.org
L:	linuxppc-dev@lists.ozlabs.org
+8 −12
Original line number Original line Diff line number Diff line
@@ -1247,7 +1247,7 @@ static void
l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
{
{
	struct PStack *st = fi->userdata;
	struct PStack *st = fi->userdata;
	struct sk_buff *skb;
	struct sk_buff *skb, *nskb;
	struct Layer2 *l2 = &st->l2;
	struct Layer2 *l2 = &st->l2;
	u_char header[MAX_HEADER_LEN];
	u_char header[MAX_HEADER_LEN];
	int i, hdr_space_needed;
	int i, hdr_space_needed;
@@ -1262,15 +1262,11 @@ l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
		return;
		return;


	hdr_space_needed = l2headersize(l2, 0);
	hdr_space_needed = l2headersize(l2, 0);
	if (hdr_space_needed > skb_headroom(skb)) {
	nskb = skb_realloc_headroom(skb, hdr_space_needed);
		struct sk_buff *orig_skb = skb;
	if (!nskb) {

		skb_queue_head(&l2->i_queue, skb);
		skb = skb_realloc_headroom(skb, hdr_space_needed);
		if (!skb) {
			dev_kfree_skb(orig_skb);
		return;
		return;
	}
	}
	}
	spin_lock_irqsave(&l2->lock, flags);
	spin_lock_irqsave(&l2->lock, flags);
	if (test_bit(FLG_MOD128, &l2->flag))
	if (test_bit(FLG_MOD128, &l2->flag))
		p1 = (l2->vs - l2->va) % 128;
		p1 = (l2->vs - l2->va) % 128;
@@ -1282,7 +1278,7 @@ l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
		       p1);
		       p1);
		dev_kfree_skb(l2->windowar[p1]);
		dev_kfree_skb(l2->windowar[p1]);
	}
	}
	l2->windowar[p1] = skb_clone(skb, GFP_ATOMIC);
	l2->windowar[p1] = skb;


	i = sethdraddr(&st->l2, header, CMD);
	i = sethdraddr(&st->l2, header, CMD);


@@ -1295,8 +1291,8 @@ l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
		l2->vs = (l2->vs + 1) % 8;
		l2->vs = (l2->vs + 1) % 8;
	}
	}
	spin_unlock_irqrestore(&l2->lock, flags);
	spin_unlock_irqrestore(&l2->lock, flags);
	memcpy(skb_push(skb, i), header, i);
	memcpy(skb_push(nskb, i), header, i);
	st->l2.l2l1(st, PH_PULL | INDICATION, skb);
	st->l2.l2l1(st, PH_PULL | INDICATION, nskb);
	test_and_clear_bit(FLG_ACK_PEND, &st->l2.flag);
	test_and_clear_bit(FLG_ACK_PEND, &st->l2.flag);
	if (!test_and_set_bit(FLG_T200_RUN, &st->l2.flag)) {
	if (!test_and_set_bit(FLG_T200_RUN, &st->l2.flag)) {
		FsmDelTimer(&st->l2.t203, 13);
		FsmDelTimer(&st->l2.t203, 13);
+20 −34
Original line number Original line Diff line number Diff line
@@ -1476,7 +1476,7 @@ static void
l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
{
{
	struct layer2	*l2 = fi->userdata;
	struct layer2	*l2 = fi->userdata;
	struct sk_buff	*skb, *nskb, *oskb;
	struct sk_buff	*skb, *nskb;
	u_char		header[MAX_L2HEADER_LEN];
	u_char		header[MAX_L2HEADER_LEN];
	u_int		i, p1;
	u_int		i, p1;


@@ -1486,11 +1486,26 @@ l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
	skb = skb_dequeue(&l2->i_queue);
	skb = skb_dequeue(&l2->i_queue);
	if (!skb)
	if (!skb)
		return;
		return;

	i = sethdraddr(l2, header, CMD);
	if (test_bit(FLG_MOD128, &l2->flag))
	if (test_bit(FLG_MOD128, &l2->flag)) {
		header[i++] = l2->vs << 1;
		header[i++] = l2->vr << 1;
	} else
		header[i++] = (l2->vr << 5) | (l2->vs << 1);
	nskb = skb_realloc_headroom(skb, i);
	if (!nskb) {
		printk(KERN_WARNING "%s: no headroom(%d) copy for IFrame\n",
		       mISDNDevName4ch(&l2->ch), i);
		skb_queue_head(&l2->i_queue, skb);
		return;
	}
	if (test_bit(FLG_MOD128, &l2->flag)) {
		p1 = (l2->vs - l2->va) % 128;
		p1 = (l2->vs - l2->va) % 128;
	else
		l2->vs = (l2->vs + 1) % 128;
	} else {
		p1 = (l2->vs - l2->va) % 8;
		p1 = (l2->vs - l2->va) % 8;
		l2->vs = (l2->vs + 1) % 8;
	}
	p1 = (p1 + l2->sow) % l2->window;
	p1 = (p1 + l2->sow) % l2->window;
	if (l2->windowar[p1]) {
	if (l2->windowar[p1]) {
		printk(KERN_WARNING "%s: l2 try overwrite ack queue entry %d\n",
		printk(KERN_WARNING "%s: l2 try overwrite ack queue entry %d\n",
@@ -1498,36 +1513,7 @@ l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
		dev_kfree_skb(l2->windowar[p1]);
		dev_kfree_skb(l2->windowar[p1]);
	}
	}
	l2->windowar[p1] = skb;
	l2->windowar[p1] = skb;
	i = sethdraddr(l2, header, CMD);
	if (test_bit(FLG_MOD128, &l2->flag)) {
		header[i++] = l2->vs << 1;
		header[i++] = l2->vr << 1;
		l2->vs = (l2->vs + 1) % 128;
	} else {
		header[i++] = (l2->vr << 5) | (l2->vs << 1);
		l2->vs = (l2->vs + 1) % 8;
	}

	nskb = skb_clone(skb, GFP_ATOMIC);
	p1 = skb_headroom(nskb);
	if (p1 >= i)
	memcpy(skb_push(nskb, i), header, i);
	memcpy(skb_push(nskb, i), header, i);
	else {
		printk(KERN_WARNING
		       "%s: L2 pull_iqueue skb header(%d/%d) too short\n",
		       mISDNDevName4ch(&l2->ch), i, p1);
		oskb = nskb;
		nskb = mI_alloc_skb(oskb->len + i, GFP_ATOMIC);
		if (!nskb) {
			dev_kfree_skb(oskb);
			printk(KERN_WARNING "%s: no skb mem in %s\n",
			       mISDNDevName4ch(&l2->ch), __func__);
			return;
		}
		memcpy(skb_put(nskb, i), header, i);
		memcpy(skb_put(nskb, oskb->len), oskb->data, oskb->len);
		dev_kfree_skb(oskb);
	}
	l2down(l2, PH_DATA_REQ, l2_newid(l2), nskb);
	l2down(l2, PH_DATA_REQ, l2_newid(l2), nskb);
	test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
	test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
	if (!test_and_set_bit(FLG_T200_RUN, &l2->flag)) {
	if (!test_and_set_bit(FLG_T200_RUN, &l2->flag)) {
Loading