Fix resource leak in igb
This commit is contained in:
parent
188519459f
commit
592cc1f309
|
|
@ -1047,10 +1047,7 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
|
||||||
if (q_vector->rx.ring)
|
if (q_vector->rx.ring)
|
||||||
adapter->tx_ring[q_vector->rx.ring->queue_index] = NULL;
|
adapter->tx_ring[q_vector->rx.ring->queue_index] = NULL;
|
||||||
|
|
||||||
if (!adapter->ecdev) {
|
netif_napi_del(&q_vector->napi);
|
||||||
netif_napi_del(&q_vector->napi);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
|
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
|
||||||
|
|
@ -1221,11 +1218,9 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
|
||||||
if (!q_vector)
|
if (!q_vector)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
if (!adapter->ecdev) {
|
/* initialize NAPI */
|
||||||
/* initialize NAPI */
|
netif_napi_add(adapter->netdev, &q_vector->napi,
|
||||||
netif_napi_add(adapter->netdev, &q_vector->napi,
|
igb_poll, 64);
|
||||||
igb_poll, 64);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* tie q_vector and adapter together */
|
/* tie q_vector and adapter together */
|
||||||
adapter->q_vector[v_idx] = q_vector;
|
adapter->q_vector[v_idx] = q_vector;
|
||||||
|
|
@ -6430,6 +6425,9 @@ static int igb_poll(struct napi_struct *napi, int budget)
|
||||||
napi);
|
napi);
|
||||||
bool clean_complete = true;
|
bool clean_complete = true;
|
||||||
|
|
||||||
|
if (q_vector->adapter->ecdev)
|
||||||
|
return -EBUSY;
|
||||||
|
|
||||||
#ifdef CONFIG_IGB_DCA
|
#ifdef CONFIG_IGB_DCA
|
||||||
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
||||||
igb_update_dca(q_vector);
|
igb_update_dca(q_vector);
|
||||||
|
|
|
||||||
|
|
@ -1037,10 +1037,7 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
|
||||||
if (q_vector->rx.ring)
|
if (q_vector->rx.ring)
|
||||||
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
||||||
|
|
||||||
if (!adapter->ecdev) {
|
netif_napi_del(&q_vector->napi);
|
||||||
netif_napi_del(&q_vector->napi);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
|
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
|
||||||
|
|
@ -1219,11 +1216,9 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
|
||||||
if (!q_vector)
|
if (!q_vector)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
if (!adapter->ecdev) {
|
/* initialize NAPI */
|
||||||
/* initialize NAPI */
|
netif_napi_add(adapter->netdev, &q_vector->napi,
|
||||||
netif_napi_add(adapter->netdev, &q_vector->napi,
|
igb_poll, 64);
|
||||||
igb_poll, 64);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* tie q_vector and adapter together */
|
/* tie q_vector and adapter together */
|
||||||
adapter->q_vector[v_idx] = q_vector;
|
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;
|
bool clean_complete = true;
|
||||||
int work_done = 0;
|
int work_done = 0;
|
||||||
|
|
||||||
|
if (q_vector->adapter->ecdev)
|
||||||
|
return -EBUSY;
|
||||||
|
|
||||||
#ifdef CONFIG_IGB_DCA
|
#ifdef CONFIG_IGB_DCA
|
||||||
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
||||||
igb_update_dca(q_vector);
|
igb_update_dca(q_vector);
|
||||||
|
|
|
||||||
|
|
@ -1047,10 +1047,7 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
|
||||||
if (q_vector->rx.ring)
|
if (q_vector->rx.ring)
|
||||||
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
||||||
|
|
||||||
if (!adapter->ecdev) {
|
netif_napi_del(&q_vector->napi);
|
||||||
netif_napi_del(&q_vector->napi);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
|
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
|
||||||
|
|
@ -1227,11 +1224,9 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
|
||||||
if (!q_vector)
|
if (!q_vector)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
if (!adapter->ecdev) {
|
/* initialize NAPI */
|
||||||
/* initialize NAPI */
|
netif_napi_add(adapter->netdev, &q_vector->napi,
|
||||||
netif_napi_add(adapter->netdev, &q_vector->napi,
|
igb_poll, 64);
|
||||||
igb_poll, 64);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* tie q_vector and adapter together */
|
/* tie q_vector and adapter together */
|
||||||
adapter->q_vector[v_idx] = q_vector;
|
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;
|
bool clean_complete = true;
|
||||||
int work_done = 0;
|
int work_done = 0;
|
||||||
|
|
||||||
|
if (q_vector->adapter->ecdev)
|
||||||
|
return -EBUSY;
|
||||||
|
|
||||||
#ifdef CONFIG_IGB_DCA
|
#ifdef CONFIG_IGB_DCA
|
||||||
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
||||||
igb_update_dca(q_vector);
|
igb_update_dca(q_vector);
|
||||||
|
|
|
||||||
|
|
@ -1036,9 +1036,7 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
|
||||||
if (q_vector->rx.ring)
|
if (q_vector->rx.ring)
|
||||||
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
||||||
|
|
||||||
if (!adapter->ecdev)
|
netif_napi_del(&q_vector->napi);
|
||||||
netif_napi_del(&q_vector->napi);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void igb_reset_interrupt_capability(struct igb_adapter *adapter)
|
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;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* initialize NAPI */
|
/* initialize NAPI */
|
||||||
if (!adapter->ecdev) {
|
netif_napi_add(adapter->netdev, &q_vector->napi,
|
||||||
netif_napi_add(adapter->netdev, &q_vector->napi,
|
igb_poll, 64);
|
||||||
igb_poll, 64);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* tie q_vector and adapter together */
|
/* tie q_vector and adapter together */
|
||||||
adapter->q_vector[v_idx] = q_vector;
|
adapter->q_vector[v_idx] = q_vector;
|
||||||
|
|
@ -6491,7 +6487,7 @@ netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb,
|
||||||
first->bytecount = skb->len;
|
first->bytecount = skb->len;
|
||||||
first->gso_segs = 1;
|
first->gso_segs = 1;
|
||||||
|
|
||||||
if (unlikely(!adapter->ecdev &&
|
if (unlikely(!adapter->ecdev &&
|
||||||
skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
|
skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
|
||||||
|
|
||||||
if (adapter->tstamp_config.tx_type == HWTSTAMP_TX_ON &&
|
if (adapter->tstamp_config.tx_type == HWTSTAMP_TX_ON &&
|
||||||
|
|
@ -8133,6 +8129,10 @@ static int igb_poll(struct napi_struct *napi, int budget)
|
||||||
bool clean_complete = true;
|
bool clean_complete = true;
|
||||||
int work_done = 0;
|
int work_done = 0;
|
||||||
|
|
||||||
|
if (q_vector->adapter->ecdev) {
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IGB_DCA
|
#ifdef CONFIG_IGB_DCA
|
||||||
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
||||||
igb_update_dca(q_vector);
|
igb_update_dca(q_vector);
|
||||||
|
|
@ -8274,7 +8274,7 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector, int napi_budget)
|
||||||
q_vector->tx.total_bytes += total_bytes;
|
q_vector->tx.total_bytes += total_bytes;
|
||||||
q_vector->tx.total_packets += total_packets;
|
q_vector->tx.total_packets += total_packets;
|
||||||
|
|
||||||
if (!adapter->ecdev &&
|
if (!adapter->ecdev &&
|
||||||
test_bit(IGB_RING_FLAG_TX_DETECT_HANG, &tx_ring->flags)) {
|
test_bit(IGB_RING_FLAG_TX_DETECT_HANG, &tx_ring->flags)) {
|
||||||
struct e1000_hw *hw = &adapter->hw;
|
struct e1000_hw *hw = &adapter->hw;
|
||||||
|
|
||||||
|
|
@ -8926,7 +8926,7 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)
|
||||||
total_packets++;
|
total_packets++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* verify the packet layout is correct */
|
/* verify the packet layout is correct */
|
||||||
if (igb_cleanup_headers(rx_ring, rx_desc, skb)) {
|
if (igb_cleanup_headers(rx_ring, rx_desc, skb)) {
|
||||||
skb = NULL;
|
skb = NULL;
|
||||||
|
|
|
||||||
|
|
@ -1047,8 +1047,7 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
|
||||||
if (q_vector->rx.ring)
|
if (q_vector->rx.ring)
|
||||||
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
||||||
|
|
||||||
if (!get_ecdev(adapter))
|
netif_napi_del(&q_vector->napi);
|
||||||
netif_napi_del(&q_vector->napi);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1229,10 +1228,8 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* initialize NAPI */
|
/* initialize NAPI */
|
||||||
if (get_ecdev(adapter)) {
|
netif_napi_add(adapter->netdev, &q_vector->napi,
|
||||||
netif_napi_add(adapter->netdev, &q_vector->napi,
|
igb_poll, 64);
|
||||||
igb_poll, 64);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* tie q_vector and adapter together */
|
/* tie q_vector and adapter together */
|
||||||
adapter->q_vector[v_idx] = q_vector;
|
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;
|
bool clean_complete = true;
|
||||||
int work_done = 0;
|
int work_done = 0;
|
||||||
|
|
||||||
|
if (get_ecdev(q_vector->adapter)) {
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IGB_DCA
|
#ifdef CONFIG_IGB_DCA
|
||||||
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
||||||
igb_update_dca(q_vector);
|
igb_update_dca(q_vector);
|
||||||
|
|
|
||||||
|
|
@ -1036,8 +1036,7 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
|
||||||
if (q_vector->rx.ring)
|
if (q_vector->rx.ring)
|
||||||
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
||||||
|
|
||||||
if (!get_ecdev(adapter))
|
netif_napi_del(&q_vector->napi);
|
||||||
netif_napi_del(&q_vector->napi);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1218,10 +1217,8 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* initialize NAPI */
|
/* initialize NAPI */
|
||||||
if (get_ecdev(adapter)) {
|
netif_napi_add(adapter->netdev, &q_vector->napi,
|
||||||
netif_napi_add(adapter->netdev, &q_vector->napi,
|
igb_poll, 64);
|
||||||
igb_poll, 64);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* tie q_vector and adapter together */
|
/* tie q_vector and adapter together */
|
||||||
adapter->q_vector[v_idx] = q_vector;
|
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;
|
bool clean_complete = true;
|
||||||
int work_done = 0;
|
int work_done = 0;
|
||||||
|
|
||||||
|
if (get_ecdev(q_vector->adapter)) {
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IGB_DCA
|
#ifdef CONFIG_IGB_DCA
|
||||||
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
||||||
igb_update_dca(q_vector);
|
igb_update_dca(q_vector);
|
||||||
|
|
|
||||||
|
|
@ -1034,8 +1034,7 @@ static void igb_reset_q_vector(struct igb_adapter *adapter, int v_idx)
|
||||||
if (q_vector->rx.ring)
|
if (q_vector->rx.ring)
|
||||||
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
|
||||||
|
|
||||||
if (!get_ecdev(adapter))
|
netif_napi_del(&q_vector->napi);
|
||||||
netif_napi_del(&q_vector->napi);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1220,9 +1219,7 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* initialize NAPI */
|
/* initialize NAPI */
|
||||||
if (!get_ecdev(adapter)) {
|
netif_napi_add(adapter->netdev, &q_vector->napi, igb_poll);
|
||||||
netif_napi_add(adapter->netdev, &q_vector->napi, igb_poll);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* tie q_vector and adapter together */
|
/* tie q_vector and adapter together */
|
||||||
adapter->q_vector[v_idx] = q_vector;
|
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;
|
bool clean_complete = true;
|
||||||
int work_done = 0;
|
int work_done = 0;
|
||||||
|
|
||||||
|
if (get_ecdev(q_vector->adapter)) {
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IGB_DCA
|
#ifdef CONFIG_IGB_DCA
|
||||||
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
if (q_vector->adapter->flags & IGB_FLAG_DCA_ENABLED)
|
||||||
igb_update_dca(q_vector);
|
igb_update_dca(q_vector);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue