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 4B9E5A04DE; Fri, 23 Oct 2020 12:00:04 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CFA3A72EC; Fri, 23 Oct 2020 12:00:00 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 0312A72EA; Fri, 23 Oct 2020 11:59:57 +0200 (CEST) IronPort-SDR: 1kZrzaKUTPpip3fa6KjJPLuHz0JlQMGZe2uR+f2mKyredunmcCQOrifmvVJxr0PwuUUjHnnLJJ 3nt0xtBfyr1A== X-IronPort-AV: E=McAfee;i="6000,8403,9782"; a="229288203" X-IronPort-AV: E=Sophos;i="5.77,407,1596524400"; d="scan'208";a="229288203" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Oct 2020 02:59:54 -0700 IronPort-SDR: oASaPYkg6qM4q5zVzADzZynK8OjaMTViEjpNNl1NsqNh48rq7yxMmTWJamszMFI5Ul3rV4oR5F adtOyDnZHTeg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,407,1596524400"; d="scan'208";a="359556496" Received: from unknown (HELO sh_lab5_1.sh.intel.com) ([10.238.175.190]) by FMSMGA003.fm.intel.com with ESMTP; 23 Oct 2020 02:59:53 -0700 From: Tianfei zhang To: dev@dpdk.org , rosen.xu@intel.com, qi.z.zhang@intel.com Cc: Wei Huang , stable@dpdk.org, Tianfei zhang Date: Fri, 23 Oct 2020 04:59:55 -0400 Message-Id: <1603443599-7356-2-git-send-email-tianfei.zhang@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1603443599-7356-1-git-send-email-tianfei.zhang@intel.com> References: <1600846213-18093-1-git-send-email-tianfei.zhang@intel.com> <1603443599-7356-1-git-send-email-tianfei.zhang@intel.com> Subject: [dpdk-dev] [PATCH v3 1/5] raw/ifpga/base: fix interrupt handler instance usage X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Wei Huang Interrupt handler copied to the local 'intr_handle' variable by value before passing it to IRQ functions. This leads IRQ functions update the local variable instead of 'ifpga_irq_handle'. Instead, using 'intr_handle' local variable as pointer to 'ifpga_irq_handle' as intended. Fixes: e0a1aafe ("raw/ifpga: introduce IRQ functions") Cc: stable@dpdk.org Signed-off-by: Wei Huang Signed-off-by: Tianfei zhang --- v2: fix typo in commit log v3: slit into 2 patches, one is fix the pointer variable, other is fix the return value. --- drivers/raw/ifpga/ifpga_rawdev.c | 34 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c index a50173264..76b0f8a5b 100644 --- a/drivers/raw/ifpga/ifpga_rawdev.c +++ b/drivers/raw/ifpga/ifpga_rawdev.c @@ -1337,17 +1337,16 @@ 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]; - 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 +1356,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 +1370,26 @@ 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]; + intr_handle = &ifpga_irq_handle[vec_start + 1]; - 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 +1399,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