Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Several conflicts here. NFP driver bug fix adding nfp_netdev_is_nfp_repr() check to nfp_fl_output() needed some adjustments because the code block is in an else block now. Parallel additions to net/pkt_cls.h and net/sch_generic.h A bug fix in __tcp_retransmit_skb() conflicted with some of the rbtree changes in net-next. The tc action RCU callback fixes in 'net' had some overlap with some of the recent tcf_block reworking. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -1824,11 +1824,12 @@ static void e1000_get_ethtool_stats(struct net_device *netdev,
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
int i;
|
||||
char *p = NULL;
|
||||
const struct e1000_stats *stat = e1000_gstrings_stats;
|
||||
|
||||
e1000_update_stats(adapter);
|
||||
for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
|
||||
for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++, stat++) {
|
||||
char *p;
|
||||
|
||||
switch (stat->type) {
|
||||
case NETDEV_STATS:
|
||||
p = (char *)netdev + stat->stat_offset;
|
||||
@@ -1839,15 +1840,13 @@ static void e1000_get_ethtool_stats(struct net_device *netdev,
|
||||
default:
|
||||
WARN_ONCE(1, "Invalid E1000 stat type: %u index %d\n",
|
||||
stat->type, i);
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (stat->sizeof_stat == sizeof(u64))
|
||||
data[i] = *(u64 *)p;
|
||||
else
|
||||
data[i] = *(u32 *)p;
|
||||
|
||||
stat++;
|
||||
}
|
||||
/* BUG_ON(i != E1000_STATS_LEN); */
|
||||
}
|
||||
|
@@ -520,8 +520,6 @@ void e1000_down(struct e1000_adapter *adapter)
|
||||
struct net_device *netdev = adapter->netdev;
|
||||
u32 rctl, tctl;
|
||||
|
||||
netif_carrier_off(netdev);
|
||||
|
||||
/* disable receives in the hardware */
|
||||
rctl = er32(RCTL);
|
||||
ew32(RCTL, rctl & ~E1000_RCTL_EN);
|
||||
@@ -537,6 +535,15 @@ void e1000_down(struct e1000_adapter *adapter)
|
||||
E1000_WRITE_FLUSH();
|
||||
msleep(10);
|
||||
|
||||
/* Set the carrier off after transmits have been disabled in the
|
||||
* hardware, to avoid race conditions with e1000_watchdog() (which
|
||||
* may be running concurrently to us, checking for the carrier
|
||||
* bit to decide whether it should enable transmits again). Such
|
||||
* a race condition would result into transmission being disabled
|
||||
* in the hardware until the next IFF_DOWN+IFF_UP cycle.
|
||||
*/
|
||||
netif_carrier_off(netdev);
|
||||
|
||||
napi_disable(&adapter->napi);
|
||||
|
||||
e1000_irq_disable(adapter);
|
||||
|
@@ -2111,6 +2111,7 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)
|
||||
|
||||
if (unlikely(i40e_rx_is_programming_status(qword))) {
|
||||
i40e_clean_programming_status(rx_ring, rx_desc, qword);
|
||||
cleaned_count++;
|
||||
continue;
|
||||
}
|
||||
size = (qword & I40E_RXD_QW1_LENGTH_PBUF_MASK) >>
|
||||
@@ -2277,7 +2278,7 @@ static inline void i40e_update_enable_itr(struct i40e_vsi *vsi,
|
||||
goto enable_int;
|
||||
}
|
||||
|
||||
if (ITR_IS_DYNAMIC(tx_itr_setting)) {
|
||||
if (ITR_IS_DYNAMIC(rx_itr_setting)) {
|
||||
rx = i40e_set_new_dynamic_itr(&q_vector->rx);
|
||||
rxval = i40e_buildreg_itr(I40E_RX_ITR, q_vector->rx.itr);
|
||||
}
|
||||
|
@@ -5673,7 +5673,7 @@ dma_error:
|
||||
DMA_TO_DEVICE);
|
||||
dma_unmap_len_set(tx_buffer, len, 0);
|
||||
|
||||
if (i--)
|
||||
if (i-- == 0)
|
||||
i += tx_ring->count;
|
||||
tx_buffer = &tx_ring->tx_buffer_info[i];
|
||||
}
|
||||
|
@@ -8156,29 +8156,23 @@ static int ixgbe_tx_map(struct ixgbe_ring *tx_ring,
|
||||
return 0;
|
||||
dma_error:
|
||||
dev_err(tx_ring->dev, "TX DMA map failed\n");
|
||||
tx_buffer = &tx_ring->tx_buffer_info[i];
|
||||
|
||||
/* clear dma mappings for failed tx_buffer_info map */
|
||||
while (tx_buffer != first) {
|
||||
for (;;) {
|
||||
tx_buffer = &tx_ring->tx_buffer_info[i];
|
||||
if (dma_unmap_len(tx_buffer, len))
|
||||
dma_unmap_page(tx_ring->dev,
|
||||
dma_unmap_addr(tx_buffer, dma),
|
||||
dma_unmap_len(tx_buffer, len),
|
||||
DMA_TO_DEVICE);
|
||||
dma_unmap_len_set(tx_buffer, len, 0);
|
||||
|
||||
if (i--)
|
||||
if (tx_buffer == first)
|
||||
break;
|
||||
if (i == 0)
|
||||
i += tx_ring->count;
|
||||
tx_buffer = &tx_ring->tx_buffer_info[i];
|
||||
i--;
|
||||
}
|
||||
|
||||
if (dma_unmap_len(tx_buffer, len))
|
||||
dma_unmap_single(tx_ring->dev,
|
||||
dma_unmap_addr(tx_buffer, dma),
|
||||
dma_unmap_len(tx_buffer, len),
|
||||
DMA_TO_DEVICE);
|
||||
dma_unmap_len_set(tx_buffer, len, 0);
|
||||
|
||||
dev_kfree_skb_any(first->skb);
|
||||
first->skb = NULL;
|
||||
|
||||
|
Reference in New Issue
Block a user