From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0059.outbound.protection.outlook.com [104.47.33.59]) by dpdk.org (Postfix) with ESMTP id 752C8199CA for ; Thu, 7 Sep 2017 17:31:50 +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=USK3KrYYeMZS1Ts0DSor4AxBNMXCNJUr6u/SHQTjaIc=; b=got2pOzs1v3LOCzqj3AJb8oUqbeyv1J4BYmzhTP59KNjBPSFSqF4hYfNDa/wAdXG7z1C7o+ZqsObsbCD93fn/gL/10nBMmoviF2/9N2/8TYtyGmtT8jQoQHUfjJBxpoSwhJd7TKrTK67NiHGq4UvFehSZYXYul+01LzieH//pww= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Santosh.Shukla@cavium.com; Received: from localhost.localdomain (14.140.2.178) by MWHPR07MB3101.namprd07.prod.outlook.com (10.172.95.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.13.10; Thu, 7 Sep 2017 15:31:46 +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, 7 Sep 2017 21:00:42 +0530 Message-Id: <20170907153042.30890-9-santosh.shukla@caviumnetworks.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20170907153042.30890-1-santosh.shukla@caviumnetworks.com> References: <20170906112834.32378-1-santosh.shukla@caviumnetworks.com> <20170907153042.30890-1-santosh.shukla@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: BM1PR01CA0072.INDPRD01.PROD.OUTLOOK.COM (10.174.208.140) To MWHPR07MB3101.namprd07.prod.outlook.com (10.172.95.7) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5c898099-7721-4c75-691f-08d4f6058e78 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:MWHPR07MB3101; X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3101; 3:rBruYGMJdh96CQ0TkWKsL2MDW+63FIXzdQ4oc7KMMf1hr4MtAmWKvhMh8rgOKGZPH5+fGmjbylVdbHv6AyBd7a+b+XNAOu2N2YMCSA9LwQ6I9EG+0KmixpTaWfxOngU37ObBYmsF61zPak2D2gaLyxPBKFbOM9x5OMvSlfXKaEmE1aiAKyfMelv1ReKK226zYsGUD+95tFI7kvQaUmP7s4vJEu78Wq7SbS7FLlyqSaSxgkfDjP5oSWBf/4aaaqIp; 25:4ucTaCa1SanqSnQU0c6HrlUPNYRGSAboWecV7NUYvzaqs7BZDZYHo8KRuodL12PCFVlg1hZQuM+6n1a3W2l4tZNTA3qUzfr/y7T1M15R8CGdZTXjPQW4IcQ5ZiOfFAJPegsfPRIUVpZWyPsp6LN6GqZRb9ignWCW8yyhVmD8WMjht4U+YlKoDPxJqrQ32Hh4qF6XChH4G3t91niInPMn2xsJR5U23alQ2Ns0t9r1LVQ9O6y2eLO5CuoBoro6RO/Jw30oJWZ4nxKBln1L+Bas7c3egt0kmxRq3uyZPI2p47aWmytte5SKJ/OK6jLE5laAmDEB+itB0xJIhFgd1iiQfA==; 31:e1iQcxKdcD/zdIQuBBSCY4+a+eSFgyTnrsOGzl8uD3g7LktHOlBtFqsSnmyhck4Zn60OduIS7+pKupZKQjhMCL99ONMEZZIKA9p/siPeZsswcTe8xWcN2lRfkMM+ygFeM+KF2WdO8ZgBg1lwolZmJYTaTHz0DW0poR89PH7M6Uys3rFinrg1OICS1HX9mFDDEj0a2hrSG7aIdXTLV1Nuvlu6duYoHMf50RibikChXV0= X-MS-TrafficTypeDiagnostic: MWHPR07MB3101: X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3101; 20:RXL7WhK8ONsKRv+BFKbLGB3Ayh6m8hcvI8K7AEEy3OZvo4V1PAFVX73+t8YxEYNcsDUegcq47VHpoMX3AANNnJ8K/rsbVOyiUS0Vh7349z4WqLlzHRzotezR7eofkif/NkDzOL65sHzej6VNYIyjWtXVJTyVAnDSVDyA/DzNTeBybNbcLbQDhSZ5NzvUcdudIcDVIsfA79QMZBynSeC5Ieh3lV/xA8XsOzz4cKbkEByT4vzHAzTcPh2gK2NKoC+g9Ypy2tRZs+jW155Ja7z4rHq35llCmNtFvY+ZrXa0I/rPVEsOfYG6PtolB2Lz6w93MGt+807kW8vBOvEV3Mho+/qV3IBahH5KSoOHcwTNtUKC9+ZDZurioWGkt6zpkuxM8QvxH82G2R/qNFC/eyRuRML94nQOMnGsyQU5A+mkJWgz+S+d5N30ueYJX9KpBouAcx9CfKYbUx9Z1b0y8DkshvZcEHh6ZbwL9M+PbhSEHHBVD/51q+W+3SS/P5WK/4bPqJdmcb7/00tmsUzkmUsXXNG1XCxgRSWoT7NW/xpMNY1ae/AqNSenmaZgB3bB3Drm7S7zLlhm73/w3M4E7fdseVxEqTQMctldSbmeDJSwjqk=; 4:bMTrTz2S+298AUDDvBXkErLKkd9u40zD4TrN56BEm+8SvdfNJffM77PGWavUp+FdBIc/XaDixIRI+OZGXICOMcN234g+laW7QKw/SHBHtvx4s/iJ8Lz9tZhDOdwlFGPtZNO20rgIR1Tn7jHNoOCblGLd8EOgaa1nK29TgXlaUYutnUnZmSfxUGWw6ITVIBYx2OPdKZz35PUmf/f7mXM+RX96DA86yL6iALpaQfWLImDnlEXBeNLnqvBSDJ8Xf76m 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)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(93006095)(3002001)(10201501046)(6041248)(20161123555025)(20161123558100)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:MWHPR07MB3101; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:MWHPR07MB3101; X-Forefront-PRVS: 04238CD941 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(6009001)(189002)(199003)(25786009)(5660300001)(966005)(50986999)(76176999)(42186005)(106356001)(105586002)(4326008)(33646002)(8656003)(66066001)(53376002)(53936002)(36756003)(107886003)(110136004)(8936002)(50226002)(305945005)(6306002)(8676002)(7736002)(5003940100001)(1076002)(6512007)(47776003)(81156014)(3846002)(50466002)(6116002)(5009440100003)(101416001)(68736007)(48376002)(97736004)(81166006)(189998001)(2906002)(72206003)(6506006)(2950100002)(42882006)(6666003)(478600001)(6486002)(110426004); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR07MB3101; 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; MWHPR07MB3101; 23:JY0YqFNufvMfHSii4tOsgHTNM5iiJdO6+W82/s8v7?= =?us-ascii?Q?0iZGNCdDiK+nH/qgVHDoLtHAdNmBzUXig4Tr5tr/RvofabSmRjAYgkB3IevT?= =?us-ascii?Q?wXRP4Q33bu8Zx9WJem174OSDaV4+fPmA90jaQ3rML+imMdGWeoAfhz5ULF/Z?= =?us-ascii?Q?DIUPOWCqxSnQwZfRHFi5NCNKl1h/bUFt5bBs7mBBH4xpH+ZmOfjTlv/xgQkB?= =?us-ascii?Q?yE9MVYQFHPwC9OlotLsZOUnUcbCPhD89jEz9NPusjkju7pAU5nPvfYGuRzQ/?= =?us-ascii?Q?w+pyAiwwQ5nN+9cQ+9L8WO2B2fSmfTHwTMr69a49gXKfSDXMkBFO7491qc/o?= =?us-ascii?Q?SsoGezWs3Z9iT7JD2mYFom2FUwUQ+PV0km7FSqMr9mv1IDCV8emV8RluZTpb?= =?us-ascii?Q?BCBLa6vhNzu53H0Iqdu6FuSGLm5Jne1QGmabrdXLdMjmjyaXRYyrX/PaTt2M?= =?us-ascii?Q?n2VpEuj2aFdnRRhCP5DXI0j4zzY8gL4boxba70lDv/XfBSFlEc7srAJlF4xg?= =?us-ascii?Q?eRvaYeLC7lFHU7iwYSmBOrSj6zzb6AQatCStTJCooTKhXGx/vyqrdoDU8Rr9?= =?us-ascii?Q?TqI1mHXv3YBSjLEp/rRnlJJG1QEivDXmJdgdrhc20m/dyTkv5bR5fAVDFlQh?= =?us-ascii?Q?OPIHoXEAahHFaUr58MCIUcBgwkMA4GQ25BbqcXuXerLPME2L3XhwAbPvXHd5?= =?us-ascii?Q?D88aPoSYgSJBDXiMFHsJdK0qY7bU5MPXIkdCVL8AuVvHwequTkapNfzgnk7a?= =?us-ascii?Q?RyA4uYR0EnZfmtKTdM36/Abz5HakR+3nC3U68maX44JP8VIHc24RnbwWSMaS?= =?us-ascii?Q?2M4tOjSuddZG768apLTdq1+Fejdae05O0Vuvah6cKmjaX8esBOgf5sgRsBJr?= =?us-ascii?Q?p1Wp7nLOjlW0pyG8hN0awcX2iXCmbPeQq5ap/qqBW/Gz5+R5ItfZPdC5TNFN?= =?us-ascii?Q?JPtFXY0ex+jmWQbAVeeJbQrYuoZyXLZyCeaeYDS9ko8h4Din5813qfAcFwI6?= =?us-ascii?Q?jveiOCzRo8v29EnFReY8fEjcJxBZtFWx1Uajcfu7sJWpWS02tLItnYC/bU1V?= =?us-ascii?Q?0WITc47qqdefQLU3iGU9IjV7JXvafNNfN9ZrLaA9TQGpfyxVgPlav/3b/26w?= =?us-ascii?Q?ZtMDf7z4v/AdfrFnx3Mvxl5sd4aGS7FkbPnfGQqAcGmRxRyraWHJ5bHIpUSZ?= =?us-ascii?Q?CXaXhWzY0Hm9J7prBJRGxikqeUQAvwxCUVn?= X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3101; 6:CKjWaXkhPi+Ufl18d5v70HU8+ZmRaR6nD++vV5m4gvVRU2iJjzcgSV+mR3pO+2UfTOV8bfZuikGHkXNLQ3UYFj/AZhJMAIGyf6kjuFIQJA6CBZhmnqT/9SdrMEnkZBIxyg2/LF1dIKMBZDjqlE6CcQ/TK6F8ktXpcIj3grVm8HXsKAAWqicUBTji4OlSmoZNOA0lO+wAqPK4KnlE8SB4SV4/CcQW8rX0kew230cYkggxh2cVC3C99S8YaGMOHwdPLVLyf1uKUYhM8//VAnXMVel8LLpCZSU7V8a9I2TD0xDwX40YeENmXb1gvqLb478C30VP+IBGS5H5fkM3a9EuYg==; 5:MbtOdd4c3xz8/ADTO7nlT1QCwSXTVNkYV+ndwQqG4UgA0oBKjLpqsAUbwtLChCaGz5Jd1f1xAAGOUqn+54jiI47xpQ+GLElGDQswz1Mt2585C5QVJE3uz/c8OF/q1OMV/Hu1Ejq1ZlmzyD7FnRQZEA==; 24:C1xw9sE/xvLEiVQoOXoDkDEDiglqSf+BD0AxOpdycl+y3DPbqwiTPdfbPibHMTrOxYKmR/+nAUFp0hHx94nWP95pPwq+NREoISdDR0ACmNU=; 7:3XhhdD7VEhYDcXLbtees9XrO7kcli+Q7AKZXR2PGcw/DPe8OI0aE1WhOzk3HJ3G8lCA3EWMhaDO5Pal+prs0Nq7v+80yTgzrYFrDvhdHjEccylCDQ04LJo3WULNUuGEll0RaC8SofZhr+K3ZZFi5wexe8evOHJMkQPDHaCcvgSuAwfstuOms7TBLlefik0qALRL8nfXq6FNMt7M9YLqI/d7BW1fjBnOfwokDvzOML9A= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2017 15:31:46.8658 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR07MB3101 Subject: [dpdk-dev] [PATCH v6 8/8] mempool: notify memory area to pool 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: , X-List-Received-Date: Thu, 07 Sep 2017 15:31:51 -0000 HW pool manager e.g. Octeontx SoC demands s/w to program start and end address of pool. Currently, there is no such api in external mempool. Introducing rte_mempool_ops_register_memory_area api which will let HW(pool manager) to know when common layer selects hugepage: For each hugepage - Notify its start/end address to HW pool manager. Signed-off-by: Santosh Shukla Signed-off-by: Jerin Jacob --- v5 --> v6: - Renamed from rte_mempool_ops_update_range to rte_mempool_ops_register_memory_area (Suggested by Olivier) - Now renamed api retuns int (Suggestd by Olivier) - Update API description and Error details very explicitly (Suggested by Olivier) Refer [1] [1] http://dpdk.org/dev/patchwork/patch/28419/ lib/librte_mempool/rte_mempool.c | 5 +++++ lib/librte_mempool/rte_mempool.h | 34 ++++++++++++++++++++++++++++++ lib/librte_mempool/rte_mempool_ops.c | 14 ++++++++++++ lib/librte_mempool/rte_mempool_version.map | 1 + 4 files changed, 54 insertions(+) diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c index decdda3a6..842382f58 100644 --- a/lib/librte_mempool/rte_mempool.c +++ b/lib/librte_mempool/rte_mempool.c @@ -365,6 +365,11 @@ rte_mempool_populate_phys(struct rte_mempool *mp, char *vaddr, struct rte_mempool_memhdr *memhdr; int ret; + /* update range info to mempool */ + ret = rte_mempool_ops_register_memory_area(mp, vaddr, paddr, len); + if (ret != -ENOTSUP && ret < 0) + return ret; + /* create the internal ring if not already done */ if ((mp->flags & MEMPOOL_F_POOL_CREATED) == 0) { ret = rte_mempool_ops_alloc(mp); diff --git a/lib/librte_mempool/rte_mempool.h b/lib/librte_mempool/rte_mempool.h index 24195dda0..8d0171b54 100644 --- a/lib/librte_mempool/rte_mempool.h +++ b/lib/librte_mempool/rte_mempool.h @@ -413,6 +413,12 @@ typedef unsigned (*rte_mempool_get_count)(const struct rte_mempool *mp); typedef int (*rte_mempool_get_capabilities_t)(const struct rte_mempool *mp, unsigned int *flags); +/** + * Notify new memory area to mempool. + */ +typedef int (*rte_mempool_ops_register_memory_area_t) +(const struct rte_mempool *mp, char *vaddr, phys_addr_t paddr, size_t len); + /** Structure defining mempool operations structure */ struct rte_mempool_ops { char name[RTE_MEMPOOL_OPS_NAMESIZE]; /**< Name of mempool ops struct. */ @@ -425,6 +431,10 @@ struct rte_mempool_ops { * Get the mempool capabilities */ rte_mempool_get_capabilities_t get_capabilities; + /** + * Notify new memory area to mempool + */ + rte_mempool_ops_register_memory_area_t register_memory_area; } __rte_cache_aligned; #define RTE_MEMPOOL_MAX_OPS_IDX 16 /**< Max registered ops structs */ @@ -552,6 +562,30 @@ rte_mempool_ops_get_count(const struct rte_mempool *mp); int rte_mempool_ops_get_capabilities(const struct rte_mempool *mp, unsigned int *flags); +/** + * @internal wrapper for mempool_ops register_memory_area callback. + * API to notify the mempool handler if a new memory area is added to pool. + * + * Mempool handler usually get notified once for the case of mempool get full + * range of memory area. However, if several memory areas exist then mempool + * handler gets notified each time. + * + * @param mp + * Pointer to the memory pool. + * @param vaddr + * Pointer to the buffer virtual address + * @param paddr + * Pointer to the buffer physical address + * @param len + * Pool size + * @return + * - 0: Success; + * - ENOTSUP: doesn't support register_memory_area ops (valid error case). + * - Otherwise, rte_mempool_populate_phys fails thus pool create fails. + */ +int +rte_mempool_ops_register_memory_area(const struct rte_mempool *mp, + char *vaddr, phys_addr_t paddr, size_t len); /** * @internal wrapper for mempool_ops free callback. diff --git a/lib/librte_mempool/rte_mempool_ops.c b/lib/librte_mempool/rte_mempool_ops.c index f2af5e5bb..a6b5f2002 100644 --- a/lib/librte_mempool/rte_mempool_ops.c +++ b/lib/librte_mempool/rte_mempool_ops.c @@ -87,6 +87,7 @@ rte_mempool_register_ops(const struct rte_mempool_ops *h) ops->dequeue = h->dequeue; ops->get_count = h->get_count; ops->get_capabilities = h->get_capabilities; + ops->register_memory_area = h->register_memory_area; rte_spinlock_unlock(&rte_mempool_ops_table.sl); @@ -138,6 +139,19 @@ rte_mempool_ops_get_capabilities(const struct rte_mempool *mp, return ops->get_capabilities(mp, flags); } +/* wrapper to notify new memory area to external mempool */ +int +rte_mempool_ops_register_memory_area(const struct rte_mempool *mp, char *vaddr, + phys_addr_t paddr, size_t len) +{ + struct rte_mempool_ops *ops; + + ops = rte_mempool_get_ops(mp->ops_index); + + RTE_FUNC_PTR_OR_ERR_RET(ops->register_memory_area, -ENOTSUP); + return ops->register_memory_area(mp, vaddr, paddr, len); +} + /* sets mempool ops previously registered by rte_mempool_register_ops. */ int rte_mempool_set_ops_byname(struct rte_mempool *mp, const char *name, diff --git a/lib/librte_mempool/rte_mempool_version.map b/lib/librte_mempool/rte_mempool_version.map index 3c3471507..2663001c3 100644 --- a/lib/librte_mempool/rte_mempool_version.map +++ b/lib/librte_mempool/rte_mempool_version.map @@ -46,5 +46,6 @@ DPDK_17.11 { global: rte_mempool_ops_get_capabilities; + rte_mempool_ops_update_range; } DPDK_16.07; -- 2.14.1