eal/linux: forbid enabling zero interrupt vector
The patch adds condition check to avoid enable nothing. In disable state, both max_intr and nb_efd are zero. Signed-off-by: Cunming Liang <cunming.liang@intel.com> Acked-by: David Marchand <david.marchand@6wind.com>
This commit is contained in:
parent
fe81efaf1d
commit
7eeed91448
@ -85,8 +85,9 @@ rte_intr_rx_ctl(struct rte_intr_handle *intr_handle,
|
|||||||
*
|
*
|
||||||
* @param intr_handle
|
* @param intr_handle
|
||||||
* Pointer to the interrupt handle.
|
* Pointer to the interrupt handle.
|
||||||
* @param nb_vec
|
* @param nb_efd
|
||||||
* Number of interrupt vector trying to enable.
|
* Number of interrupt vector trying to enable.
|
||||||
|
* The value 0 is not allowed.
|
||||||
* @return
|
* @return
|
||||||
* - On success, zero.
|
* - On success, zero.
|
||||||
* - On failure, a negative value.
|
* - On failure, a negative value.
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#include <sys/signalfd.h>
|
#include <sys/signalfd.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/eventfd.h>
|
#include <sys/eventfd.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include <rte_common.h>
|
#include <rte_common.h>
|
||||||
#include <rte_interrupts.h>
|
#include <rte_interrupts.h>
|
||||||
@ -1148,6 +1149,8 @@ rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd)
|
|||||||
int fd;
|
int fd;
|
||||||
uint32_t n = RTE_MIN(nb_efd, (uint32_t)RTE_MAX_RXTX_INTR_VEC_ID);
|
uint32_t n = RTE_MIN(nb_efd, (uint32_t)RTE_MAX_RXTX_INTR_VEC_ID);
|
||||||
|
|
||||||
|
assert(nb_efd != 0);
|
||||||
|
|
||||||
if (intr_handle->type == RTE_INTR_HANDLE_VFIO_MSIX) {
|
if (intr_handle->type == RTE_INTR_HANDLE_VFIO_MSIX) {
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
|
fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
|
||||||
@ -1204,5 +1207,8 @@ rte_intr_dp_is_en(struct rte_intr_handle *intr_handle)
|
|||||||
int
|
int
|
||||||
rte_intr_allow_others(struct rte_intr_handle *intr_handle)
|
rte_intr_allow_others(struct rte_intr_handle *intr_handle)
|
||||||
{
|
{
|
||||||
return !!(intr_handle->max_intr - intr_handle->nb_efd);
|
if (!rte_intr_dp_is_en(intr_handle))
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return !!(intr_handle->max_intr - intr_handle->nb_efd);
|
||||||
}
|
}
|
||||||
|
@ -176,8 +176,9 @@ rte_intr_rx_ctl(struct rte_intr_handle *intr_handle,
|
|||||||
*
|
*
|
||||||
* @param intr_handle
|
* @param intr_handle
|
||||||
* Pointer to the interrupt handle.
|
* Pointer to the interrupt handle.
|
||||||
* @param nb_vec
|
* @param nb_efd
|
||||||
* Number of interrupt vector trying to enable.
|
* Number of interrupt vector trying to enable.
|
||||||
|
* The value 0 is not allowed.
|
||||||
* @return
|
* @return
|
||||||
* - On success, zero.
|
* - On success, zero.
|
||||||
* - On failure, a negative value.
|
* - On failure, a negative value.
|
||||||
|
Loading…
Reference in New Issue
Block a user