From patchwork Wed Nov 27 10:22:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil Kumar Kori X-Patchwork-Id: 63337 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8B8A7A04E0; Wed, 27 Nov 2019 11:23:27 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DD8A37CBC; Wed, 27 Nov 2019 11:23:26 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 629675B32 for ; Wed, 27 Nov 2019 11:23:25 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id xARAJXOI014912; Wed, 27 Nov 2019 02:23:24 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=bDM/ay/FunPirYZsPbV7xHgHz5Fm0IPXn+V+m3iUt9k=; b=Gz5OZvMb9z5+2x6T6coi79CR20rKf5dAyJ1KnldtiS6Vo2MNSEGOI2oAVknwDbyGa1pY 8+zmhd6Hx8yIkI4fBiGB8uMXJ9AaXowlnh5eBlItwqAwnARFn6fhZUivvCC6q/Z4HSwB UawEAp5VuaUJRnB9dwotChTHmr8s9CW7w81vjSCSqeFdYaVVNLHtKBaKr5PvHYXk6WO/ meEigVv+UbLJxSpH7BNbAuHV3VJleiTAgf/V8wwqO2RKJpWKQLSjVA7CtjlTxuQA7rbQ 69A36E7ZhVRywf2qQgJuc3CBLX9V+mWgR7bZA7huOheuQI8XXfYxg/f8YtFx5LBpEOjm jA== Received: from sc-exch04.marvell.com ([199.233.58.184]) by mx0b-0016f401.pphosted.com with ESMTP id 2whd08jasc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Wed, 27 Nov 2019 02:23:24 -0800 Received: from SC-EXCH01.marvell.com (10.93.176.81) by SC-EXCH04.marvell.com (10.93.176.84) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 27 Nov 2019 02:23:21 -0800 Received: from maili.marvell.com (10.93.176.43) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Wed, 27 Nov 2019 02:23:21 -0800 Received: from localhost.localdomain (unknown [10.28.34.200]) by maili.marvell.com (Postfix) with ESMTP id 672B63F703F; Wed, 27 Nov 2019 02:23:20 -0800 (PST) From: Sunil Kumar Kori To: Bruce Richardson CC: , Sunil Kumar Kori , Harman Kalra Date: Wed, 27 Nov 2019 15:52:19 +0530 Message-ID: <20191127102222.31940-1-skori@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191126061525.28507-1-skori@marvell.com> References: <20191126061525.28507-1-skori@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,18.0.572 definitions=2019-11-27_02:2019-11-27,2019-11-27 signatures=0 Subject: [dpdk-dev] [PATCH v2 1/4] eal: add API to check if its interrupt context 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" Added an API to check if current execution is in interrupt context. This will be helpful to handle nested interrupt cases. Signed-off-by: Harman Kalra Signed-off-by: Sunil Kumar Kori --- v2: - Rebased patch on 19.11-rc4 lib/librte_eal/common/include/rte_interrupts.h | 15 +++++++++++++++ lib/librte_eal/freebsd/eal/eal_interrupts.c | 5 +++++ lib/librte_eal/linux/eal/eal_interrupts.c | 5 +++++ lib/librte_eal/rte_eal_version.map | 1 + 4 files changed, 26 insertions(+) diff --git a/lib/librte_eal/common/include/rte_interrupts.h b/lib/librte_eal/common/include/rte_interrupts.h index e3b406abc..0a82e28a8 100644 --- a/lib/librte_eal/common/include/rte_interrupts.h +++ b/lib/librte_eal/common/include/rte_interrupts.h @@ -138,6 +138,21 @@ int rte_intr_disable(const struct rte_intr_handle *intr_handle); __rte_experimental int rte_intr_ack(const struct rte_intr_handle *intr_handle); +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice + * + * Check if currently executing in interrupt context + * + * @return + * - positive in case of interrupt context + * - zero in case of process context + * - negative if unsuccessful + */ +__rte_experimental +int +rte_thread_is_intr(void); + #ifdef __cplusplus } #endif diff --git a/lib/librte_eal/freebsd/eal/eal_interrupts.c b/lib/librte_eal/freebsd/eal/eal_interrupts.c index f6831b790..ce2a27b4a 100644 --- a/lib/librte_eal/freebsd/eal/eal_interrupts.c +++ b/lib/librte_eal/freebsd/eal/eal_interrupts.c @@ -671,3 +671,8 @@ rte_intr_free_epoll_fd(struct rte_intr_handle *intr_handle) { RTE_SET_USED(intr_handle); } + +int rte_thread_is_intr(void) +{ + return pthread_equal(intr_thread, pthread_self()); +} diff --git a/lib/librte_eal/linux/eal/eal_interrupts.c b/lib/librte_eal/linux/eal/eal_interrupts.c index 1955324d3..c00f5a575 100644 --- a/lib/librte_eal/linux/eal/eal_interrupts.c +++ b/lib/librte_eal/linux/eal/eal_interrupts.c @@ -1487,3 +1487,8 @@ rte_intr_cap_multiple(struct rte_intr_handle *intr_handle) return 0; } + +int rte_thread_is_intr(void) +{ + return pthread_equal(intr_thread, pthread_self()); +} diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map index e38d02530..397e787cf 100644 --- a/lib/librte_eal/rte_eal_version.map +++ b/lib/librte_eal/rte_eal_version.map @@ -332,4 +332,5 @@ EXPERIMENTAL { # added in 19.11 rte_log_get_stream; rte_mcfg_get_single_file_segments; + rte_thread_is_intr; }; From patchwork Wed Nov 27 10:22:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil Kumar Kori X-Patchwork-Id: 63338 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id BCC7EA04E0; Wed, 27 Nov 2019 11:23:34 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CCC681B948; Wed, 27 Nov 2019 11:23:29 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 9C21B5B32 for ; Wed, 27 Nov 2019 11:23:26 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id xARAJhFS015050 for ; Wed, 27 Nov 2019 02:23:26 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=cVjWYi0CYtmKsv7rwN6YhbKELyww7dOdBpJWlm5N1mU=; b=AxHxyT7KYgeGRgqSAy5nLbJUs0b7k2WoyQKheQpYve3kzfyqCkOB5JlK66hDKX30Rlxm h0Boh857kfVIP0QaEo/EZ1AoqthTTNtIVxxAti417X+0+vSeT65ns0tioheF4d+oOv6m AATo598jwuyd5ke3B2WzFs7orMUf0wITOm2ms6prB53GfSj7i8y8TRjyag8k+oCkyjV3 a7yBqBM4Ix7s0h1ToTW933gkaiFgSVP8+KguLDf25tETwq6czW0P8DP6YAgEQbRdnkiz 6iRPGrHG0fzwx/HIFXyNxrdlbSBw/qbdCobPWA3JydRlhS1eDQzJrkfFTt18mcjBeKVE fQ== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0b-0016f401.pphosted.com with ESMTP id 2whd08jask-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Wed, 27 Nov 2019 02:23:25 -0800 Received: from SC-EXCH01.marvell.com (10.93.176.81) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 27 Nov 2019 02:23:24 -0800 Received: from maili.marvell.com (10.93.176.43) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Wed, 27 Nov 2019 02:23:24 -0800 Received: from localhost.localdomain (unknown [10.28.34.200]) by maili.marvell.com (Postfix) with ESMTP id 2F4293F7040; Wed, 27 Nov 2019 02:23:21 -0800 (PST) From: Sunil Kumar Kori To: Jerin Jacob , Nithin Dabilpuram , Vamsi Attunuru CC: , Sunil Kumar Kori Date: Wed, 27 Nov 2019 15:52:20 +0530 Message-ID: <20191127102222.31940-2-skori@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191127102222.31940-1-skori@marvell.com> References: <20191126061525.28507-1-skori@marvell.com> <20191127102222.31940-1-skori@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,18.0.572 definitions=2019-11-27_02:2019-11-27,2019-11-27 signatures=0 Subject: [dpdk-dev] [PATCH v2 2/4] common/octeontx2: add interrupt offset to mbox structure 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" mbox response are triggered at bar2 + RVU_PF_INT or bar2 + RVU_VF_INT, depending upon the device. To process these interrupts different irq handlers are installed. To unify it, added offset field into mbox structure which is initialized with RVU_PF_INT or RVU_VF_INT at the time of otx2_mbox_init. Signed-off-by: Sunil Kumar Kori --- v2: * Rebased patch on 19.11-rc4 drivers/common/octeontx2/otx2_dev.c | 14 ++++++++++---- drivers/common/octeontx2/otx2_mbox.c | 5 +++-- drivers/common/octeontx2/otx2_mbox.h | 5 +++-- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/common/octeontx2/otx2_dev.c b/drivers/common/octeontx2/otx2_dev.c index 0fc799e4a..6f29d6108 100644 --- a/drivers/common/octeontx2/otx2_dev.c +++ b/drivers/common/octeontx2/otx2_dev.c @@ -900,6 +900,7 @@ otx2_dev_priv_init(struct rte_pci_device *pci_dev, void *otx2_dev) { int up_direction = MBOX_DIR_PFAF_UP; int rc, direction = MBOX_DIR_PFAF; + uint64_t intr_offset = RVU_PF_INT; struct otx2_dev *dev = otx2_dev; uintptr_t bar2, bar4; uint64_t bar4_addr; @@ -924,15 +925,18 @@ otx2_dev_priv_init(struct rte_pci_device *pci_dev, void *otx2_dev) if (otx2_dev_is_vf(dev)) { direction = MBOX_DIR_VFPF; up_direction = MBOX_DIR_VFPF_UP; + intr_offset = RVU_VF_INT; } /* Initialize the local mbox */ - rc = otx2_mbox_init(&dev->mbox_local, bar4, bar2, direction, 1); + rc = otx2_mbox_init(&dev->mbox_local, bar4, bar2, direction, 1, + intr_offset); if (rc) goto error; dev->mbox = &dev->mbox_local; - rc = otx2_mbox_init(&dev->mbox_up, bar4, bar2, up_direction, 1); + rc = otx2_mbox_init(&dev->mbox_up, bar4, bar2, up_direction, 1, + intr_offset); if (rc) goto error; @@ -967,13 +971,15 @@ otx2_dev_priv_init(struct rte_pci_device *pci_dev, void *otx2_dev) } /* Init mbox object */ rc = otx2_mbox_init(&dev->mbox_vfpf, (uintptr_t)hwbase, - bar2, MBOX_DIR_PFVF, pci_dev->max_vfs); + bar2, MBOX_DIR_PFVF, pci_dev->max_vfs, + intr_offset); if (rc) goto iounmap; /* PF -> VF UP messages */ rc = otx2_mbox_init(&dev->mbox_vfpf_up, (uintptr_t)hwbase, - bar2, MBOX_DIR_PFVF_UP, pci_dev->max_vfs); + bar2, MBOX_DIR_PFVF_UP, pci_dev->max_vfs, + intr_offset); if (rc) goto mbox_fini; } diff --git a/drivers/common/octeontx2/otx2_mbox.c b/drivers/common/octeontx2/otx2_mbox.c index c359bf42f..ad8e0c3aa 100644 --- a/drivers/common/octeontx2/otx2_mbox.c +++ b/drivers/common/octeontx2/otx2_mbox.c @@ -59,12 +59,13 @@ otx2_mbox_reset(struct otx2_mbox *mbox, int devid) } int -otx2_mbox_init(struct otx2_mbox *mbox, uintptr_t hwbase, - uintptr_t reg_base, int direction, int ndevs) +otx2_mbox_init(struct otx2_mbox *mbox, uintptr_t hwbase, uintptr_t reg_base, + int direction, int ndevs, uint64_t intr_offset) { struct otx2_mbox_dev *mdev; int devid; + mbox->intr_offset = intr_offset; mbox->reg_base = reg_base; mbox->hwbase = hwbase; diff --git a/drivers/common/octeontx2/otx2_mbox.h b/drivers/common/octeontx2/otx2_mbox.h index e0e4e2f63..162d12468 100644 --- a/drivers/common/octeontx2/otx2_mbox.h +++ b/drivers/common/octeontx2/otx2_mbox.h @@ -73,6 +73,7 @@ struct otx2_mbox { uint16_t tx_size; /* Size of Tx region */ uint16_t ndevs; /* The number of peers */ struct otx2_mbox_dev *dev; + uint64_t intr_offset; /* offset to interrupt register */ }; /* Header which precedes all mbox messages */ @@ -1562,8 +1563,8 @@ struct tim_enable_rsp { const char *otx2_mbox_id2name(uint16_t id); int otx2_mbox_id2size(uint16_t id); void otx2_mbox_reset(struct otx2_mbox *mbox, int devid); -int otx2_mbox_init(struct otx2_mbox *mbox, uintptr_t hwbase, - uintptr_t reg_base, int direction, int ndevs); +int otx2_mbox_init(struct otx2_mbox *mbox, uintptr_t hwbase, uintptr_t reg_base, + int direction, int ndevsi, uint64_t intr_offset); void otx2_mbox_fini(struct otx2_mbox *mbox); void otx2_mbox_msg_send(struct otx2_mbox *mbox, int devid); int otx2_mbox_wait_for_rsp(struct otx2_mbox *mbox, int devid); From patchwork Wed Nov 27 10:22:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil Kumar Kori X-Patchwork-Id: 63339 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id D476EA04E0; Wed, 27 Nov 2019 11:23:41 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7C2E01BE89; Wed, 27 Nov 2019 11:23:31 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id C5C8B1B943 for ; Wed, 27 Nov 2019 11:23:28 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id xARAMWQU013251 for ; Wed, 27 Nov 2019 02:23:27 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=zdeAgB63aoJB8WTcwU5qmcokz2V3ZWRgaurDiMCKVcU=; b=Kou76oP27IPLjZ5ODMIXm4+8FdMNn3ZzAt+65FWnJ/OE7223LUayHKcBTWaKu7+ABMDf DA3rbZSxbRuknUMtzpfNlGKcZ6MUowwhK+kN1O634ami9A8bJS9xUa3GzsHAlEM22Ji4 at5+xJDcoW5/qs4BNg7Ra0u+DBZZZLcD/ZzT+KzLo/HXdIL1ce1+LY0fODgyH1nM+7xC 3T8tk2+ZLlE/7DIi2S2lZzpK6OphRJadXH1UvWdvgB61hpv6yHbFlC8QZV6N252931U6 FhIXkKrE11bWnG+3C68JOWn8ynEnWgD4u3XULcBBf55WadRtf4B1fJRC6Cb3IMNdlfZn Mw== Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0a-0016f401.pphosted.com with ESMTP id 2whmdy8pvw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Wed, 27 Nov 2019 02:23:27 -0800 Received: from SC-EXCH01.marvell.com (10.93.176.81) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 27 Nov 2019 02:23:26 -0800 Received: from maili.marvell.com (10.93.176.43) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Wed, 27 Nov 2019 02:23:26 -0800 Received: from localhost.localdomain (unknown [10.28.34.200]) by maili.marvell.com (Postfix) with ESMTP id 9A9DE3F703F; Wed, 27 Nov 2019 02:23:24 -0800 (PST) From: Sunil Kumar Kori To: Jerin Jacob , Nithin Dabilpuram , Vamsi Attunuru CC: , Sunil Kumar Kori Date: Wed, 27 Nov 2019 15:52:21 +0530 Message-ID: <20191127102222.31940-3-skori@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191127102222.31940-1-skori@marvell.com> References: <20191126061525.28507-1-skori@marvell.com> <20191127102222.31940-1-skori@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,18.0.572 definitions=2019-11-27_02:2019-11-27,2019-11-27 signatures=0 Subject: [dpdk-dev] [PATCH v2 3/4] common/octeontx2: add polling based response mbox message 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" Currently otx2_mbox_get_rsp get response once AF driver interrupts after completion. But this funciton will get into deadlock if called in another interrupt context. To avoid it, implemented another version of this function which polls on dedicated memory for a given timeout. Also after clearing interrupt, there could UP messages available for processing. So irq handler must check mbox messages. Signed-off-by: Sunil Kumar Kori --- v2: - Included Makefile and meson build changes. - Rebased patch on 19.11-rc4 drivers/common/octeontx2/Makefile | 2 + drivers/common/octeontx2/meson.build | 2 + drivers/common/octeontx2/otx2_mbox.c | 58 +++++++++++++++++++ drivers/common/octeontx2/otx2_mbox.h | 7 +++ .../rte_common_octeontx2_version.map | 7 +++ 5 files changed, 76 insertions(+) diff --git a/drivers/common/octeontx2/Makefile b/drivers/common/octeontx2/Makefile index eaff29433..b1c1792fb 100644 --- a/drivers/common/octeontx2/Makefile +++ b/drivers/common/octeontx2/Makefile @@ -22,6 +22,8 @@ CFLAGS += -diag-disable 2259 endif endif +CFLAGS += -DALLOW_EXPERIMENTAL_API + EXPORT_MAP := rte_common_octeontx2_version.map # diff --git a/drivers/common/octeontx2/meson.build b/drivers/common/octeontx2/meson.build index b79145788..a03c6a39b 100644 --- a/drivers/common/octeontx2/meson.build +++ b/drivers/common/octeontx2/meson.build @@ -8,6 +8,8 @@ sources= files('otx2_dev.c', 'otx2_common.c', ) +allow_experimental_apis = true + extra_flags = [] # This integrated controller runs only on a arm64 machine, remove 32bit warnings if not dpdk_conf.get('RTE_ARCH_64') diff --git a/drivers/common/octeontx2/otx2_mbox.c b/drivers/common/octeontx2/otx2_mbox.c index ad8e0c3aa..af34fd19d 100644 --- a/drivers/common/octeontx2/otx2_mbox.c +++ b/drivers/common/octeontx2/otx2_mbox.c @@ -11,6 +11,7 @@ #include #include "otx2_mbox.h" +#include "otx2_dev.h" #define RVU_AF_AFPF_MBOX0 (0x02000) #define RVU_AF_AFPF_MBOX1 (0x02008) @@ -245,6 +246,63 @@ otx2_mbox_get_rsp(struct otx2_mbox *mbox, int devid, void **msg) return msghdr->rc; } +/** + * @internal + * Polling for given wait time to get mailbox response + */ +int +otx2_mbox_get_rsp_poll_tmo(struct otx2_mbox *mbox, int devid, void **msg, + uint32_t wait) +{ + struct otx2_mbox_dev *mdev = &mbox->dev[devid]; + uint32_t timeout = 0, sleep = 1; + struct mbox_msghdr *msghdr; + uint64_t rsp_reg = 0; + uintptr_t reg_addr; + uint64_t offset; + + rte_rmb(); + + offset = mbox->rx_start + + RTE_ALIGN(sizeof(struct mbox_hdr), MBOX_MSG_ALIGN); + msghdr = (struct mbox_msghdr *)((uintptr_t)mdev->mbase + offset); + + reg_addr = mbox->reg_base + mbox->intr_offset; + while (!rsp_reg) { + rte_rmb(); + rsp_reg = otx2_read64(reg_addr); + + if (timeout >= wait) + return -ETIMEDOUT; + + rte_delay_ms(sleep); + timeout += sleep; + } + + if (msg != NULL) + *msg = msghdr; + + /* Clear interrupt */ + otx2_write64(rsp_reg, reg_addr); + + /* Reset mbox */ + otx2_mbox_reset(mbox, 0); + + return msghdr->rc; +} + +/** + * @internal + * Polling for 5 seconds to get mailbox response + */ +int +otx2_mbox_get_rsp_poll(struct otx2_mbox *mbox, int devid, void **msg) +{ + uint32_t wait = 5 * MS_PER_S; /* 5 Seconds */ + + return otx2_mbox_get_rsp_poll_tmo(mbox, devid, msg, wait); +} + /** * @internal * Wait and get mailbox response with timeout diff --git a/drivers/common/octeontx2/otx2_mbox.h b/drivers/common/octeontx2/otx2_mbox.h index 162d12468..237d4cf45 100644 --- a/drivers/common/octeontx2/otx2_mbox.h +++ b/drivers/common/octeontx2/otx2_mbox.h @@ -1570,6 +1570,13 @@ void otx2_mbox_msg_send(struct otx2_mbox *mbox, int devid); int otx2_mbox_wait_for_rsp(struct otx2_mbox *mbox, int devid); int otx2_mbox_wait_for_rsp_tmo(struct otx2_mbox *mbox, int devid, uint32_t tmo); int otx2_mbox_get_rsp(struct otx2_mbox *mbox, int devid, void **msg); + +__rte_experimental +int otx2_mbox_get_rsp_poll(struct otx2_mbox *mbox, int devid, void **msg); +__rte_experimental +int otx2_mbox_get_rsp_poll_tmo(struct otx2_mbox *mbox, int devid, void **msg, + uint32_t tmo); + int otx2_mbox_get_rsp_tmo(struct otx2_mbox *mbox, int devid, void **msg, uint32_t tmo); int otx2_mbox_get_availmem(struct otx2_mbox *mbox, int devid); diff --git a/drivers/common/octeontx2/rte_common_octeontx2_version.map b/drivers/common/octeontx2/rte_common_octeontx2_version.map index adad21a2d..dcbca2444 100644 --- a/drivers/common/octeontx2/rte_common_octeontx2_version.map +++ b/drivers/common/octeontx2/rte_common_octeontx2_version.map @@ -33,3 +33,10 @@ DPDK_20.0 { local: *; }; + +EXPERIMENTAL { + global: + + otx2_mbox_get_rsp_poll; + otx2_mbox_get_rsp_poll_tmo; +}; From patchwork Wed Nov 27 10:22:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil Kumar Kori X-Patchwork-Id: 63340 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id A563CA04E0; Wed, 27 Nov 2019 11:23:48 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 62BC61BE95; Wed, 27 Nov 2019 11:23:34 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 1AA6E1BE92 for ; Wed, 27 Nov 2019 11:23:32 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id xARAJXOJ014912 for ; Wed, 27 Nov 2019 02:23:32 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=hh5iVaOqQBrlEXJ5/rvQufzyVRQwWOye+qq4bJJn1/A=; b=D1sCFrJcfrV4EKSti8YHRrSzqfYhc+Y6LgbbcOS+TBSSmnKsdx+Hqq0brJUHS0kOwgCS Kg5pDDf4A/IakRWsGhmZSpgiaAQspYGYggGJ3w5nIUJHsCNuOJHgVeDDYEM2uiCQT0mH y/ixncotr4AJi/XDzT7ZFjNUUuwj++AnZc3/m9Ct0BVsTrUXusyAgY1lgM7Ub9xZrlD0 RBaAEvWgBOUYrBh8L1adr3v91tozaYQS2/7vvaLmOL7YIKQOvm3DzabgptBEU30wbxge CVuUwcp1HkM/9pUuucRfTF1kvCYKhYNZP0jDyHDEwJdO3awW/7yCg48pLB3teoqVGWkv sg== Received: from sc-exch04.marvell.com ([199.233.58.184]) by mx0b-0016f401.pphosted.com with ESMTP id 2whd08jasv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Wed, 27 Nov 2019 02:23:32 -0800 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH04.marvell.com (10.93.176.84) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 27 Nov 2019 02:23:29 -0800 Received: from maili.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Wed, 27 Nov 2019 02:23:29 -0800 Received: from localhost.localdomain (unknown [10.28.34.200]) by maili.marvell.com (Postfix) with ESMTP id 44EC13F7040; Wed, 27 Nov 2019 02:23:27 -0800 (PST) From: Sunil Kumar Kori To: Jerin Jacob , Nithin Dabilpuram , Vamsi Attunuru , "Kiran Kumar K" , Satha Rao CC: , Sunil Kumar Kori Date: Wed, 27 Nov 2019 15:52:22 +0530 Message-ID: <20191127102222.31940-4-skori@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191127102222.31940-1-skori@marvell.com> References: <20191126061525.28507-1-skori@marvell.com> <20191127102222.31940-1-skori@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,18.0.572 definitions=2019-11-27_02:2019-11-27,2019-11-27 signatures=0 Subject: [dpdk-dev] [PATCH v2 4/4] drivers/octeontx2: enhancing mbox APIs to get response 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" Based on thread context, mbox API will get response for submitted request. If thread runs in interrupt context then it uses polling based get response API otherwise interrupt based. Signed-off-by: Sunil Kumar Kori --- v2: - Included Makefile and meson build changes. - Rebased patch on 19.11-rc4 drivers/common/octeontx2/otx2_dev.c | 27 ++++++++++++--------------- drivers/common/octeontx2/otx2_mbox.h | 21 +++++++++++++++++---- drivers/net/octeontx2/Makefile | 2 ++ drivers/net/octeontx2/meson.build | 2 ++ drivers/raw/octeontx2_dma/Makefile | 2 ++ drivers/raw/octeontx2_dma/meson.build | 2 ++ 6 files changed, 37 insertions(+), 19 deletions(-) diff --git a/drivers/common/octeontx2/otx2_dev.c b/drivers/common/octeontx2/otx2_dev.c index 6f29d6108..d61c712fa 100644 --- a/drivers/common/octeontx2/otx2_dev.c +++ b/drivers/common/octeontx2/otx2_dev.c @@ -577,17 +577,16 @@ otx2_pf_vf_mbox_irq(void *param) intr = otx2_read64(dev->bar2 + RVU_VF_INT); if (intr == 0) - return; + otx2_base_dbg("Proceeding to check mbox UP messages if any"); otx2_write64(intr, dev->bar2 + RVU_VF_INT); otx2_base_dbg("Irq 0x%" PRIx64 "(pf:%d,vf:%d)", intr, dev->pf, dev->vf); - if (intr) { - /* First process all configuration messages */ - otx2_process_msgs(dev, dev->mbox); - /* Process Uplink messages */ - otx2_process_msgs_up(dev, &dev->mbox_up); - } + /* First process all configuration messages */ + otx2_process_msgs(dev, dev->mbox); + + /* Process Uplink messages */ + otx2_process_msgs_up(dev, &dev->mbox_up); } static void @@ -598,18 +597,16 @@ otx2_af_pf_mbox_irq(void *param) intr = otx2_read64(dev->bar2 + RVU_PF_INT); if (intr == 0) - return; + otx2_base_dbg("Proceeding to check mbox UP messages if any"); otx2_write64(intr, dev->bar2 + RVU_PF_INT); - otx2_base_dbg("Irq 0x%" PRIx64 "(pf:%d,vf:%d)", intr, dev->pf, dev->vf); - if (intr) { - /* First process all configuration messages */ - otx2_process_msgs(dev, dev->mbox); - /* Process Uplink messages */ - otx2_process_msgs_up(dev, &dev->mbox_up); - } + /* First process all configuration messages */ + otx2_process_msgs(dev, dev->mbox); + + /* Process Uplink messages */ + otx2_process_msgs_up(dev, &dev->mbox_up); } static int diff --git a/drivers/common/octeontx2/otx2_mbox.h b/drivers/common/octeontx2/otx2_mbox.h index 237d4cf45..e82dfe530 100644 --- a/drivers/common/octeontx2/otx2_mbox.h +++ b/drivers/common/octeontx2/otx2_mbox.h @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -1627,28 +1628,40 @@ static inline int otx2_mbox_process(struct otx2_mbox *mbox) { otx2_mbox_msg_send(mbox, 0); - return otx2_mbox_get_rsp(mbox, 0, NULL); + if (rte_thread_is_intr()) + return otx2_mbox_get_rsp_poll(mbox, 0, NULL); + else + return otx2_mbox_get_rsp(mbox, 0, NULL); } static inline int otx2_mbox_process_msg(struct otx2_mbox *mbox, void **msg) { otx2_mbox_msg_send(mbox, 0); - return otx2_mbox_get_rsp(mbox, 0, msg); + if (rte_thread_is_intr()) + return otx2_mbox_get_rsp_poll(mbox, 0, msg); + else + return otx2_mbox_get_rsp(mbox, 0, msg); } static inline int otx2_mbox_process_tmo(struct otx2_mbox *mbox, uint32_t tmo) { otx2_mbox_msg_send(mbox, 0); - return otx2_mbox_get_rsp_tmo(mbox, 0, NULL, tmo); + if (rte_thread_is_intr()) + return otx2_mbox_get_rsp_poll_tmo(mbox, 0, NULL, tmo); + else + return otx2_mbox_get_rsp_tmo(mbox, 0, NULL, tmo); } static inline int otx2_mbox_process_msg_tmo(struct otx2_mbox *mbox, void **msg, uint32_t tmo) { otx2_mbox_msg_send(mbox, 0); - return otx2_mbox_get_rsp_tmo(mbox, 0, msg, tmo); + if (rte_thread_is_intr()) + return otx2_mbox_get_rsp_poll_tmo(mbox, 0, msg, tmo); + else + return otx2_mbox_get_rsp_tmo(mbox, 0, msg, tmo); } int otx2_send_ready_msg(struct otx2_mbox *mbox, uint16_t *pf_func /* out */); diff --git a/drivers/net/octeontx2/Makefile b/drivers/net/octeontx2/Makefile index 68f5765db..3da4d8cc1 100644 --- a/drivers/net/octeontx2/Makefile +++ b/drivers/net/octeontx2/Makefile @@ -26,6 +26,8 @@ CFLAGS += -diag-disable 2259 endif endif +CFLAGS += -DALLOW_EXPERIMENTAL_API + EXPORT_MAP := rte_pmd_octeontx2_version.map # diff --git a/drivers/net/octeontx2/meson.build b/drivers/net/octeontx2/meson.build index fad3076a3..a976a2c19 100644 --- a/drivers/net/octeontx2/meson.build +++ b/drivers/net/octeontx2/meson.build @@ -24,6 +24,8 @@ sources = files('otx2_rx.c', 'otx2_ethdev_devargs.c' ) +allow_experimental_apis = true + deps += ['bus_pci', 'common_octeontx2', 'mempool_octeontx2'] cflags += ['-flax-vector-conversions'] diff --git a/drivers/raw/octeontx2_dma/Makefile b/drivers/raw/octeontx2_dma/Makefile index c64ca3497..0d0c530fe 100644 --- a/drivers/raw/octeontx2_dma/Makefile +++ b/drivers/raw/octeontx2_dma/Makefile @@ -22,6 +22,8 @@ CFLAGS += -diag-disable 2259 endif endif +CFLAGS += -DALLOW_EXPERIMENTAL_API + EXPORT_MAP := rte_rawdev_octeontx2_dma_version.map # diff --git a/drivers/raw/octeontx2_dma/meson.build b/drivers/raw/octeontx2_dma/meson.build index 11f74680a..f8f88aa7e 100644 --- a/drivers/raw/octeontx2_dma/meson.build +++ b/drivers/raw/octeontx2_dma/meson.build @@ -5,6 +5,8 @@ deps += ['bus_pci', 'common_octeontx2', 'rawdev'] sources = files('otx2_dpi_rawdev.c', 'otx2_dpi_msg.c', 'otx2_dpi_test.c') +allow_experimental_apis = true + extra_flags = [] # This integrated controller runs only on a arm64 machine, remove 32bit warnings if not dpdk_conf.get('RTE_ARCH_64')