Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7570a653 authored by Alexander Duyck's avatar Alexander Duyck Committed by Greg Kroah-Hartman
Browse files

i40e: Do not enable NAPI on q_vectors that have no rings




[ 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.

Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cec966b2
Loading
Loading
Loading
Loading
+12 −4
Original line number Original line Diff line number Diff line
@@ -3814,8 +3814,12 @@ static void i40e_napi_enable_all(struct i40e_vsi *vsi)
	if (!vsi->netdev)
	if (!vsi->netdev)
		return;
		return;


	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) {
		napi_enable(&vsi->q_vectors[q_idx]->napi);
		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);
	}
}
}


/**
/**
@@ -3829,8 +3833,12 @@ static void i40e_napi_disable_all(struct i40e_vsi *vsi)
	if (!vsi->netdev)
	if (!vsi->netdev)
		return;
		return;


	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) {
		napi_disable(&vsi->q_vectors[q_idx]->napi);
		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);
	}
}
}


/**
/**