Patch "i40e: Do not enable NAPI on q_vectors that have no rings" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
i40e: Do not enable NAPI on q_vectors that have no rings
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
i40e-do-not-enable-napi-on-q_vectors-that-have-no-rings.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Dec 21 10:35:49 CET 2017
From: Alexander Duyck <[email protected]>
Date: Fri, 24 Mar 2017 15:01:42 -0700
Subject: i40e: Do not enable NAPI on q_vectors that have no rings
From: Alexander Duyck <[email protected]>
[ Upstream commit 13a8cd191a2b470cfd435b3b57dbd21aa65ff78c ]
When testing the epoll w/ busy poll code I found that I could get into a state where the i40e driver had q_vectors w/ active NAPI that had no rings. This was resulting in a divide by zero error. To correct it I am updating the driver code so that we only support NAPI on q_vectors that have 1 or more rings allocated to them.
--- drivers/net/ethernet/intel/i40e/i40e_main.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_main.c +12 -4
@@ -4201,8 +4201,12 @@ static void i40e_napi_enable_all(structif (!vsi->netdev)return ; -for (q_idx =0 ; q_idx < vsi->num_q_vectors; q_idx++) -napi_enable (&vsi->q_vectors[q_idx]->napi); +for (q_idx =0 ; q_idx < vsi->num_q_vectors; q_idx++) { +struct i40e_q_vector *q_vector = vsi->q_vectors[q_idx]; + +if (q_vector->rx.ring || q_vector->tx.ring) +napi_enable (&q_vector->napi); + } }/**
@@ -4216,8 +4220,12 @@ static void i40e_napi_disable_all(structif (!vsi->netdev)return ; -for (q_idx =0 ; q_idx < vsi->num_q_vectors; q_idx++) -napi_disable (&vsi->q_vectors[q_idx]->napi); +for (q_idx =0 ; q_idx < vsi->num_q_vectors; q_idx++) { +struct i40e_q_vector *q_vector = vsi->q_vectors[q_idx]; + +if (q_vector->rx.ring || q_vector->tx.ring) +napi_disable (&q_vector->napi); + } }/**
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/i40e-do-not-enable-napi-on-q_vectors-that-have-no-rings.patch queue-4.4/net-do-not-allow-negative-values-for-busy_read-and-busy_poll-sysctl-interfaces.patch