From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id A2F97A04B1 for ; Wed, 23 Sep 2020 10:30:24 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 765961DC58; Wed, 23 Sep 2020 10:30:24 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 078F01DC47; Wed, 23 Sep 2020 10:30:20 +0200 (CEST) IronPort-SDR: h9ViL33VRr+OKao1Dq32VY1zoZBGOaxrNtPSwJp8/VZSqePwNbzHAlFy4Nmr2Kjz4p0s8BE35n UinFMUwuQALg== X-IronPort-AV: E=McAfee;i="6000,8403,9752"; a="160110417" X-IronPort-AV: E=Sophos;i="5.77,293,1596524400"; d="scan'208";a="160110417" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2020 01:30:20 -0700 IronPort-SDR: bI2ONINed3Z4+484ys3R8HUqRyRBqHe31eLbcgKEtSexKVXDCwh9/xDjUUaVZ6ZoYzcRBGn69B Q8sEPMSbaIvQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,293,1596524400"; d="scan'208";a="454814776" Received: from unknown (HELO sh_lab5_1.sh.intel.com) ([10.238.175.103]) by orsmga004.jf.intel.com with ESMTP; 23 Sep 2020 01:30:17 -0700 From: Tianfei zhang To: dev@dpdk.org, wei.huang@intel.com Cc: rosen.xu@intel.com, stable@dpdk.org, Tianfei zhang Date: Wed, 23 Sep 2020 03:30:10 -0400 Message-Id: <1600846213-18093-2-git-send-email-tianfei.zhang@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1600846213-18093-1-git-send-email-tianfei.zhang@intel.com> References: <1600846213-18093-1-git-send-email-tianfei.zhang@intel.com> Subject: [dpdk-stable] [PATCH v4 1/4] raw/ifpga/base: fix bug in IRQ functions X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" From: Wei Huang 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 sucessful. Fixes: e0a1aafe ("raw/ifpga: introduce IRQ functions") Cc: stable@dpdk.org Signed-off-by: Wei Huang Signed-off-by: Tianfei zhang --- 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