View | Details | Raw Unified | Return to bug 258551
Collapse All | Expand All

(-)b/sys/dev/e1000/if_em.c (-8 / +4 lines)
Lines 1492-1498 em_msix_link(void *arg) Link Here
1492
{
1492
{
1493
	struct adapter *adapter = arg;
1493
	struct adapter *adapter = arg;
1494
	u32 reg_icr;
1494
	u32 reg_icr;
1495
	bool notlink = false;
1496
1495
1497
	++adapter->link_irq;
1496
	++adapter->link_irq;
1498
	MPASS(adapter->hw.back != NULL);
1497
	MPASS(adapter->hw.back != NULL);
Lines 1503-1519 em_msix_link(void *arg) Link Here
1503
1502
1504
	if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))
1503
	if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))
1505
		em_handle_link(adapter->ctx);
1504
		em_handle_link(adapter->ctx);
1506
	else
1507
		notlink = true;
1508
1505
1509
	/* Re-arm for other/spurious interrupts */
1506
	/* Re-arm unconditionally */
1510
	if (notlink && adapter->hw.mac.type >= igb_mac_min) {
1507
	if (adapter->hw.mac.type >= igb_mac_min) {
1511
		E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC);
1508
		E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC);
1512
		E1000_WRITE_REG(&adapter->hw, E1000_EIMS, adapter->link_mask);
1509
		E1000_WRITE_REG(&adapter->hw, E1000_EIMS, adapter->link_mask);
1513
	} else if (adapter->hw.mac.type == e1000_82574) {
1510
	} else if (adapter->hw.mac.type == e1000_82574) {
1514
		if (notlink)
1511
		E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC |
1515
			E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC |
1512
		    E1000_IMS_OTHER);
1516
			    E1000_IMS_OTHER);
1517
		/*
1513
		/*
1518
		 * Because we must read the ICR for this interrupt it may
1514
		 * Because we must read the ICR for this interrupt it may
1519
		 * clear other causes using autoclear, for this reason we
1515
		 * clear other causes using autoclear, for this reason we

Return to bug 258551