X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Ftap%2Ftap_intr.c;h=56c343aceaff3c32f92e077b93f29e0dd4493e53;hb=0663a84524e5c63cb737cd723b4ea33493e8d17a;hp=b0e1991471c25e1f8b87623c5da584d84a8a6f84;hpb=4870a8cdd9687c62b2c9bf71584b445b4a4257e8;p=dpdk.git diff --git a/drivers/net/tap/tap_intr.c b/drivers/net/tap/tap_intr.c index b0e1991471..56c343acea 100644 --- a/drivers/net/tap/tap_intr.c +++ b/drivers/net/tap/tap_intr.c @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright 2018 Mellanox Technologies, Ltd. + * Copyright 2018 Mellanox Technologies, Ltd */ /** @@ -7,7 +7,6 @@ * Interrupts handling for tap driver. */ -#include #include #include #include @@ -30,12 +29,13 @@ static void tap_rx_intr_vec_uninstall(struct rte_eth_dev *dev) { struct pmd_internals *pmd = dev->data->dev_private; - struct rte_intr_handle *intr_handle = &pmd->intr_handle; + struct rte_intr_handle *intr_handle = pmd->intr_handle; rte_intr_free_epoll_fd(intr_handle); - free(intr_handle->intr_vec); - intr_handle->intr_vec = NULL; - intr_handle->nb_efd = 0; + rte_intr_vec_list_free(intr_handle); + rte_intr_nb_efd_set(intr_handle, 0); + + rte_intr_instance_free(intr_handle); } /** @@ -51,18 +51,19 @@ static int tap_rx_intr_vec_install(struct rte_eth_dev *dev) { struct pmd_internals *pmd = dev->data->dev_private; + struct pmd_process_private *process_private = dev->process_private; unsigned int rxqs_n = pmd->dev->data->nb_rx_queues; - struct rte_intr_handle *intr_handle = &pmd->intr_handle; + struct rte_intr_handle *intr_handle = pmd->intr_handle; unsigned int n = RTE_MIN(rxqs_n, (uint32_t)RTE_MAX_RXTX_INTR_VEC_ID); unsigned int i; unsigned int count = 0; if (!dev->data->dev_conf.intr_conf.rxq) return 0; - intr_handle->intr_vec = malloc(sizeof(intr_handle->intr_vec[rxqs_n])); - if (intr_handle->intr_vec == NULL) { + + if (rte_intr_vec_list_alloc(intr_handle, NULL, rxqs_n)) { rte_errno = ENOMEM; - RTE_LOG(ERR, PMD, + TAP_LOG(ERR, "failed to allocate memory for interrupt vector," " Rx interrupts will not be supported"); return -rte_errno; @@ -71,21 +72,25 @@ tap_rx_intr_vec_install(struct rte_eth_dev *dev) struct rx_queue *rxq = pmd->dev->data->rx_queues[i]; /* Skip queues that cannot request interrupts. */ - if (!rxq || rxq->fd <= 0) { + if (!rxq || process_private->rxq_fds[i] == -1) { /* Use invalid intr_vec[] index to disable entry. */ - intr_handle->intr_vec[i] = - RTE_INTR_VEC_RXTX_OFFSET + - RTE_MAX_RXTX_INTR_VEC_ID; + if (rte_intr_vec_list_index_set(intr_handle, i, + RTE_INTR_VEC_RXTX_OFFSET + RTE_MAX_RXTX_INTR_VEC_ID)) + return -rte_errno; continue; } - intr_handle->intr_vec[i] = RTE_INTR_VEC_RXTX_OFFSET + count; - intr_handle->efds[count] = rxq->fd; + if (rte_intr_vec_list_index_set(intr_handle, i, + RTE_INTR_VEC_RXTX_OFFSET + count)) + return -rte_errno; + if (rte_intr_efds_index_set(intr_handle, count, + process_private->rxq_fds[i])) + return -rte_errno; count++; } if (!count) tap_rx_intr_vec_uninstall(dev); - else - intr_handle->nb_efd = count; + else if (rte_intr_nb_efd_set(intr_handle, count)) + return -rte_errno; return 0; }