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

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

 1) Various VTI tunnel (mark handling, PMTU) bug fixes from Alexander
    Duyck and Steffen Klassert.

 2) Revert ethtool PHY query change, it wasn't correct.  The PHY address
    selected by the driver running the PHY to MAC connection decides
    what PHY address GET ethtool operations return information from.

 3) Fix handling of sequence number bits for encryption IV generation in
    ESP driver, from Herbert Xu.

 4) UDP can return -EAGAIN when we hit a bad checksum on receive, even
    when there are other packets in the receive queue which is wrong.
    Just respect the error returned from the generic socket recv
    datagram helper.  From Eric Dumazet.

 5) Fix BNA driver firmware loading on big-endian systems, from Ivan
    Vecera.

 6) Fix regression in that we were inheriting the congestion control of
    the listening socket for new connections, the intended behavior
    always was to use the default in this case.  From Neal Cardwell.

 7) Fix NULL deref in brcmfmac driver, from Arend van Spriel.

 8) OTP parsing fix in iwlwifi from Liad Kaufman.

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (26 commits)
  vti6: Add pmtu handling to vti6_xmit.
  Revert "net: core: 'ethtool' issue with querying phy settings"
  bnx2x: Move statistics implementation into semaphores
  xen: netback: read hotplug script once at start of day.
  xen: netback: fix printf format string warning
  Revert "netfilter: ensure number of counters is >0 in do_replace()"
  net: dsa: Properly propagate errors from dsa_switch_setup_one
  tcp: fix child sockets to use system default congestion control if not set
  udp: fix behavior of wrong checksums
  sfc: free multiple Rx buffers when required
  bna: fix soft lock-up during firmware initialization failure
  bna: remove unreasonable iocpf timer start
  bna: fix firmware loading on big-endian machines
  bridge: fix br_multicast_query_expired() bug
  via-rhine: Resigning as maintainer
  brcmfmac: avoid null pointer access when brcmf_msgbuf_get_pktid() fails
  mac80211: Fix mac80211.h docbook comments
  iwlwifi: nvm: fix otp parsing in 8000 hw family
  iwlwifi: pcie: fix tracking of cmd_in_flight
  ip_vti/ip6_vti: Preserve skb->mark after rcv_cb call
  ...
parents 2459c609 e453581d
Loading
Loading
Loading
Loading
+1 −2
Original line number Original line Diff line number Diff line
@@ -10587,8 +10587,7 @@ F: drivers/virtio/virtio_input.c
F:	include/uapi/linux/virtio_input.h
F:	include/uapi/linux/virtio_input.h


VIA RHINE NETWORK DRIVER
VIA RHINE NETWORK DRIVER
M:	Roger Luethi <rl@hellgate.ch>
S:	Orphan
S:	Maintained
F:	drivers/net/ethernet/via/via-rhine.c
F:	drivers/net/ethernet/via/via-rhine.c


VIA SD/MMC CARD CONTROLLER DRIVER
VIA SD/MMC CARD CONTROLLER DRIVER
+1 −1
Original line number Original line Diff line number Diff line
@@ -1774,7 +1774,7 @@ struct bnx2x {
	int			stats_state;
	int			stats_state;


	/* used for synchronization of concurrent threads statistics handling */
	/* used for synchronization of concurrent threads statistics handling */
	struct mutex		stats_lock;
	struct semaphore	stats_lock;


	/* used by dmae command loader */
	/* used by dmae command loader */
	struct dmae_command	stats_dmae;
	struct dmae_command	stats_dmae;
+5 −4
Original line number Original line Diff line number Diff line
@@ -12054,7 +12054,7 @@ static int bnx2x_init_bp(struct bnx2x *bp)
	mutex_init(&bp->port.phy_mutex);
	mutex_init(&bp->port.phy_mutex);
	mutex_init(&bp->fw_mb_mutex);
	mutex_init(&bp->fw_mb_mutex);
	mutex_init(&bp->drv_info_mutex);
	mutex_init(&bp->drv_info_mutex);
	mutex_init(&bp->stats_lock);
	sema_init(&bp->stats_lock, 1);
	bp->drv_info_mng_owner = false;
	bp->drv_info_mng_owner = false;


	INIT_DELAYED_WORK(&bp->sp_task, bnx2x_sp_task);
	INIT_DELAYED_WORK(&bp->sp_task, bnx2x_sp_task);
@@ -13690,9 +13690,10 @@ static int bnx2x_eeh_nic_unload(struct bnx2x *bp)
	cancel_delayed_work_sync(&bp->sp_task);
	cancel_delayed_work_sync(&bp->sp_task);
	cancel_delayed_work_sync(&bp->period_task);
	cancel_delayed_work_sync(&bp->period_task);


	mutex_lock(&bp->stats_lock);
	if (!down_timeout(&bp->stats_lock, HZ / 10)) {
		bp->stats_state = STATS_STATE_DISABLED;
		bp->stats_state = STATS_STATE_DISABLED;
	mutex_unlock(&bp->stats_lock);
		up(&bp->stats_lock);
	}


	bnx2x_save_statistics(bp);
	bnx2x_save_statistics(bp);


+14 −6
Original line number Original line Diff line number Diff line
@@ -1372,19 +1372,23 @@ void bnx2x_stats_handle(struct bnx2x *bp, enum bnx2x_stats_event event)
	 * that context in case someone is in the middle of a transition.
	 * that context in case someone is in the middle of a transition.
	 * For other events, wait a bit until lock is taken.
	 * For other events, wait a bit until lock is taken.
	 */
	 */
	if (!mutex_trylock(&bp->stats_lock)) {
	if (down_trylock(&bp->stats_lock)) {
		if (event == STATS_EVENT_UPDATE)
		if (event == STATS_EVENT_UPDATE)
			return;
			return;


		DP(BNX2X_MSG_STATS,
		DP(BNX2X_MSG_STATS,
		   "Unlikely stats' lock contention [event %d]\n", event);
		   "Unlikely stats' lock contention [event %d]\n", event);
		mutex_lock(&bp->stats_lock);
		if (unlikely(down_timeout(&bp->stats_lock, HZ / 10))) {
			BNX2X_ERR("Failed to take stats lock [event %d]\n",
				  event);
			return;
		}
	}
	}


	bnx2x_stats_stm[state][event].action(bp);
	bnx2x_stats_stm[state][event].action(bp);
	bp->stats_state = bnx2x_stats_stm[state][event].next_state;
	bp->stats_state = bnx2x_stats_stm[state][event].next_state;


	mutex_unlock(&bp->stats_lock);
	up(&bp->stats_lock);


	if ((event != STATS_EVENT_UPDATE) || netif_msg_timer(bp))
	if ((event != STATS_EVENT_UPDATE) || netif_msg_timer(bp))
		DP(BNX2X_MSG_STATS, "state %d -> event %d -> state %d\n",
		DP(BNX2X_MSG_STATS, "state %d -> event %d -> state %d\n",
@@ -1970,7 +1974,11 @@ int bnx2x_stats_safe_exec(struct bnx2x *bp,
	/* Wait for statistics to end [while blocking further requests],
	/* Wait for statistics to end [while blocking further requests],
	 * then run supplied function 'safely'.
	 * then run supplied function 'safely'.
	 */
	 */
	mutex_lock(&bp->stats_lock);
	rc = down_timeout(&bp->stats_lock, HZ / 10);
	if (unlikely(rc)) {
		BNX2X_ERR("Failed to take statistics lock for safe execution\n");
		goto out_no_lock;
	}


	bnx2x_stats_comp(bp);
	bnx2x_stats_comp(bp);
	while (bp->stats_pending && cnt--)
	while (bp->stats_pending && cnt--)
@@ -1988,7 +1996,7 @@ int bnx2x_stats_safe_exec(struct bnx2x *bp,
	/* No need to restart statistics - if they're enabled, the timer
	/* No need to restart statistics - if they're enabled, the timer
	 * will restart the statistics.
	 * will restart the statistics.
	 */
	 */
	mutex_unlock(&bp->stats_lock);
	up(&bp->stats_lock);

out_no_lock:
	return rc;
	return rc;
}
}
+2 −2
Original line number Original line Diff line number Diff line
@@ -2414,7 +2414,7 @@ bfa_ioc_boot(struct bfa_ioc *ioc, enum bfi_fwboot_type boot_type,
	if (status == BFA_STATUS_OK)
	if (status == BFA_STATUS_OK)
		bfa_ioc_lpu_start(ioc);
		bfa_ioc_lpu_start(ioc);
	else
	else
		bfa_nw_iocpf_timeout(ioc);
		bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT);


	return status;
	return status;
}
}
@@ -3029,7 +3029,7 @@ bfa_ioc_poll_fwinit(struct bfa_ioc *ioc)
	}
	}


	if (ioc->iocpf.poll_time >= BFA_IOC_TOV) {
	if (ioc->iocpf.poll_time >= BFA_IOC_TOV) {
		bfa_nw_iocpf_timeout(ioc);
		bfa_fsm_send_event(&ioc->iocpf, IOCPF_E_TIMEOUT);
	} else {
	} else {
		ioc->iocpf.poll_time += BFA_IOC_POLL_TOV;
		ioc->iocpf.poll_time += BFA_IOC_POLL_TOV;
		mod_timer(&ioc->iocpf_timer, jiffies +
		mod_timer(&ioc->iocpf_timer, jiffies +
Loading