|
|
@@ -1198,6 +1198,7 @@ static void i40evf_free_queues(struct i40evf_adapter *adapter)
|
|
|
{
|
|
|
if (!adapter->vsi_res)
|
|
|
return;
|
|
|
+ adapter->num_active_queues = 0;
|
|
|
kfree(adapter->tx_rings);
|
|
|
adapter->tx_rings = NULL;
|
|
|
kfree(adapter->rx_rings);
|
|
|
@@ -1214,18 +1215,22 @@ static void i40evf_free_queues(struct i40evf_adapter *adapter)
|
|
|
**/
|
|
|
static int i40evf_alloc_queues(struct i40evf_adapter *adapter)
|
|
|
{
|
|
|
- int i;
|
|
|
+ int i, num_active_queues;
|
|
|
+
|
|
|
+ num_active_queues = min_t(int,
|
|
|
+ adapter->vsi_res->num_queue_pairs,
|
|
|
+ (int)(num_online_cpus()));
|
|
|
|
|
|
- adapter->tx_rings = kcalloc(adapter->num_active_queues,
|
|
|
+ adapter->tx_rings = kcalloc(num_active_queues,
|
|
|
sizeof(struct i40e_ring), GFP_KERNEL);
|
|
|
if (!adapter->tx_rings)
|
|
|
goto err_out;
|
|
|
- adapter->rx_rings = kcalloc(adapter->num_active_queues,
|
|
|
+ adapter->rx_rings = kcalloc(num_active_queues,
|
|
|
sizeof(struct i40e_ring), GFP_KERNEL);
|
|
|
if (!adapter->rx_rings)
|
|
|
goto err_out;
|
|
|
|
|
|
- for (i = 0; i < adapter->num_active_queues; i++) {
|
|
|
+ for (i = 0; i < num_active_queues; i++) {
|
|
|
struct i40e_ring *tx_ring;
|
|
|
struct i40e_ring *rx_ring;
|
|
|
|
|
|
@@ -1247,6 +1252,8 @@ static int i40evf_alloc_queues(struct i40evf_adapter *adapter)
|
|
|
rx_ring->rx_itr_setting = (I40E_ITR_DYNAMIC | I40E_ITR_RX_DEF);
|
|
|
}
|
|
|
|
|
|
+ adapter->num_active_queues = num_active_queues;
|
|
|
+
|
|
|
return 0;
|
|
|
|
|
|
err_out:
|
|
|
@@ -2636,9 +2643,6 @@ static void i40evf_init_task(struct work_struct *work)
|
|
|
adapter->watchdog_timer.data = (unsigned long)adapter;
|
|
|
mod_timer(&adapter->watchdog_timer, jiffies + 1);
|
|
|
|
|
|
- adapter->num_active_queues = min_t(int,
|
|
|
- adapter->vsi_res->num_queue_pairs,
|
|
|
- (int)(num_online_cpus()));
|
|
|
adapter->tx_desc_count = I40EVF_DEFAULT_TXD;
|
|
|
adapter->rx_desc_count = I40EVF_DEFAULT_RXD;
|
|
|
err = i40evf_init_interrupt_scheme(adapter);
|