Fix resource leak in igb

This commit is contained in:
Bjarne von Horn 2024-02-12 10:54:45 +01:00
parent 188519459f
commit 592cc1f309
7 changed files with 51 additions and 54 deletions

View File

@ -1047,12 +1047,9 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
if (q_vector->rx.ring)
adapter->tx_ring[q_vector->rx.ring->queue_index] = NULL;
if (!adapter->ecdev) {
netif_napi_del(&q_vector->napi);
}
}
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
{
int v_idx = adapter->num_q_vectors;
@ -1221,11 +1218,9 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
if (!q_vector)
return -ENOMEM;
if (!adapter->ecdev) {
/* initialize NAPI */
netif_napi_add(adapter->netdev, &q_vector->napi,
igb_poll, 64);
}
/* tie q_vector and adapter together */
adapter->q_vector[v_idx] = q_vector;
@ -6430,6 +6425,9 @@ static int igb_poll(struct napi_struct *napi, int budget)
napi);
bool clean_complete = true;
if (q_vector->adapter->ecdev)
return -EBUSY;
#ifdef CONFIG_IGB_DCA
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_dca(q_vector);

View File

@ -1037,12 +1037,9 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
if (q_vector->rx.ring)
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
if (!adapter->ecdev) {
netif_napi_del(&q_vector->napi);
}
}
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
{
int v_idx = adapter->num_q_vectors;
@ -1219,11 +1216,9 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
if (!q_vector)
return -ENOMEM;
if (!adapter->ecdev) {
/* initialize NAPI */
netif_napi_add(adapter->netdev, &q_vector->napi,
igb_poll, 64);
}
/* tie q_vector and adapter together */
adapter->q_vector[v_idx] = q_vector;
@ -7858,6 +7853,9 @@ static int igb_poll(struct napi_struct *napi, int budget)
bool clean_complete = true;
int work_done = 0;
if (q_vector->adapter->ecdev)
return -EBUSY;
#ifdef CONFIG_IGB_DCA
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_dca(q_vector);

View File

@ -1047,12 +1047,9 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
if (q_vector->rx.ring)
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
if (!adapter->ecdev) {
netif_napi_del(&q_vector->napi);
}
}
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
{
int v_idx = adapter->num_q_vectors;
@ -1227,11 +1224,9 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
if (!q_vector)
return -ENOMEM;
if (!adapter->ecdev) {
/* initialize NAPI */
netif_napi_add(adapter->netdev, &q_vector->napi,
igb_poll, 64);
}
/* tie q_vector and adapter together */
adapter->q_vector[v_idx] = q_vector;
@ -6506,6 +6501,9 @@ static int igb_poll(struct napi_struct *napi, int budget)
bool clean_complete = true;
int work_done = 0;
if (q_vector->adapter->ecdev)
return -EBUSY;
#ifdef CONFIG_IGB_DCA
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_dca(q_vector);

View File

@ -1036,9 +1036,7 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
if (q_vector->rx.ring)
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
if (!adapter->ecdev)
netif_napi_del(&q_vector->napi);
}
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
@ -1218,10 +1216,8 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
return -ENOMEM;
/* initialize NAPI */
if (!adapter->ecdev) {
netif_napi_add(adapter->netdev, &q_vector->napi,
igb_poll, 64);
}
/* tie q_vector and adapter together */
adapter->q_vector[v_idx] = q_vector;
@ -8133,6 +8129,10 @@ static int igb_poll(struct napi_struct *napi, int budget)
bool clean_complete = true;
int work_done = 0;
if (q_vector->adapter->ecdev) {
return -EBUSY;
}
#ifdef CONFIG_IGB_DCA
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_dca(q_vector);

View File

@ -1047,7 +1047,6 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
if (q_vector->rx.ring)
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
if (!get_ecdev(adapter))
netif_napi_del(&q_vector->napi);
}
@ -1229,10 +1228,8 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
return -ENOMEM;
/* initialize NAPI */
if (get_ecdev(adapter)) {
netif_napi_add(adapter->netdev, &q_vector->napi,
igb_poll, 64);
}
/* tie q_vector and adapter together */
adapter->q_vector[v_idx] = q_vector;
@ -8141,6 +8138,10 @@ static int igb_poll(struct napi_struct *napi, int budget)
bool clean_complete = true;
int work_done = 0;
if (get_ecdev(q_vector->adapter)) {
return -EBUSY;
}
#ifdef CONFIG_IGB_DCA
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_dca(q_vector);

View File

@ -1036,7 +1036,6 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
if (q_vector->rx.ring)
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
if (!get_ecdev(adapter))
netif_napi_del(&q_vector->napi);
}
@ -1218,10 +1217,8 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
return -ENOMEM;
/* initialize NAPI */
if (get_ecdev(adapter)) {
netif_napi_add(adapter->netdev, &q_vector->napi,
igb_poll, 64);
}
/* tie q_vector and adapter together */
adapter->q_vector[v_idx] = q_vector;
@ -8131,6 +8128,10 @@ static int igb_poll(struct napi_struct *napi, int budget)
bool clean_complete = true;
int work_done = 0;
if (get_ecdev(q_vector->adapter)) {
return -EBUSY;
}
#ifdef CONFIG_IGB_DCA
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_dca(q_vector);

View File

@ -1034,7 +1034,6 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
if (q_vector->rx.ring)
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
if (!get_ecdev(adapter))
netif_napi_del(&q_vector->napi);
}
@ -1220,9 +1219,7 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
return -ENOMEM;
/* initialize NAPI */
if (!get_ecdev(adapter)) {
netif_napi_add(adapter->netdev, &q_vector->napi, igb_poll);
}
/* tie q_vector and adapter together */
adapter->q_vector[v_idx] = q_vector;
@ -8284,6 +8281,10 @@ static int igb_poll(struct napi_struct *napi, int budget)
bool clean_complete = true;
int work_done = 0;
if (get_ecdev(q_vector->adapter)) {
return -EBUSY;
}
#ifdef CONFIG_IGB_DCA
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_dca(q_vector);