From patchwork Thu Aug 24 13:29:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Santosh Shukla X-Patchwork-Id: 27863 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 9C59C8CF0; Thu, 24 Aug 2017 15:30:21 +0200 (CEST) Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0066.outbound.protection.outlook.com [104.47.32.66]) by dpdk.org (Postfix) with ESMTP id E11238CF0 for ; Thu, 24 Aug 2017 15:30:19 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=EQO3La34hODEEcKGAURAShglZn3+bQR5nZQIXt56gEE=; b=Or5sWYz2j/udz+2P6DiBNUs8/i8Su9Y1F06e29Dsv6yWHCQNA3BfSDkRSKjRLUu0opYhC79KbK/+Ngq+MUFWLvxuYayJCWMX5nxSfjzq/SBFrBV7iQJj2oeXTm2Zn6T3UiSFmCRkRGxuawg+wtzy73zrgPqS7ZYu2kS+sRrUzig= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Santosh.Shukla@cavium.com; Received: from localhost.localdomain (14.140.2.178) by CY4PR07MB3093.namprd07.prod.outlook.com (10.172.115.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1362.18; Thu, 24 Aug 2017 13:30:15 +0000 From: Santosh Shukla To: olivier.matz@6wind.com, dev@dpdk.org Cc: thomas@monjalon.net, jerin.jacob@caviumnetworks.com, hemant.agrawal@nxp.com, Santosh Shukla Date: Thu, 24 Aug 2017 18:59:01 +0530 Message-Id: <20170824132903.32057-10-santosh.shukla@caviumnetworks.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170824132903.32057-1-santosh.shukla@caviumnetworks.com> References: <20170824132903.32057-1-santosh.shukla@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: BM1PR01CA0071.INDPRD01.PROD.OUTLOOK.COM (10.174.208.139) To CY4PR07MB3093.namprd07.prod.outlook.com (10.172.115.7) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 19984932-6c96-4b68-14aa-08d4eaf4430e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:CY4PR07MB3093; X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3093; 3:1vj1ZMKxFsnFZxGq3/YVbdbLheovMtD48GIJ2aoDMyJJo/1INIc4s9wbU/Y+kP+H6AEDleb1FWL6FP52lys4PTnTwifzKHSKObA6fIh7vVcCDqs5p6x1rWpGJJIwJLiENwpLfv54UQZf8sjROx65RDMebjEZ5wVLJZ25XKvheZZpJPe+tYESIAR77xfF4p1VZk4aXLi/JZoiPEKaaIuzSNvs3tP7ZVqpZ1ayplTFMyoVNKFI9KzFjg8N+Puh2D0C; 25:fD5WliAMbLBLveG2EOUAPuICUDHjMYOQwC6j2oK9IKz17acRHc2lSVaJNT7Wy1TFYwGlyoGS4Mcjem7gdzhCpl6ZN8qWOvUFBx7Yi+cRxndC6CcELHvmSCGphQVyrw3Bm4QlJzAUTc9nytjQEPnzO0SmyOiGm48VCNYatb0XhI/PTfbwOuTQFhTW3YR8tVwaQGyB9RWG2VJni61ABDw9QKXRYDhgbZ1nhcpeEuBKAI4aVUwMneM4klmo6zg3q8GucBDiSSkahAMAFxxd9jLEfeZAHr97uBEJ4WBtKtXq3a5blKtPIJ0QXQoh2rGXOsKCBMRNeBLKPpJoPJ3ExiL3JA==; 31:d1+v5yuYXCJz08aOX0ujtuH53BK63nxqNqqcdbH+joDqQGD1hDWGWXbLqXALWrkDOyczXsaGYRcD7ted5qGvRoq+zy23ewwm7NDBN7Ru1hpI+jIAHnMZ6cRyZfwTn4Qn55BcEscX9CwkG6y4a1UEwGl4SvqW9S8Kiye4niq/J4eSvuVtM/zbYRBERSjgQhaA2bNb427TBnrKdnYw99wjXNSl86f/0kA+trUrscAf7oE= X-MS-TrafficTypeDiagnostic: CY4PR07MB3093: X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3093; 20:9OHmdaHWPyAQtaswaDrr6HTBDPo2omW/LKSInNI7eGt9WDYSfNmsPVuvmfwRRBopCCG+NEwZLgqZ6YFFIVuXOZrmggJlvVEUCobnarjvRmp2YQjvcui4J7ggGzrha5sJe8meje6lEulcgOpqBbPDmPzjgzAenC9iEx5450cB323Edxq+Yfs4iM8Zzxdp8jkYOR3++pyFJzwzy+2U6JEDT2k+l4sebM0XwEOLawxZQ5IMBdH/WmDyxreDq5YxO6UULl99pltRv3RKZ7OWnlLU7xoRw/rhdo2Bb2swlHGJ7rpXNP9Br/RALO1GXNgKX1c7rs8QXqrMvLZ4lLyi+seHetZSzkdOjsDN/4nzahTOqSwBdHSodT9Fp/ZxIJTjZ7U0gcvXUASVaodMPCVmZSJR7QJU5OoeQ6WdnSPcpS1Brb+41lJgGINSMbqmDHhwHj0pQzWe/5/iAeyuK/g6+xdFCvOPO5hAFz1XckvRDkR2OrpS5ISK5rZ8RL817OgXJI+1DmDjpoU9eGukkPHUAS072zYdouMGwoZwr4jsKOfH4tasz/Ih1aExX+XgtFV9wkMlQFfVULf2spVl5weZEmUzo7GRWFwKEIlmobho6pHYDLA=; 4:WajA/Ya6lE/jV5Ii0Lsnuar6qm2dlpwdicvrr3kbQwFYweGtSnxbp+MRiOhndVJCjpX/Hh6olCAuyh/q8X/KKC8AFdDNn75SPREIpvbvsSw8RGWkUGsNYfOrrXf2Xq0cf/+3Q7Twz4wlQ7Fv8ADp/KM4t3nTB4TY4NehpDgra5sgIFJyWAXDoHl1LHL2gjf/a8UgbQEPE7WD+y/yeFihJAs+YDUyGyjnND6wUkcG/AZ20l1Cq1QiZm6rYOzI4BWx X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(10201501046)(3002001)(93006095)(6041248)(20161123560025)(20161123558100)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CY4PR07MB3093; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CY4PR07MB3093; X-Forefront-PRVS: 04097B7F7F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7370300001)(4630300001)(979002)(6069001)(6009001)(189002)(199003)(110136004)(107886003)(53936002)(105586002)(101416001)(15650500001)(7736002)(50226002)(76176999)(42186005)(68736007)(6486002)(33646002)(50986999)(6512007)(106356001)(1076002)(2906002)(6506006)(3846002)(6116002)(478600001)(97736004)(4326008)(5660300001)(7350300001)(47776003)(5009440100003)(72206003)(50466002)(8656003)(48376002)(25786009)(81156014)(81166006)(66066001)(305945005)(6666003)(5003940100001)(42882006)(36756003)(8676002)(189998001)(2950100002)(110426004)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR07MB3093; H:localhost.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY4PR07MB3093; 23:5F99dHev81/EI3k7xQIV6NWbmaDhKuzLaQwdOb1Su?= tv+rnxk98jxzs7OuDsSovrkEeSHry6E/Z9GE+GKonEhEh+cfTbxUTrN3Xs+SZnPPs0qpE8zI27r0LJ81vJYDn5vG4TiCdeJRISusNF1Acf6OTISHHgS1jb2Qmy24g3YyiPwY3a0PVPJKKZSNvd4iUBnKY3wbk4JGimlQfExP9BYLGYT/WOMAAHOWFlcbpkEQosAfUqRqNWWtYW+0hukXG5xKE729bhnnTGtMPY5Zzyoq0/TDM0mWBOSgKXKnPaSvMD9eUkcD2pHxYQdt3JpuBeyIquufIImwY+vjlmVUpxvvUFI9bU9wktrHEJMYRRQkSTh2B3WpnkC5sleEEb3mVxK96Sgjfv7OtM7/B6D5Ig+bUEXgv6ojUOmSHBxyrX4LBjlcxRscQRZykhCaMqGCl58pta7km19eY8WmO7KKDFD//joXSF1KQtEv0fP+R+lpC9sQtfqtDetZPQZ/SjyQccn1yxmUW0NnBERzbPgMOq5e8aPHFem+8rPkGvyAmdfKZuZfC8CJCfsYfHecW+kr/S7WppwJoC/vnzxGL4dAsYUgmv9PevbGhDOJUf85RgfkS0JxNHJVOYnzp7pLMiPWUbxml3r4eBprx9m47YDwXT4o4Ob5DtsFtd9rAz+1VeHMe6yLSI4/Ootloo3V83550PNBhy2jcXquRZbvyprKl35Zfr1GJE2R5MJT5XDxuiCoOdnHtELGq80ol1k6wcqwNhUznxm9SYduQa9IMMh13oqiA3xWTf0z0UXnmehSh4yfUIj6BgDuaCskPddwAAzxRzfSEenSkJ+nzY0dWNwGzhzTyiSxeWnXxAFdFZDaQhL979zOsU/BX0ho70w/Qb9V1c5CmdWC1aJjcMrCZVraxj9XsoA69kSyDx3Sj802EybNFRowpcV+svolEmFMDDf/8fpPAWUUvZuwG5HgrxZPSpQuiFipkNA68XX6MbxV41IROiTLzsURlMw1IG7NYfCcuhtHcFpzLf9Liv4FzdG7fC/0+zsZyX+simDTTvfybY0pncXp4UwDqg5/r2vmbmFQIK3sSzZpS8yFAAv0K2+/qxowbdUv3knJmQEEcmHJyNYXZE/lapecaHPOu38ZaigTvcACXGMVhkyxXLSAeow85CUI46aBAXEu7BSKyL7MNIiEb8RuHFoaGjZUrCBnvIFMhRJXL7/kh0A4NsuOb54KmZc/gkmd/jj4i4EIfpxETECFA7U7epk//dC6uzeG6GSZLyf9QUhFixShwvbNs/lkAiGA/8PSXQV9ATheckX0CgeqaneDBc821ec70vnKhSkQ3q8 X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3093; 6:Z3wMwArENHnUEPZIpTeKp9Ucf16EC2nsgIrgxyHa6Wghcv48jlQI4rgsutZV75xonNWlAz4cO9uzTDY6PR6MioQR0fsU9Cyj/+fMaCIyoDOTku9Ps46Q4FKBGO3bYTjIPHGKVRCSHRfnQNpiRAWXxOEcjbFfAk3OH/ODk204Ic3nrcuK5IrDXLPSLNHcZ1xCbC2A/yFlR9qq8CJVZ0u7PbfA6WUpSo9UI+TsLljBlyxvpvFtKwCJACMx66tS/1XsooFlrL7FxoTX+jBdknzeroFX5Aji3iQah5sJW0QaPR/xliL55UpNby5lzIceeH0d3hMxPUxvFFXvs+dMDS3V/A==; 5:G9raM/Gyd99MTEW5LQezlZ7cC5xDvG/zq5YJDVG01BxTQiHVSAZTLlrgrwt5kW0in93UUmK+krf+O7JaDHA2arpe2WBnaQ4dqJ9kQPJgGC1NGEAEGI7k/OWyvcF+omDIl1wSp7ShIxZQk9/ChDhFYNpDXPVtavp3uHBfl12k0dw=; 24:NLUC8NMu9I5OE1PybFf0ofMVaCEZ2msK0/al/xFnm1uhXtJiKhDTuHjiCLFxcFD5EK6HVpFuznjOsxhlCV7tK/xeEaYC+zbJb6EbSvSfYWs=; 7:CqTY5QsTUBatCLCQoLDTgM0lDKAsjFUmolYYWpixsEfzg0cV7AGoSJIcOH9/T53vsMZnEeVMSsNCvA/C4Q3ooz3mOT1DL9iF/f4BTBCV+XEZOtu0+A5SO3d3QqIAyi3RutfNGmY2Tvj3FROwOV4Pc4ccM7GmRtxmkqwTg9YjFYB8FApik22aQnf958fAk6lI5O5bokErTW/mVN8f6MAmjxeapQIQfQtzFHQ32yWAEUA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2017 13:30:15.8217 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR07MB3093 Subject: [dpdk-dev] [PATCH v1 09/11] mempool/octeontx: implement pool update range 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" Add support for update range ops in mempool driver. Allow more than one HW pool when using OcteonTx mempool driver: By storing each pool information to the list and find appropriate list element by matching the rte_mempool pointers. Signed-off-by: Santosh Shukla Signed-off-by: Jerin Jacob --- drivers/mempool/octeontx/rte_mempool_octeontx.c | 73 ++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/drivers/mempool/octeontx/rte_mempool_octeontx.c b/drivers/mempool/octeontx/rte_mempool_octeontx.c index cc1b101f4..7c16259ea 100644 --- a/drivers/mempool/octeontx/rte_mempool_octeontx.c +++ b/drivers/mempool/octeontx/rte_mempool_octeontx.c @@ -36,17 +36,49 @@ #include "octeontx_fpavf.h" +/* + * Per-pool descriptor. + * Links mempool with the corresponding memzone, + * that provides memory under the pool's elements. + */ +struct octeontx_pool_info { + const struct rte_mempool *mp; + uintptr_t mz_addr; + + SLIST_ENTRY(octeontx_pool_info) link; +}; + +SLIST_HEAD(octeontx_pool_list, octeontx_pool_info); + +/* List of the allocated pools */ +static struct octeontx_pool_list octeontx_pool_head = + SLIST_HEAD_INITIALIZER(octeontx_pool_head); +/* Spinlock to protect pool list */ +static rte_spinlock_t pool_list_lock = RTE_SPINLOCK_INITIALIZER; + static int octeontx_fpavf_alloc(struct rte_mempool *mp) { uintptr_t pool; + struct octeontx_pool_info *pool_info; uint32_t memseg_count = mp->size; uint32_t object_size; uintptr_t va_start; int rc = 0; + rte_spinlock_lock(&pool_list_lock); + SLIST_FOREACH(pool_info, &octeontx_pool_head, link) { + if (pool_info->mp == mp) + break; + } + if (pool_info == NULL) { + rte_spinlock_unlock(&pool_list_lock); + return -ENXIO; + } + /* virtual hugepage mapped addr */ - va_start = ~(uint64_t)0; + va_start = pool_info->mz_addr; + rte_spinlock_unlock(&pool_list_lock); object_size = mp->elt_size + mp->header_size + mp->trailer_size; @@ -77,10 +109,27 @@ octeontx_fpavf_alloc(struct rte_mempool *mp) static void octeontx_fpavf_free(struct rte_mempool *mp) { + struct octeontx_pool_info *pool_info; uintptr_t pool; pool = (uintptr_t)mp->pool_id; + rte_spinlock_lock(&pool_list_lock); + SLIST_FOREACH(pool_info, &octeontx_pool_head, link) { + if (pool_info->mp == mp) + break; + } + + if (pool_info == NULL) { + rte_spinlock_unlock(&pool_list_lock); + rte_panic("%s: trying to free pool with no valid metadata", + __func__); + } + + SLIST_REMOVE(&octeontx_pool_head, pool_info, octeontx_pool_info, link); + rte_spinlock_unlock(&pool_list_lock); + + rte_free(pool_info); octeontx_fpa_bufpool_destroy(pool, mp->socket_id); } @@ -163,6 +212,26 @@ octeontx_fpavf_get_capabilities(struct rte_mempool *mp) return 0; } +static void +octeontx_fpavf_update_range(const struct rte_mempool *mp, + char *vaddr, phys_addr_t paddr, size_t len) +{ + struct octeontx_pool_info *pool_info; + + RTE_SET_USED(paddr); + RTE_SET_USED(len); + + pool_info = rte_malloc("octeontx_pool_info", sizeof(*pool_info), 0); + if (pool_info == NULL) + return; + + pool_info->mp = mp; + pool_info->mz_addr = (uintptr_t)vaddr; + rte_spinlock_lock(&pool_list_lock); + SLIST_INSERT_HEAD(&octeontx_pool_head, pool_info, link); + rte_spinlock_unlock(&pool_list_lock); +} + static struct rte_mempool_ops octeontx_fpavf_ops = { .name = "octeontx_fpavf", .alloc = octeontx_fpavf_alloc, @@ -171,7 +240,7 @@ static struct rte_mempool_ops octeontx_fpavf_ops = { .dequeue = octeontx_fpavf_dequeue, .get_count = octeontx_fpavf_get_count, .get_capabilities = octeontx_fpavf_get_capabilities, - .update_range = NULL, + .update_range = octeontx_fpavf_update_range, }; MEMPOOL_REGISTER_OPS(octeontx_fpavf_ops);