View | Details | Raw Unified | Return to bug 150516 | Differences between
and this patch

Collapse All | Expand All

(-)b/sys/dev/e1000/e1000_defines.h (+1 lines)
Lines 865-870 Link Here
865
#define IMS_ENABLE_MASK ( \
865
#define IMS_ENABLE_MASK ( \
866
    E1000_IMS_RXT0   |    \
866
    E1000_IMS_RXT0   |    \
867
    E1000_IMS_TXDW   |    \
867
    E1000_IMS_TXDW   |    \
868
    E1000_IMS_RXO    |    \
868
    E1000_IMS_RXDMT0 |    \
869
    E1000_IMS_RXDMT0 |    \
869
    E1000_IMS_RXSEQ  |    \
870
    E1000_IMS_RXSEQ  |    \
870
    E1000_IMS_LSC)
871
    E1000_IMS_LSC)
(-)b/sys/dev/e1000/if_em.c (-2 / +20 lines)
Lines 283-288 static void em_msix_link(void *); Link Here
283
static void	em_handle_tx(void *context, int pending);
283
static void	em_handle_tx(void *context, int pending);
284
static void	em_handle_rx(void *context, int pending);
284
static void	em_handle_rx(void *context, int pending);
285
static void	em_handle_link(void *context, int pending);
285
static void	em_handle_link(void *context, int pending);
286
static void	em_handle_rx_overrun(void *context);
286
287
287
static void	em_add_rx_process_limit(struct adapter *, const char *,
288
static void	em_add_rx_process_limit(struct adapter *, const char *,
288
		    const char *, int *, int);
289
		    const char *, int *, int);
Lines 1567-1575 em_msix_link(void *arg) Link Here
1567
	if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1568
	if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1568
		adapter->hw.mac.get_link_status = 1;
1569
		adapter->hw.mac.get_link_status = 1;
1569
		em_handle_link(adapter, 0);
1570
		em_handle_link(adapter, 0);
1571
	} else if (reg_icr & E1000_ICR_RXO) {
1572
		adapter->rx_overruns++;
1573
		em_handle_rx_overrun(adapter);
1570
	} else
1574
	} else
1571
		E1000_WRITE_REG(&adapter->hw, E1000_IMS,
1575
		E1000_WRITE_REG(&adapter->hw, E1000_IMS,
1572
		    EM_MSIX_LINK | E1000_IMS_LSC);
1576
		    EM_MSIX_LINK | E1000_IMS_LSC | E1000_IMS_RXO);
1573
	return;
1577
	return;
1574
}
1578
}
1575
1579
Lines 1627-1632 em_handle_link(void *context, int pending) Link Here
1627
	EM_CORE_UNLOCK(adapter);
1631
	EM_CORE_UNLOCK(adapter);
1628
}
1632
}
1629
1633
1634
static void
1635
em_handle_rx_overrun(void *context)
1636
{
1637
	struct adapter	*adapter = context;
1638
	struct ifnet *ifp = adapter->ifp;
1639
	struct rx_ring *rxr = adapter->rx_rings;
1640
1641
	if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
1642
		return;
1643
1644
	EM_CORE_LOCK(adapter);
1645
	em_refresh_mbufs(rxr, rxr->next_to_check);
1646
	E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_RXO);
1647
	EM_CORE_UNLOCK(adapter);
1648
}
1630
1649
1631
/*********************************************************************
1650
/*********************************************************************
1632
 *
1651
 *
1633
- 

Return to bug 150516