[dpdk-stable] [PATCH v2 1/4] raw/ifpga/base: fix bug in IRQ functions
Xu, Rosen
rosen.xu at intel.com
Tue Sep 29 03:42:15 CEST 2020
Hi,
> -----Original Message-----
> From: Zhang, Tianfei <tianfei.zhang at intel.com>
> Sent: Monday, September 28, 2020 9:40
> To: dev at dpdk.org; Xu, Rosen <rosen.xu at intel.com>; Huang, Wei
> <wei.huang at intel.com>
> Cc: stable at dpdk.org; Zhang, Tianfei <tianfei.zhang at intel.com>
> Subject: [PATCH v2 1/4] raw/ifpga/base: fix bug in IRQ functions
>
> From: Wei Huang <wei.huang at intel.com>
>
> Using a pointer instead of using a structure and point to ifpga_irq_handle[] in
> register and unregister interrupt functions.
> Treat positive return value of ifpga_unregister_msix_irq() as successful.
>
> Fixes: e0a1aafe ("raw/ifpga: introduce IRQ functions")
> Cc: stable at dpdk.org
>
> Signed-off-by: Wei Huang <wei.huang at intel.com>
> Signed-off-by: Tianfei zhang <tianfei.zhang at intel.com>
> ---
> v2: fix typo in commit log
> ---
> drivers/raw/ifpga/ifpga_rawdev.c | 41 ++++++++++++++++++--------------
> 1 file changed, 23 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/raw/ifpga/ifpga_rawdev.c
> b/drivers/raw/ifpga/ifpga_rawdev.c
> index a50173264..374a7ff1d 100644
> --- a/drivers/raw/ifpga/ifpga_rawdev.c
> +++ b/drivers/raw/ifpga/ifpga_rawdev.c
> @@ -1337,17 +1337,18 @@ int
> ifpga_unregister_msix_irq(enum ifpga_irq_type type,
> int vec_start, rte_intr_callback_fn handler, void *arg) {
> - struct rte_intr_handle intr_handle;
> + struct rte_intr_handle *intr_handle;
>
> if (type == IFPGA_FME_IRQ)
> - intr_handle = ifpga_irq_handle[0];
> + intr_handle = &ifpga_irq_handle[0];
> else if (type == IFPGA_AFU_IRQ)
> - intr_handle = ifpga_irq_handle[vec_start + 1];
> + intr_handle = &ifpga_irq_handle[vec_start + 1];
> + else
> + return 0;
>
> - rte_intr_efd_disable(&intr_handle);
> + rte_intr_efd_disable(intr_handle);
>
> - return rte_intr_callback_unregister(&intr_handle,
> - handler, arg);
> + return rte_intr_callback_unregister(intr_handle, handler, arg);
> }
>
> int
> @@ -1357,7 +1358,7 @@ ifpga_register_msix_irq(struct rte_rawdev *dev,
> int port_id,
> void *arg)
> {
> int ret;
> - struct rte_intr_handle intr_handle;
> + struct rte_intr_handle *intr_handle;
> struct opae_adapter *adapter;
> struct opae_manager *mgr;
> struct opae_accelerator *acc;
> @@ -1371,26 +1372,29 @@ ifpga_register_msix_irq(struct rte_rawdev *dev,
> int port_id,
> return -ENODEV;
>
> if (type == IFPGA_FME_IRQ) {
> - intr_handle = ifpga_irq_handle[0];
> + intr_handle = &ifpga_irq_handle[0];
> count = 1;
> - } else if (type == IFPGA_AFU_IRQ)
> - intr_handle = ifpga_irq_handle[vec_start + 1];
> + } else if (type == IFPGA_AFU_IRQ) {
> + intr_handle = &ifpga_irq_handle[vec_start + 1];
> + } else {
> + return -EINVAL;
> + }
>
> - intr_handle.type = RTE_INTR_HANDLE_VFIO_MSIX;
> + intr_handle->type = RTE_INTR_HANDLE_VFIO_MSIX;
>
> - ret = rte_intr_efd_enable(&intr_handle, count);
> + ret = rte_intr_efd_enable(intr_handle, count);
> if (ret)
> return -ENODEV;
>
> - intr_handle.fd = intr_handle.efds[0];
> + intr_handle->fd = intr_handle->efds[0];
>
> IFPGA_RAWDEV_PMD_DEBUG("register %s irq, vfio_fd=%d,
> fd=%d\n",
> - name, intr_handle.vfio_dev_fd,
> - intr_handle.fd);
> + name, intr_handle->vfio_dev_fd,
> + intr_handle->fd);
>
> if (type == IFPGA_FME_IRQ) {
> struct fpga_fme_err_irq_set err_irq_set;
> - err_irq_set.evtfd = intr_handle.efds[0];
> + err_irq_set.evtfd = intr_handle->efds[0];
>
> ret = opae_manager_ifpga_set_err_irq(mgr, &err_irq_set);
> if (ret)
> @@ -1400,13 +1404,14 @@ ifpga_register_msix_irq(struct rte_rawdev *dev,
> int port_id,
> if (!acc)
> return -EINVAL;
>
> - ret = opae_acc_set_irq(acc, vec_start, count,
> intr_handle.efds);
> + ret = opae_acc_set_irq(acc, vec_start, count,
> + intr_handle->efds);
> if (ret)
> return -EINVAL;
> }
>
> /* register interrupt handler using DPDK API */
> - ret = rte_intr_callback_register(&intr_handle,
> + ret = rte_intr_callback_register(intr_handle,
> handler, (void *)arg);
> if (ret)
> return -EINVAL;
> --
> 2.17.1
Acked-by: Rosen Xu <rosen.xu at intel.com>
More information about the stable
mailing list