diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igb/igb_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 15 | 
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 7e6435dc7e80..171a7a629b20 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -931,6 +931,7 @@ static void igb_configure_msix(struct igb_adapter *adapter)   **/  static int igb_request_msix(struct igb_adapter *adapter)  { +	unsigned int num_q_vectors = adapter->num_q_vectors;  	struct net_device *netdev = adapter->netdev;  	int i, err = 0, vector = 0, free_vector = 0; @@ -939,7 +940,13 @@ static int igb_request_msix(struct igb_adapter *adapter)  	if (err)  		goto err_out; -	for (i = 0; i < adapter->num_q_vectors; i++) { +	if (num_q_vectors > MAX_Q_VECTORS) { +		num_q_vectors = MAX_Q_VECTORS; +		dev_warn(&adapter->pdev->dev, +			 "The number of queue vectors (%d) is higher than max allowed (%d)\n", +			 adapter->num_q_vectors, MAX_Q_VECTORS); +	} +	for (i = 0; i < num_q_vectors; i++) {  		struct igb_q_vector *q_vector = adapter->q_vector[i];  		vector++; @@ -1678,14 +1685,15 @@ static bool is_any_txtime_enabled(struct igb_adapter *adapter)   **/  static void igb_config_tx_modes(struct igb_adapter *adapter, int queue)  { -	struct igb_ring *ring = adapter->tx_ring[queue];  	struct net_device *netdev = adapter->netdev;  	struct e1000_hw *hw = &adapter->hw; +	struct igb_ring *ring;  	u32 tqavcc, tqavctrl;  	u16 value;  	WARN_ON(hw->mac.type != e1000_i210);  	WARN_ON(queue < 0 || queue > 1); +	ring = adapter->tx_ring[queue];  	/* If any of the Qav features is enabled, configure queues as SR and  	 * with HIGH PRIO. If none is, then configure them with LOW PRIO and @@ -3615,6 +3623,7 @@ err_sw_init:  err_ioremap:  	free_netdev(netdev);  err_alloc_etherdev: +	pci_disable_pcie_error_reporting(pdev);  	pci_release_mem_regions(pdev);  err_pci_reg:  err_dma: @@ -4835,6 +4844,8 @@ static void igb_clean_tx_ring(struct igb_ring *tx_ring)  					       DMA_TO_DEVICE);  		} +		tx_buffer->next_to_watch = NULL; +  		/* move us one more past the eop_desc for start of next pkt */  		tx_buffer++;  		i++;  |