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

Collapse All | Expand All

(-)b/sys/dev/ixgbe/ixgbe.c (-20 / +1 lines)
Lines 1396-1418 ixgbe_disable_queue(struct adapter *adapter, u32 vector) Link Here
1396
	}
1396
	}
1397
}
1397
}
1398
1398
1399
static inline void
1400
ixgbe_rearm_queues(struct adapter *adapter, u64 queues)
1401
{
1402
	u32 mask;
1403
1404
	if (adapter->hw.mac.type == ixgbe_mac_82598EB) {
1405
		mask = (IXGBE_EIMS_RTX_QUEUE & queues);
1406
		IXGBE_WRITE_REG(&adapter->hw, IXGBE_EICS, mask);
1407
	} else {
1408
		mask = (queues & 0xFFFFFFFF);
1409
		IXGBE_WRITE_REG(&adapter->hw, IXGBE_EICS_EX(0), mask);
1410
		mask = (queues >> 32);
1411
		IXGBE_WRITE_REG(&adapter->hw, IXGBE_EICS_EX(1), mask);
1412
	}
1413
}
1414
1415
1416
static void
1399
static void
1417
ixgbe_handle_que(void *context, int pending)
1400
ixgbe_handle_que(void *context, int pending)
1418
{
1401
{
Lines 2046-2059 ixgbe_local_timer(void *arg) Link Here
2046
		    (paused == 0))
2029
		    (paused == 0))
2047
			++hung;
2030
			++hung;
2048
		else if (txr->queue_status == IXGBE_QUEUE_WORKING)
2031
		else if (txr->queue_status == IXGBE_QUEUE_WORKING)
2049
			taskqueue_enqueue(que->tq, &que->que_task);
2032
			taskqueue_enqueue(que->tq, &txr->txq_task);
2050
        }
2033
        }
2051
	/* Only truely watchdog if all queues show hung */
2034
	/* Only truely watchdog if all queues show hung */
2052
        if (hung == adapter->num_tx_queues)
2035
        if (hung == adapter->num_tx_queues)
2053
                goto watchdog;
2036
                goto watchdog;
2054
2037
2055
out:
2038
out:
2056
	ixgbe_rearm_queues(adapter, adapter->que_mask);
2057
	callout_reset(&adapter->timer, hz, ixgbe_local_timer, adapter);
2039
	callout_reset(&adapter->timer, hz, ixgbe_local_timer, adapter);
2058
	return;
2040
	return;
2059
2041
Lines 4559-4565 next_desc: Link Here
4559
	** Schedule another interrupt if so.
4541
	** Schedule another interrupt if so.
4560
	*/
4542
	*/
4561
	if ((staterr & IXGBE_RXD_STAT_DD) != 0) {
4543
	if ((staterr & IXGBE_RXD_STAT_DD) != 0) {
4562
		ixgbe_rearm_queues(adapter, (u64)(1 << que->msix));
4563
		return (TRUE);
4544
		return (TRUE);
4564
	}
4545
	}
4565
4546

Return to bug 176446