From patchwork Tue Jun 16 09:44:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ophir Munk X-Patchwork-Id: 71632 X-Patchwork-Delegate: rasland@nvidia.com 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 B5972A04A3; Tue, 16 Jun 2020 11:45:04 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C74251BEE6; Tue, 16 Jun 2020 11:44:57 +0200 (CEST) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2089.outbound.protection.outlook.com [40.107.20.89]) by dpdk.org (Postfix) with ESMTP id D64221BEDD for ; Tue, 16 Jun 2020 11:44:54 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K5o4OhOhupfLwJqShxRTcqbeI25Yy5AH9GaDec577MXHiDbvD/hcGE1EM7GV/49X3Dj/o0rMXl47YJObI+z3DtjFBAY2R0CjcYXZJCmVrWQuATU/2GD/w5i2q7CyOBlALES14DnnSSqD+RxWqxph9jD2EiHwmu/e+FaFrQy80lcKtYqbeSGr1LymOtvhndmWfLVC6r2vWxf+iScAZfjmYjWYWfSW4uai2tz0JqtbT8Jo277oCstFieu6vzU4/I32UOXUSlxZaEaPEJXJNMb+IOPS7gpEtzneu585Ci+sCMV3t4qWdBtfqlPkjlI82vpKlLUWSa4uOzyxZZYeaoWwLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hsCD2d5nazHKntvNFBpMUNJH3oxAS/YGLz4UE3WLEj8=; b=RAH6YEamYj6RTV/Zt8kpHDVCT3a5lYAidkAoUrWgJyGgx9fU4F0YIUfb1hUcAiyrWfKSekYWt0ZAf2tshhdUZ89lImHh15Xz/4kVvb7s4grOMYmFuLsP+yb+1Dee97uVabv10m8ODeJ3z3w9byaK6H29qSJfqbdEr4Qb3PgmA3QfxiauR7vBxUC86ByJ2X+Ve5QRnNAWDKRx4oBAoIdMB4GaShOgIP609B36qS7PMinglrBZXfqYnf5RapNpl6MlGzitKnJXA9HcGmSjMcHQvV3uZAcDiuUB+Zv/agfo8PqZpmrd3+//Nb/Y4zNYML1D9q7sZvY7eqVEIs5r4U6TrQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hsCD2d5nazHKntvNFBpMUNJH3oxAS/YGLz4UE3WLEj8=; b=FFW7npyVpkP74JYxJRrykkCyQWHHca/Bp7zTQxfEzlWLSmUWIWl5OPjO72fCeCcNk/OIvnuQH8TBBzyRCzBfVW9joIwZOkCwLBnbMvUEorvE15yD9eJ6azInKwWz5ilIRomSHSeGxhYDtD6YNKoISwXAeilMKreM18UMbQ/yGjU= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=mellanox.com; Received: from AM0PR05MB4209.eurprd05.prod.outlook.com (2603:10a6:208:61::22) by AM0PR05MB5859.eurprd05.prod.outlook.com (2603:10a6:208:124::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.22; Tue, 16 Jun 2020 09:44:53 +0000 Received: from AM0PR05MB4209.eurprd05.prod.outlook.com ([fe80::1068:89a9:41d3:b14a]) by AM0PR05MB4209.eurprd05.prod.outlook.com ([fe80::1068:89a9:41d3:b14a%3]) with mapi id 15.20.3088.028; Tue, 16 Jun 2020 09:44:53 +0000 From: Ophir Munk To: dev@dpdk.org, Matan Azrad , Raslan Darawsheh Cc: Ophir Munk Date: Tue, 16 Jun 2020 09:44:43 +0000 Message-Id: <20200616094446.7152-2-ophirmu@mellanox.com> X-Mailer: git-send-email 2.8.4 In-Reply-To: <20200616094446.7152-1-ophirmu@mellanox.com> References: <20200616094446.7152-1-ophirmu@mellanox.com> X-ClientProxiedBy: ZRAP278CA0006.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::16) To AM0PR05MB4209.eurprd05.prod.outlook.com (2603:10a6:208:61::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from mellanox.com (37.142.13.130) by ZRAP278CA0006.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.19 via Frontend Transport; Tue, 16 Jun 2020 09:44:52 +0000 X-Mailer: git-send-email 2.8.4 X-Originating-IP: [37.142.13.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e3b48b40-37f5-4292-d075-08d811d9eba5 X-MS-TrafficTypeDiagnostic: AM0PR05MB5859: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtFwd X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:46; X-Forefront-PRVS: 04362AC73B X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2DKn3/dF96NfOurWs07e5AsEBSzAmlrZwTK90ShUKYqZ5b1jnpDW5A5FyXJde5y++T2BMtJJxojxAB4wf9J+M96a6f2Jje29UdWi0Ei6mjfWMpXbc+6icpic5X1/pA9juM+Que7NoKXjEv5xZDrfNsYRoxAZKANCbLLU42LpXMM1eS/cMBOjPsu0yKP6ZEoHame+hfmM582rGqByhbyexA2XTiKtopCsTFaO5iAr92xAeBiMby38aObKGEU+pZOxr9oAAM6PBxkka6avt0LVbPTZXgkdniU00zIYoBWAm7elrloJ+tZps6E/5nxYHfUd4lAsgWocrLb9P0sYzllr9w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR05MB4209.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(366004)(136003)(376002)(39860400002)(346002)(396003)(8936002)(55016002)(8676002)(36756003)(107886003)(6636002)(2906002)(86362001)(4326008)(66946007)(66476007)(66556008)(110136005)(478600001)(1076003)(186003)(6666004)(8886007)(16526019)(5660300002)(2616005)(956004)(316002)(52116002)(26005)(83380400001)(7696005)(45080400002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: a+GctIVBLmBKCPNeS/WjV7735J1U1LjZDTb1osw3paWYW0wchH5doLvCYXJd3GP4+OUP6HTjX0AcrJllDhhzHLl7HaJo6y//LE5DxnoSl1vvD0DP9yUQc27nMuum1NRRNt6OS1sbk49uVRePU7/fkCtYNwdqdi11az5su8+06c7EhS2IlseFK2XlAYoW6zOX2MKcZRjodyM3s9u5CAksOmFzfg6KbN4hezxV8FgbdbBPEb0mFvdbh2kI71hsjTTKhShz2r8EZ+6mh6DKeH9DLJ2fCdtwqKni2e0HTnmrQh26wSoSbsNcMIgfaVxhWPWcVGELvlDPKoTmdNRpXSVIkMUGAy4/14OLLsMeMKQpJnpaStmZknjyPByXbVduedopLlhES9REZeTvGpONtdbGVKuT/qw/pI/O+wkuLl22s9yw86bqDmkN3B8Rx28piDQnEMZZitkWS1GO6dZJzBLIZIz+94z2fg+oQwStWy/raZg= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: e3b48b40-37f5-4292-d075-08d811d9eba5 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jun 2020 09:44:53.4411 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tmYAXhFNvg4A1pmm//hH3RIdb+T9sItMdnafqAmniNzG8ZT0/r2oJC+sxnEiGMA7XCfiPvpbq7oARRGN/X62Aw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB5859 Subject: [dpdk-dev] [PATCH v1 1/4] common/mlx5: remove MR struct dependency on ibv 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" Replace 'struct ibv_mr *' (in 'struct mlx5_mr') with a new 'struct mlx5_pmd_mr'. The new struct contains the required MR field: lkey, addr, len and is independent of ibv. Signed-off-by: Ophir Munk Acked-by: Matan Azrad --- drivers/common/mlx5/mlx5_common_mr.c | 60 ++++++++++++++++++++---------------- drivers/common/mlx5/mlx5_common_mr.h | 11 +++++-- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/drivers/common/mlx5/mlx5_common_mr.c b/drivers/common/mlx5/mlx5_common_mr.c index e894523..c68be54 100644 --- a/drivers/common/mlx5/mlx5_common_mr.c +++ b/drivers/common/mlx5/mlx5_common_mr.c @@ -266,18 +266,16 @@ mr_find_next_chunk(struct mlx5_mr *mr, struct mr_cache_entry *entry, /* MR for external memory doesn't have memseg list. */ if (mr->msl == NULL) { - struct ibv_mr *ibv_mr = mr->ibv_mr; - MLX5_ASSERT(mr->ms_bmp_n == 1); MLX5_ASSERT(mr->ms_n == 1); MLX5_ASSERT(base_idx == 0); /* * Can't search it from memseg list but get it directly from - * verbs MR as there's only one chunk. + * pmd_mr as there's only one chunk. */ - entry->start = (uintptr_t)ibv_mr->addr; - entry->end = (uintptr_t)ibv_mr->addr + mr->ibv_mr->length; - entry->lkey = rte_cpu_to_be_32(mr->ibv_mr->lkey); + entry->start = (uintptr_t)mr->pmd_mr.addr; + entry->end = (uintptr_t)mr->pmd_mr.addr + mr->pmd_mr.len; + entry->lkey = rte_cpu_to_be_32(mr->pmd_mr.lkey); /* Returning 1 ends iteration. */ return 1; } @@ -302,7 +300,7 @@ mr_find_next_chunk(struct mlx5_mr *mr, struct mr_cache_entry *entry, /* Found one chunk. */ entry->start = start; entry->end = end; - entry->lkey = rte_cpu_to_be_32(mr->ibv_mr->lkey); + entry->lkey = rte_cpu_to_be_32(mr->pmd_mr.lkey); } return idx; } @@ -442,8 +440,8 @@ mr_free(struct mlx5_mr *mr) if (mr == NULL) return; DRV_LOG(DEBUG, "freeing MR(%p):", (void *)mr); - if (mr->ibv_mr != NULL) - claim_zero(mlx5_glue->dereg_mr(mr->ibv_mr)); + if (mr->pmd_mr.obj != NULL) + claim_zero(mlx5_glue->dereg_mr(mr->pmd_mr.obj)); if (mr->ms_bmp != NULL) rte_bitmap_free(mr->ms_bmp); rte_free(mr); @@ -600,6 +598,7 @@ mlx5_mr_create_primary(void *pd, uint32_t ms_n; uint32_t n; size_t len; + struct ibv_mr *ibv_mr; DRV_LOG(DEBUG, "Creating a MR using address (%p)", (void *)addr); /* @@ -768,24 +767,28 @@ mlx5_mr_create_primary(void *pd, * mlx5_alloc_buf_extern() which eventually calls rte_malloc_socket() * through mlx5_alloc_verbs_buf(). */ - mr->ibv_mr = mlx5_glue->reg_mr(pd, (void *)data.start, len, - IBV_ACCESS_LOCAL_WRITE | - (haswell_broadwell_cpu ? 0 : - IBV_ACCESS_RELAXED_ORDERING)); - if (mr->ibv_mr == NULL) { - DEBUG("Fail to create a verbs MR for address (%p)", + ibv_mr = mlx5_glue->reg_mr(pd, (void *)data.start, len, + IBV_ACCESS_LOCAL_WRITE | + (haswell_broadwell_cpu ? 0 : + IBV_ACCESS_RELAXED_ORDERING)); + if (ibv_mr == NULL) { + DEBUG("Fail to create an MR for address (%p)", (void *)addr); rte_errno = EINVAL; goto err_mrlock; } - MLX5_ASSERT((uintptr_t)mr->ibv_mr->addr == data.start); - MLX5_ASSERT(mr->ibv_mr->length == len); + mr->pmd_mr.lkey = ibv_mr->lkey; + mr->pmd_mr.addr = ibv_mr->addr; + mr->pmd_mr.len = ibv_mr->length; + mr->pmd_mr.obj = ibv_mr; + MLX5_ASSERT((uintptr_t)mr->pmd_mr.addr == data.start); + MLX5_ASSERT(mr->pmd_mr.len); LIST_INSERT_HEAD(&share_cache->mr_list, mr, mr); DEBUG("MR CREATED (%p) for %p:\n" " [0x%" PRIxPTR ", 0x%" PRIxPTR ")," " lkey=0x%x base_idx=%u ms_n=%u, ms_bmp_n=%u", (void *)mr, (void *)addr, data.start, data.end, - rte_cpu_to_be_32(mr->ibv_mr->lkey), + rte_cpu_to_be_32(mr->pmd_mr.lkey), mr->ms_base_idx, mr->ms_n, mr->ms_bmp_n); /* Insert to the global cache table. */ mlx5_mr_insert_cache(share_cache, mr); @@ -1036,6 +1039,7 @@ mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl) struct mlx5_mr * mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id) { + struct ibv_mr *ibv_mr; struct mlx5_mr *mr = NULL; mr = rte_zmalloc_socket(NULL, @@ -1044,17 +1048,21 @@ mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id) RTE_CACHE_LINE_SIZE, socket_id); if (mr == NULL) return NULL; - mr->ibv_mr = mlx5_glue->reg_mr(pd, (void *)addr, len, - IBV_ACCESS_LOCAL_WRITE | - (haswell_broadwell_cpu ? 0 : - IBV_ACCESS_RELAXED_ORDERING)); - if (mr->ibv_mr == NULL) { + ibv_mr = mlx5_glue->reg_mr(pd, (void *)addr, len, + IBV_ACCESS_LOCAL_WRITE | + (haswell_broadwell_cpu ? 0 : + IBV_ACCESS_RELAXED_ORDERING)); + if (ibv_mr == NULL) { DRV_LOG(WARNING, - "Fail to create a verbs MR for address (%p)", + "Fail to create MR for address (%p)", (void *)addr); rte_free(mr); return NULL; } + mr->pmd_mr.lkey = ibv_mr->lkey; + mr->pmd_mr.addr = ibv_mr->addr; + mr->pmd_mr.len = ibv_mr->length; + mr->pmd_mr.obj = ibv_mr; mr->msl = NULL; /* Mark it is external memory. */ mr->ms_bmp = NULL; mr->ms_n = 1; @@ -1064,7 +1072,7 @@ mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id) " [0x%" PRIxPTR ", 0x%" PRIxPTR ")," " lkey=0x%x base_idx=%u ms_n=%u, ms_bmp_n=%u", (void *)mr, (void *)addr, - addr, addr + len, rte_cpu_to_be_32(mr->ibv_mr->lkey), + addr, addr + len, rte_cpu_to_be_32(mr->pmd_mr.lkey), mr->ms_base_idx, mr->ms_n, mr->ms_bmp_n); return mr; } @@ -1089,7 +1097,7 @@ mlx5_mr_dump_cache(struct mlx5_mr_share_cache *share_cache __rte_unused) unsigned int n; DEBUG("MR[%u], LKey = 0x%x, ms_n = %u, ms_bmp_n = %u", - mr_n++, rte_cpu_to_be_32(mr->ibv_mr->lkey), + mr_n++, rte_cpu_to_be_32(mr->pmd_mr.lkey), mr->ms_n, mr->ms_bmp_n); if (mr->ms_n == 0) continue; diff --git a/drivers/common/mlx5/mlx5_common_mr.h b/drivers/common/mlx5/mlx5_common_mr.h index 7add4da..6f2dcec 100644 --- a/drivers/common/mlx5/mlx5_common_mr.h +++ b/drivers/common/mlx5/mlx5_common_mr.h @@ -31,10 +31,17 @@ #define MLX5_MR_CACHE_N 8 #define MLX5_MR_BTREE_CACHE_N 256 +/* mlx5 PMD MR struct. */ +struct mlx5_pmd_mr { + uint32_t lkey; + void *addr; + size_t len; + void *obj; /* verbs mr object or devx umem object. */ +}; /* Memory Region object. */ struct mlx5_mr { LIST_ENTRY(mlx5_mr) mr; /**< Pointer to the prev/next entry. */ - struct ibv_mr *ibv_mr; /* Verbs Memory Region. */ + struct mlx5_pmd_mr pmd_mr; /* PMD memory region. */ const struct rte_memseg_list *msl; int ms_base_idx; /* Start index of msl->memseg_arr[]. */ int ms_n; /* Number of memsegs in use. */ @@ -46,7 +53,7 @@ struct mlx5_mr { struct mr_cache_entry { uintptr_t start; /* Start address of MR. */ uintptr_t end; /* End address of MR. */ - uint32_t lkey; /* rte_cpu_to_be_32(ibv_mr->lkey). */ + uint32_t lkey; /* rte_cpu_to_be_32(lkey). */ } __rte_packed; /* MR Cache table for Binary search. */ From patchwork Tue Jun 16 09:44:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ophir Munk X-Patchwork-Id: 71633 X-Patchwork-Delegate: rasland@nvidia.com 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 8EF66A04A3; Tue, 16 Jun 2020 11:45:15 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 50F1D1BF57; Tue, 16 Jun 2020 11:45:01 +0200 (CEST) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2068.outbound.protection.outlook.com [40.107.20.68]) by dpdk.org (Postfix) with ESMTP id 188EE1BEDD for ; Tue, 16 Jun 2020 11:44:56 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I8eCYW+00zIfKEczrPsTmlhbJiLVjtG9zQlgUdASo5e3wf/xbZMMYfnfInK8Q049O0LE8R+P/+2QrQv0VYUqDv7MDPFc6xLu7rKT2B3A5Qu3BddNU2l/DPD1i0MRM++Lqxrf87TVz/gx7N4B0s6x0Luuuq+0aEe8GhNHrVwr2KKMvoDx/YCOf66JnbvH2453s4fSSTVGAxD7hacfYlSUi9lyL22oP3X30VcdDjowOG+RysRkdvQwVYZvx1a89oRjyrlqFofSPy0hH73TTwr/nkNKz6zgL97Ij0T3Nq8cbfjuEWQ0btbyJV8FkOfbyoxkucX6yvPOAYS5LhNYwpEcNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tThYA670+64vGfjcIJQP1p6mGPPdy0lJMdTNcFLGZEg=; b=K5CcQzsXE5972wnkaZBTX78GRwz01hbkpszbmxOJe5bAQ/DuKgyuRiEGDiAY0e/aUfJX6DKfBGZOgZmUI52qxrcPglsboMEGWCTdTxNGe3Opar1WGAYilZp98NY7DMpPAhZuz2uECzkUtZ5hca78FnFBB8zp76kEShz0LLBkujH9gniEz2KTonJELSCvUin8wDzYHsHSfgEn4Sue2N0nHYPBKOD6E1+zSMn1OAXAPfAef+j1xBBzZkHMTa10Urr+XzlZ4SbGgbR/YA7OI0tGaGtXVJaeXIjE+b+P/IHsL7faEHC5MyAz/XpDr1EVMxIQHN7MtTwQV5a2+dwxG7G3cA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tThYA670+64vGfjcIJQP1p6mGPPdy0lJMdTNcFLGZEg=; b=hSXo1mnvv/7KIVAIuK6/sYrHDw/3GJiamhbeNasaXc5mmckgY+WGdP+siojYQtpvmldXfO3KLSkLzv+zB7rWLG2pbCSfCDyxbrorL2LcHpl4vvjYRpjjsRye+rL1WOnbeUSL3Icetpu8k7IK1sO7Qh6WzVUpUc/xy1SXOEKGuG4= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=mellanox.com; Received: from AM0PR05MB4209.eurprd05.prod.outlook.com (2603:10a6:208:61::22) by AM0PR05MB5859.eurprd05.prod.outlook.com (2603:10a6:208:124::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.22; Tue, 16 Jun 2020 09:44:54 +0000 Received: from AM0PR05MB4209.eurprd05.prod.outlook.com ([fe80::1068:89a9:41d3:b14a]) by AM0PR05MB4209.eurprd05.prod.outlook.com ([fe80::1068:89a9:41d3:b14a%3]) with mapi id 15.20.3088.028; Tue, 16 Jun 2020 09:44:54 +0000 From: Ophir Munk To: dev@dpdk.org, Matan Azrad , Raslan Darawsheh Cc: Ophir Munk Date: Tue, 16 Jun 2020 09:44:44 +0000 Message-Id: <20200616094446.7152-3-ophirmu@mellanox.com> X-Mailer: git-send-email 2.8.4 In-Reply-To: <20200616094446.7152-1-ophirmu@mellanox.com> References: <20200616094446.7152-1-ophirmu@mellanox.com> X-ClientProxiedBy: ZRAP278CA0006.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::16) To AM0PR05MB4209.eurprd05.prod.outlook.com (2603:10a6:208:61::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from mellanox.com (37.142.13.130) by ZRAP278CA0006.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.19 via Frontend Transport; Tue, 16 Jun 2020 09:44:53 +0000 X-Mailer: git-send-email 2.8.4 X-Originating-IP: [37.142.13.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 39f8c219-8af7-4388-0c88-08d811d9ec28 X-MS-TrafficTypeDiagnostic: AM0PR05MB5859: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtFwd X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:44; X-Forefront-PRVS: 04362AC73B X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UfCISYjq82bh+SbVCVF4ehNxOPxXaMW2uIo3b9rY/Z9lSiY+A/yQBo40+4HyDnEX55nJrQkFICho8sTigtfcekeuomj9FJAsf9lDHugLqH1tWkGqnWqFah6wBGOtsGg2huTEpfPnmIV8UOb3rw6JuxyS0GuibhGyhxsJPslP8VwU1dNaUaYpjXioJpYVL8bqYiR+8RmlTkJxD7w1L005DjL/tcFu5syIJIUanpHC/Ikqdk1umvruZGwOIAyLKwjyPLNB7mL6qYSpjmYHfwnCnLZGUfmic6JitfxL+ahe79vHW12noKeKY0Ee5js7+ZM93eZvI2kOXJtgx8ge/uP/QA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR05MB4209.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(366004)(136003)(376002)(39860400002)(346002)(396003)(8936002)(55016002)(8676002)(36756003)(107886003)(6636002)(2906002)(86362001)(4326008)(66946007)(66476007)(66556008)(110136005)(478600001)(1076003)(186003)(6666004)(8886007)(16526019)(5660300002)(2616005)(956004)(316002)(52116002)(26005)(83380400001)(7696005)(45080400002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: 5JoWgqCxvpgzYSpV39tYGkBiFeCKhpLAKuJBImzlkXxPVm50PVFEZjKN1aiE3wYy8NHos0tmL4GvSGN2rBOCGyYJ1wsG51VYOHSCvZe9ZE9h3tRvdQg+kDttK3lUe4qcUEXbAjIR4uq8+aN4gKObpuw+2V/B6m6RWciwNs/5B45kDyEmZR3S4zdNI/4CNs7TO6z7w/OR5NZhVL66e7JwtaUD0lur2pxWoMyDInZzFeU0BU8L64Ve2PtxeQmJpTyLJGEN+k6fXBoZNkzZauyhPHfZ2gX6ZH0o8gk06GETA0DhZq/szMuw8eq7QExUiYFq3LrqyO5yhTIefstdqh86cUE3oaiFsV0D9OfN0NMy/RpW32U2rivNNdzEfz2sRGRmitqITsEkZQQt1anTbbwI3mgngNkKvwi9UkythYeFa6DKxfuHoNyt2MQcWjBL7KuKQUAKV99mbp/uvjCegtFDQY20t0BA4PMwr68hc4v8Tw+FIwhEuBAkoIZJRBsBxlAs X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 39f8c219-8af7-4388-0c88-08d811d9ec28 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jun 2020 09:44:54.4715 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qhEEgPz14IDpQo+oPAQGNmRIYOAi/PBwRYIKaKNvcRQRaoAuRV4ldnClBMpcqs9SS2ovA8m9A9+pPKVQxleabA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB5859 Subject: [dpdk-dev] [PATCH v1 2/4] common/mlx5: export MR verbs operations 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" The glue verbs operations reg_mr and dereg_mr are wrapped and exported in functions mlx5_common_verbs_reg_mr and mlx5_common_verbs_dereg_mr respectively. The exported functions are added to a new file linux/mlx5_common_verbs.c. Signed-off-by: Ophir Munk Acked-by: Matan Azrad --- drivers/common/mlx5/Makefile | 1 + drivers/common/mlx5/linux/meson.build | 1 + drivers/common/mlx5/linux/mlx5_common_verbs.c | 87 +++++++++++++++++++++++++ drivers/common/mlx5/mlx5_common_mr.c | 27 ++------ drivers/common/mlx5/mlx5_common_mr.h | 8 ++- drivers/common/mlx5/rte_common_mlx5_version.map | 3 + 6 files changed, 104 insertions(+), 23 deletions(-) create mode 100644 drivers/common/mlx5/linux/mlx5_common_verbs.c diff --git a/drivers/common/mlx5/Makefile b/drivers/common/mlx5/Makefile index 4948fef..622bde4 100644 --- a/drivers/common/mlx5/Makefile +++ b/drivers/common/mlx5/Makefile @@ -18,6 +18,7 @@ SRCS-y += mlx5_devx_cmds.c SRCS-y += mlx5_common.c SRCS-y += linux/mlx5_common_os.c SRCS-y += linux/mlx5_nl.c +SRCS-y += linux/mlx5_common_verbs.c SRCS-y += mlx5_common_mp.c SRCS-y += mlx5_common_mr.c ifeq ($(CONFIG_RTE_IBVERBS_LINK_DLOPEN),y) diff --git a/drivers/common/mlx5/linux/meson.build b/drivers/common/mlx5/linux/meson.build index ce065d9..638bb2b 100644 --- a/drivers/common/mlx5/linux/meson.build +++ b/drivers/common/mlx5/linux/meson.build @@ -47,6 +47,7 @@ endif sources += files('mlx5_nl.c') sources += files('mlx5_common_os.c') +sources += files('mlx5_common_verbs.c') if not dlopen_ibverbs sources += files('mlx5_glue.c') endif diff --git a/drivers/common/mlx5/linux/mlx5_common_verbs.c b/drivers/common/mlx5/linux/mlx5_common_verbs.c new file mode 100644 index 0000000..e7e50ad --- /dev/null +++ b/drivers/common/mlx5/linux/mlx5_common_verbs.c @@ -0,0 +1,87 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2020 Mellanox Technologies, Ltd + */ + +#include +#include +#include +#include +#include +#include +#include + +/* Verbs header. */ +/* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */ +#include "mlx5_autoconf.h" +#ifdef PEDANTIC +#pragma GCC diagnostic ignored "-Wpedantic" +#endif +#ifdef HAVE_INFINIBAND_VERBS_H +#include +#endif +#ifdef HAVE_INFINIBAND_MLX5DV_H +#include +#endif +#ifdef PEDANTIC +#pragma GCC diagnostic error "-Wpedantic" +#endif + +#include +#include +#include + +/** + * Register mr. Given protection doamin pointer, pointer to addr and length + * register the memory region. + * + * @param[in] pd + * Pointer to protection domain context. + * @param[in] addr + * Pointer to memory start address. + * @param[in] lentgh + * Length of the memory to register. + * @param[out] pmd_mr + * pmd_mr struct set with lkey, address, length and pointer to mr object + * + * @return + * 0 on successful registration, -1 otherwise + */ +int +mlx5_common_verbs_reg_mr(void *pd, void *addr, size_t length, + struct mlx5_pmd_mr *pmd_mr) +{ + struct ibv_mr *ibv_mr; + + memset(pmd_mr, 0, sizeof(*pmd_mr)); + ibv_mr = mlx5_glue->reg_mr(pd, addr, length, + IBV_ACCESS_LOCAL_WRITE | + (haswell_broadwell_cpu ? 0 : + IBV_ACCESS_RELAXED_ORDERING)); + if (!ibv_mr) + return -1; + + *pmd_mr = (struct mlx5_pmd_mr){ + .lkey = ibv_mr->lkey, + .addr = ibv_mr->addr, + .len = ibv_mr->length, + .obj = (void *)ibv_mr, + }; + return 0; +} + +/** + * Deregister mr. Given the mlx5 pmd MR - deregister the MR + * + * @param[in] pmd_mr + * pmd_mr struct set with lkey, address, length and pointer to mr object + * + */ +void +mlx5_common_verbs_dereg_mr(struct mlx5_pmd_mr *pmd_mr) +{ + if (pmd_mr && pmd_mr->obj != NULL) { + claim_zero(mlx5_glue->dereg_mr(pmd_mr->obj)); + memset(pmd_mr, 0, sizeof(*pmd_mr)); + } +} + diff --git a/drivers/common/mlx5/mlx5_common_mr.c b/drivers/common/mlx5/mlx5_common_mr.c index c68be54..4ce7975 100644 --- a/drivers/common/mlx5/mlx5_common_mr.c +++ b/drivers/common/mlx5/mlx5_common_mr.c @@ -440,8 +440,7 @@ mr_free(struct mlx5_mr *mr) if (mr == NULL) return; DRV_LOG(DEBUG, "freeing MR(%p):", (void *)mr); - if (mr->pmd_mr.obj != NULL) - claim_zero(mlx5_glue->dereg_mr(mr->pmd_mr.obj)); + mlx5_common_verbs_dereg_mr(&mr->pmd_mr); if (mr->ms_bmp != NULL) rte_bitmap_free(mr->ms_bmp); rte_free(mr); @@ -598,7 +597,6 @@ mlx5_mr_create_primary(void *pd, uint32_t ms_n; uint32_t n; size_t len; - struct ibv_mr *ibv_mr; DRV_LOG(DEBUG, "Creating a MR using address (%p)", (void *)addr); /* @@ -767,20 +765,13 @@ mlx5_mr_create_primary(void *pd, * mlx5_alloc_buf_extern() which eventually calls rte_malloc_socket() * through mlx5_alloc_verbs_buf(). */ - ibv_mr = mlx5_glue->reg_mr(pd, (void *)data.start, len, - IBV_ACCESS_LOCAL_WRITE | - (haswell_broadwell_cpu ? 0 : - IBV_ACCESS_RELAXED_ORDERING)); - if (ibv_mr == NULL) { + mlx5_common_verbs_reg_mr(pd, (void *)data.start, len, &mr->pmd_mr); + if (mr->pmd_mr.obj == NULL) { DEBUG("Fail to create an MR for address (%p)", (void *)addr); rte_errno = EINVAL; goto err_mrlock; } - mr->pmd_mr.lkey = ibv_mr->lkey; - mr->pmd_mr.addr = ibv_mr->addr; - mr->pmd_mr.len = ibv_mr->length; - mr->pmd_mr.obj = ibv_mr; MLX5_ASSERT((uintptr_t)mr->pmd_mr.addr == data.start); MLX5_ASSERT(mr->pmd_mr.len); LIST_INSERT_HEAD(&share_cache->mr_list, mr, mr); @@ -1039,7 +1030,6 @@ mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl) struct mlx5_mr * mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id) { - struct ibv_mr *ibv_mr; struct mlx5_mr *mr = NULL; mr = rte_zmalloc_socket(NULL, @@ -1048,21 +1038,14 @@ mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id) RTE_CACHE_LINE_SIZE, socket_id); if (mr == NULL) return NULL; - ibv_mr = mlx5_glue->reg_mr(pd, (void *)addr, len, - IBV_ACCESS_LOCAL_WRITE | - (haswell_broadwell_cpu ? 0 : - IBV_ACCESS_RELAXED_ORDERING)); - if (ibv_mr == NULL) { + mlx5_common_verbs_reg_mr(pd, (void *)addr, len, &mr->pmd_mr); + if (mr->pmd_mr.obj == NULL) { DRV_LOG(WARNING, "Fail to create MR for address (%p)", (void *)addr); rte_free(mr); return NULL; } - mr->pmd_mr.lkey = ibv_mr->lkey; - mr->pmd_mr.addr = ibv_mr->addr; - mr->pmd_mr.len = ibv_mr->length; - mr->pmd_mr.obj = ibv_mr; mr->msl = NULL; /* Mark it is external memory. */ mr->ms_bmp = NULL; mr->ms_n = 1; diff --git a/drivers/common/mlx5/mlx5_common_mr.h b/drivers/common/mlx5/mlx5_common_mr.h index 6f2dcec..cdb8acf 100644 --- a/drivers/common/mlx5/mlx5_common_mr.h +++ b/drivers/common/mlx5/mlx5_common_mr.h @@ -163,5 +163,11 @@ mlx5_mr_create_primary(void *pd, struct mlx5_mr_share_cache *share_cache, struct mr_cache_entry *entry, uintptr_t addr, unsigned int mr_ext_memseg_en); - +__rte_internal +int +mlx5_common_verbs_reg_mr(void *pd, void *addr, size_t length, + struct mlx5_pmd_mr *pmd_mr); +__rte_internal +void +mlx5_common_verbs_dereg_mr(struct mlx5_pmd_mr *pmd_mr); #endif /* RTE_PMD_MLX5_COMMON_MR_H_ */ diff --git a/drivers/common/mlx5/rte_common_mlx5_version.map b/drivers/common/mlx5/rte_common_mlx5_version.map index 350e771..68f1207 100644 --- a/drivers/common/mlx5/rte_common_mlx5_version.map +++ b/drivers/common/mlx5/rte_common_mlx5_version.map @@ -3,6 +3,9 @@ INTERNAL { mlx5_class_get; + mlx5_common_verbs_reg_mr; + mlx5_common_verbs_dereg_mr; + mlx5_create_mr_ext; mlx5_dev_to_pci_addr; From patchwork Tue Jun 16 09:44:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ophir Munk X-Patchwork-Id: 71634 X-Patchwork-Delegate: rasland@nvidia.com 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 ADBAEA04A3; Tue, 16 Jun 2020 11:45:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9E2941BF5B; Tue, 16 Jun 2020 11:45:03 +0200 (CEST) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70057.outbound.protection.outlook.com [40.107.7.57]) by dpdk.org (Postfix) with ESMTP id 5B7A11BEE6 for ; Tue, 16 Jun 2020 11:44:57 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WOhzpCjU0FeW3nqvfaGubQjHSIvDse6q1Q0wTDXOSSfeMOtBJkOqAtFtXfsiwFLWW3PhoDxyVc29yktt3mFdgzrHnLxN7Lx6+4o60akR4MiiYWTE1ypOjg7/u8Iitvo+zL/D89AYmBgtuzsYH7BwePxx5X1NJo1eUmWpAI7gRZIyBNIwEJF8oxyPWvAn431rybM7Pnwl0Gn6lFsLz0OKKpVXstwouhenLCw5oW94+di7YMVYCLEVQj2kP9eXl99b6p7WkFV2qhj4U1e/VmqN5e4OayK+AyvtHQygHMxlArn/3M6EZi9+PIiop1zbBS8XGHlnpoFFZqX/nsi50WZwvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wxlhIKKhNpDTJKBTVw5eJgwjtf1PYj9EXElX4sUkbGQ=; b=L4RAAKXk8IumKO+DrcL8b2vqOKQeR1tCWhRDR++Q7f1X48i67dliK2R5Owgon4fmNpEgS/c4pEWEr75NLg8dbyRAthwCBJnYFNqSitT11jY++S7JTnBbJiXaASJMQlT4c+4j1l10SfaRKibJmA2m4KKVOMCri8iRRWUQe5X/tjQW8uGgNei0/K7cT2on1R19cUDqKdWgKxRX3qMk1MVS7t9RxTx7984p6e7G96Pt6ZnfxY96Bibzgg/sy0trpM9suGR+tRQSdOzPnVsrnGSFl/T6QmVcJbvFcrxzD7UARkuTmOmExvdurxV8ugP+t3pf5NX6EoHQCVM4O3u6K41A3A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wxlhIKKhNpDTJKBTVw5eJgwjtf1PYj9EXElX4sUkbGQ=; b=P6zuYTzTK8Ca8mF7oZM8D7PrDcwbxlsOyFh7wIQewaMC5LVMYEwpq3j3FZHflIvITZZIm/JAFfsfEf+qrfRIHuqN26iQ7Lxm3btUWStAie4/VwTv2hdbebSWXvLpPfXTk/Cp/Ek7XKWP4PMrgIBT+66wncVzex3oZwXW/e4kM2k= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=mellanox.com; Received: from AM0PR05MB4209.eurprd05.prod.outlook.com (2603:10a6:208:61::22) by AM0PR05MB5172.eurprd05.prod.outlook.com (2603:10a6:208:f3::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.26; Tue, 16 Jun 2020 09:44:55 +0000 Received: from AM0PR05MB4209.eurprd05.prod.outlook.com ([fe80::1068:89a9:41d3:b14a]) by AM0PR05MB4209.eurprd05.prod.outlook.com ([fe80::1068:89a9:41d3:b14a%3]) with mapi id 15.20.3088.028; Tue, 16 Jun 2020 09:44:55 +0000 From: Ophir Munk To: dev@dpdk.org, Matan Azrad , Raslan Darawsheh Cc: Ophir Munk Date: Tue, 16 Jun 2020 09:44:45 +0000 Message-Id: <20200616094446.7152-4-ophirmu@mellanox.com> X-Mailer: git-send-email 2.8.4 In-Reply-To: <20200616094446.7152-1-ophirmu@mellanox.com> References: <20200616094446.7152-1-ophirmu@mellanox.com> X-ClientProxiedBy: ZRAP278CA0006.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::16) To AM0PR05MB4209.eurprd05.prod.outlook.com (2603:10a6:208:61::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from mellanox.com (37.142.13.130) by ZRAP278CA0006.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.19 via Frontend Transport; Tue, 16 Jun 2020 09:44:54 +0000 X-Mailer: git-send-email 2.8.4 X-Originating-IP: [37.142.13.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: a6f0a2ef-345a-4374-975a-08d811d9ecde X-MS-TrafficTypeDiagnostic: AM0PR05MB5172: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtFwd X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2; X-Forefront-PRVS: 04362AC73B X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: h/bly2IoDkvR7WVwvr01tlO9FzYmj1Q+1nB6L5Bl8/WULqDWUphWXTxKs1geAu7Pyajg2sGZ1SPPomgd6ufaoOe6n63rXOJ9v55awlENh47x2vD1oHOHWPuVVjtUcsjg5Af/X53B0b9geA2bxVx5R5XSV4vXojsPqk8ElujjoL4d3/CA3+Q51fFVh6bP06/NmQK0+bjktVggOOHuj00aI6BP8lKGQ03hsQzyJBwrEKAeRb+zNj9ehQYWlmS3YsjJHm245lB2/3rkcR/2e5X/BtMyIlO7OrRGg2FZnp66txHUsrP1sunLa6OWtDWqm6VtnDDJ8oM1+dE6Xw5+HUjs+w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR05MB4209.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(39860400002)(136003)(346002)(366004)(376002)(55016002)(186003)(956004)(16526019)(2616005)(5660300002)(8676002)(26005)(2906002)(8936002)(36756003)(6636002)(8886007)(66946007)(110136005)(316002)(86362001)(66476007)(6666004)(83380400001)(7696005)(45080400002)(4326008)(52116002)(107886003)(66556008)(478600001)(1076003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: Bon+qWb35znCrg1O/0aPZ7eSzKar7XMryuFfKczL9FOiSi1cpVxbdBH+MMA2qJwULV9mMi0dEVbYzON0a4jzG3dNigguFo+cv8RxmolDnJqyqlPZWIAA6TEHELJtamsSMGgOXTMk3iZAkBZHkpxUK+RLwDsg8fFiqMkBNuwJzeaQfbxuUCYujLQeQEnm42gPv9Ufl4/8Yj9y6PSbAN/p8NE6cw+yyqYaHkLcKAyZpd2T9Bb1PUvitSKpVq3UJ21JV48yE4weylSYtns5DC7VHhl1lhMi0gGxihcMRH0S/9rIglov1jvWV4ZGi2OByRCZ+JOTy46HaSV/pgc9NOhOgcFqBWfYOTff1t31HXTGYhZypU+SjDzMaz2F3Uk6dUfgn0/N71LNV+2V9QY2wlIXwTCix7g2h1LfSF3wkpSJ95kWIvRZmQIqcTtPiNHnAcmGFoc0X8Fnb3zm5em74APsgOtgy5jJ/kFdcJ80pV0Qq63Lj0m52Fvut/SL9IYGHA3/ X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6f0a2ef-345a-4374-975a-08d811d9ecde X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jun 2020 09:44:55.4959 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KUul4gJ4D602SYBbH0m2JPBBcIZyycGcUWXXjzk51KvzvXGtt0h89WX+hEBaR6LBJqgTOS6sivxIKVDawnqAxg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB5172 Subject: [dpdk-dev] [PATCH v1 3/4] net/mlx5: add MR callbacks in per-device cache 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" Prior to this commit MR operations were verbs based and hard coded under common/mlx5/linux directory. This commit enables upper layers (e.g. net/mlx5) to determine which MR operations to use. For example the net layer could set devx based MR operations in non-Linux environments. The reg_mr and dereg_mr callbacks are added to the global per-device MR cache 'struct mlx5_mr_share_cache'. Signed-off-by: Ophir Munk Acked-by: Matan Azrad --- drivers/common/mlx5/mlx5_common_mr.c | 23 ++++++++++++----------- drivers/common/mlx5/mlx5_common_mr.h | 14 ++++++++++++-- drivers/net/mlx5/linux/mlx5_os.c | 18 ++++++++++++++++++ drivers/net/mlx5/mlx5.c | 2 ++ drivers/net/mlx5/mlx5.h | 2 ++ drivers/net/mlx5/mlx5_mr.c | 6 ++++-- 6 files changed, 50 insertions(+), 15 deletions(-) diff --git a/drivers/common/mlx5/mlx5_common_mr.c b/drivers/common/mlx5/mlx5_common_mr.c index 4ce7975..564d618 100644 --- a/drivers/common/mlx5/mlx5_common_mr.c +++ b/drivers/common/mlx5/mlx5_common_mr.c @@ -435,12 +435,12 @@ mlx5_mr_lookup_cache(struct mlx5_mr_share_cache *share_cache, * Pointer to MR to free. */ static void -mr_free(struct mlx5_mr *mr) +mr_free(struct mlx5_mr *mr, mlx5_dereg_mr_t dereg_mr_cb) { if (mr == NULL) return; DRV_LOG(DEBUG, "freeing MR(%p):", (void *)mr); - mlx5_common_verbs_dereg_mr(&mr->pmd_mr); + dereg_mr_cb(&mr->pmd_mr); if (mr->ms_bmp != NULL) rte_bitmap_free(mr->ms_bmp); rte_free(mr); @@ -490,7 +490,7 @@ mlx5_mr_garbage_collect(struct mlx5_mr_share_cache *share_cache) struct mlx5_mr *mr = mr_next; mr_next = LIST_NEXT(mr, mr); - mr_free(mr); + mr_free(mr, share_cache->dereg_mr_cb); } } @@ -702,7 +702,7 @@ mlx5_mr_create_primary(void *pd, data.start = RTE_ALIGN_FLOOR(addr, msl->page_sz); data.end = data.start + msl->page_sz; rte_mcfg_mem_read_unlock(); - mr_free(mr); + mr_free(mr, share_cache->dereg_mr_cb); goto alloc_resources; } MLX5_ASSERT(data.msl == data_re.msl); @@ -725,7 +725,7 @@ mlx5_mr_create_primary(void *pd, * Must be unlocked before calling rte_free() because * mlx5_mr_mem_event_free_cb() can be called inside. */ - mr_free(mr); + mr_free(mr, share_cache->dereg_mr_cb); return entry->lkey; } /* @@ -760,12 +760,12 @@ mlx5_mr_create_primary(void *pd, mr->ms_bmp_n = len / msl->page_sz; MLX5_ASSERT(ms_idx_shift + mr->ms_bmp_n <= ms_n); /* - * Finally create a verbs MR for the memory chunk. ibv_reg_mr() can be - * called with holding the memory lock because it doesn't use + * Finally create an MR for the memory chunk. Verbs: ibv_reg_mr() can + * be called with holding the memory lock because it doesn't use * mlx5_alloc_buf_extern() which eventually calls rte_malloc_socket() * through mlx5_alloc_verbs_buf(). */ - mlx5_common_verbs_reg_mr(pd, (void *)data.start, len, &mr->pmd_mr); + share_cache->reg_mr_cb(pd, (void *)data.start, len, &mr->pmd_mr); if (mr->pmd_mr.obj == NULL) { DEBUG("Fail to create an MR for address (%p)", (void *)addr); @@ -801,7 +801,7 @@ mlx5_mr_create_primary(void *pd, * calling rte_free() because mlx5_mr_mem_event_free_cb() can be called * inside. */ - mr_free(mr); + mr_free(mr, share_cache->dereg_mr_cb); return UINT32_MAX; } @@ -1028,7 +1028,8 @@ mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl) * Pointer to MR structure on success, NULL otherwise. */ struct mlx5_mr * -mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id) +mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id, + mlx5_reg_mr_t reg_mr_cb) { struct mlx5_mr *mr = NULL; @@ -1038,7 +1039,7 @@ mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id) RTE_CACHE_LINE_SIZE, socket_id); if (mr == NULL) return NULL; - mlx5_common_verbs_reg_mr(pd, (void *)addr, len, &mr->pmd_mr); + reg_mr_cb(pd, (void *)addr, len, &mr->pmd_mr); if (mr->pmd_mr.obj == NULL) { DRV_LOG(WARNING, "Fail to create MR for address (%p)", diff --git a/drivers/common/mlx5/mlx5_common_mr.h b/drivers/common/mlx5/mlx5_common_mr.h index cdb8acf..b23ee66 100644 --- a/drivers/common/mlx5/mlx5_common_mr.h +++ b/drivers/common/mlx5/mlx5_common_mr.h @@ -38,6 +38,14 @@ struct mlx5_pmd_mr { size_t len; void *obj; /* verbs mr object or devx umem object. */ }; + +/** + * mr operations typedef + */ +typedef int (*mlx5_reg_mr_t)(void *pd, void *addr, size_t length, + struct mlx5_pmd_mr *pmd_mr); +typedef void (*mlx5_dereg_mr_t)(struct mlx5_pmd_mr *pmd_mr); + /* Memory Region object. */ struct mlx5_mr { LIST_ENTRY(mlx5_mr) mr; /**< Pointer to the prev/next entry. */ @@ -83,6 +91,8 @@ struct mlx5_mr_share_cache { struct mlx5_mr_btree cache; /* Global MR cache table. */ struct mlx5_mr_list mr_list; /* Registered MR list. */ struct mlx5_mr_list mr_free_list; /* Freed MR list. */ + mlx5_reg_mr_t reg_mr_cb; /* Callback to reg_mr func */ + mlx5_dereg_mr_t dereg_mr_cb; /* Callback to dereg_mr func */ } __rte_packed; /** @@ -155,8 +165,8 @@ mlx5_mr_lookup_list(struct mlx5_mr_share_cache *share_cache, struct mr_cache_entry *entry, uintptr_t addr); __rte_internal struct mlx5_mr * -mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, - int socket_id); +mlx5_create_mr_ext(void *pd, uintptr_t addr, size_t len, int socket_id, + mlx5_reg_mr_t reg_mr_cb); __rte_internal uint32_t mlx5_mr_create_primary(void *pd, diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index 844c6c0..f498d00 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -42,6 +42,7 @@ #include #include #include +#include #include "mlx5_defs.h" #include "mlx5.h" @@ -2321,6 +2322,23 @@ mlx5_os_stats_init(struct rte_eth_dev *dev) rte_free(strings); } +/** + * Set the reg_mr and dereg_mr call backs + * + * @param reg_mr_cb[out] + * Pointer to reg_mr func + * @param dereg_mr_cb[out] + * Pointer to dereg_mr func + * + */ +void +mlx5_os_set_reg_mr_cb(mlx5_reg_mr_t *reg_mr_cb, + mlx5_dereg_mr_t *dereg_mr_cb) +{ + *reg_mr_cb = mlx5_common_verbs_reg_mr; + *dereg_mr_cb = mlx5_common_verbs_dereg_mr; +} + const struct eth_dev_ops mlx5_os_dev_ops = { .dev_configure = mlx5_dev_configure, .dev_start = mlx5_dev_start, diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index b22acbb..5c86f6f 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -713,6 +713,8 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn, err = rte_errno; goto error; } + mlx5_os_set_reg_mr_cb(&sh->share_cache.reg_mr_cb, + &sh->share_cache.dereg_mr_cb); mlx5_os_dev_shared_handler_install(sh); mlx5_flow_aging_init(sh); mlx5_flow_counters_mng_init(sh); diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 94a3667..5bd5acd 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -940,4 +940,6 @@ int mlx5_os_read_dev_stat(struct mlx5_priv *priv, int mlx5_os_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats); int mlx5_os_get_stats_n(struct rte_eth_dev *dev); void mlx5_os_stats_init(struct rte_eth_dev *dev); +void mlx5_os_set_reg_mr_cb(mlx5_reg_mr_t *reg_mr_cb, + mlx5_dereg_mr_t *dereg_mr_cb); #endif /* RTE_PMD_MLX5_H_ */ diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c index c91d6a4..adbe07c 100644 --- a/drivers/net/mlx5/mlx5_mr.c +++ b/drivers/net/mlx5/mlx5_mr.c @@ -276,7 +276,8 @@ mlx5_mr_update_ext_mp_cb(struct rte_mempool *mp, void *opaque, return; DRV_LOG(DEBUG, "port %u register MR for chunk #%d of mempool (%s)", dev->data->port_id, mem_idx, mp->name); - mr = mlx5_create_mr_ext(sh->pd, addr, len, mp->socket_id); + mr = mlx5_create_mr_ext(sh->pd, addr, len, mp->socket_id, + sh->share_cache.reg_mr_cb); if (!mr) { DRV_LOG(WARNING, "port %u unable to allocate a new MR of" @@ -350,7 +351,8 @@ mlx5_dma_map(struct rte_pci_device *pdev, void *addr, } priv = dev->data->dev_private; sh = priv->sh; - mr = mlx5_create_mr_ext(sh->pd, (uintptr_t)addr, len, SOCKET_ID_ANY); + mr = mlx5_create_mr_ext(sh->pd, (uintptr_t)addr, len, SOCKET_ID_ANY, + sh->share_cache.reg_mr_cb); if (!mr) { DRV_LOG(WARNING, "port %u unable to dma map", dev->data->port_id); From patchwork Tue Jun 16 09:44:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ophir Munk X-Patchwork-Id: 71635 X-Patchwork-Delegate: rasland@nvidia.com 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 ED484A04A3; Tue, 16 Jun 2020 11:45:30 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CD2301BF5F; Tue, 16 Jun 2020 11:45:04 +0200 (CEST) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2084.outbound.protection.outlook.com [40.107.20.84]) by dpdk.org (Postfix) with ESMTP id D4AFA1BF26 for ; Tue, 16 Jun 2020 11:44:57 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mZBzl7Z0p1hwPNJxfnjzkFwaJrnVC7IIezrO1MQBSFWfU5NaZQvQt1zbGNH68ubf5ghltXBcRCrHzpYeflr6QsoMdbs4ZMOO03RYZFWUJuvZR12i4rdebQVEKHmkOjoSFTn+SjiDyuC5ax8Dx7KOM+tknzdwOH1Bsz2Zt2pAhT3jwPPdVDlsFN0IBOiaT0P70RAf2ucUTrJwgB3Je3eT9bw/+Jkgy3pf4e/HlOPLWLRZlP6Asa1J9GspwZI0FMvxdlTJfdT+EN7/Pj1Mmb0Y/KfAiZ/E4U4nl3xEQH6xl8tiifppNFYoUeH1sozcWLdrvIO3H9ERSbeoxy6Prgwghw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X0FTTl9+nr+/r1xvOQupDDuus3Hxw1HlaUYHghIF5gQ=; b=mUsTwpnmVA6Wky4HW+lP/ytegxHoMLNoFf2lCQp6LY2DQIGOUUXB3lAZKhRASqQgB2Q4LfswZObcdUTsotgsc/ZKygkrXD0z+Db0G2uNG6+0t4JphtCylSF+HUk9mmV1yMFjGRsgj/lA+wpCX93WqGJ8RLxKzLDMkZyk+dA4vI8cuW889fXYax4eWdl6okagkqogi2LxPIljI9k+Keo8NjqaJvwlCpbXL+u7okSTspIi0TVhGBQQLfmWDwK3wujAhldj993RbKBC7TsjKc9bq+BUAroBatoRoMj4aa9yI+axKqG5ihTxvLsDDI7dORrYPgClyJXIE78nae7ZhrwYkg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X0FTTl9+nr+/r1xvOQupDDuus3Hxw1HlaUYHghIF5gQ=; b=TPTtYfIKR2B9uagRSZzR6kkjKwl26hWKEPMbKWxTvNxQwTqT6IocrBozewj+CW7I10cYVJBhm4OIhzEfCzb7k9wPOdq0bAGqkKErZ1Ww688re49c6ox+3H/85XXZpyQ92fCZd9gEVP20G8MgfwG8hHrs5sAc6eo/X/fNrvYzduk= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=mellanox.com; Received: from AM0PR05MB4209.eurprd05.prod.outlook.com (2603:10a6:208:61::22) by AM0PR05MB5859.eurprd05.prod.outlook.com (2603:10a6:208:124::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.22; Tue, 16 Jun 2020 09:44:56 +0000 Received: from AM0PR05MB4209.eurprd05.prod.outlook.com ([fe80::1068:89a9:41d3:b14a]) by AM0PR05MB4209.eurprd05.prod.outlook.com ([fe80::1068:89a9:41d3:b14a%3]) with mapi id 15.20.3088.028; Tue, 16 Jun 2020 09:44:56 +0000 From: Ophir Munk To: dev@dpdk.org, Matan Azrad , Raslan Darawsheh Cc: Ophir Munk Date: Tue, 16 Jun 2020 09:44:46 +0000 Message-Id: <20200616094446.7152-5-ophirmu@mellanox.com> X-Mailer: git-send-email 2.8.4 In-Reply-To: <20200616094446.7152-1-ophirmu@mellanox.com> References: <20200616094446.7152-1-ophirmu@mellanox.com> X-ClientProxiedBy: ZRAP278CA0006.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::16) To AM0PR05MB4209.eurprd05.prod.outlook.com (2603:10a6:208:61::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from mellanox.com (37.142.13.130) by ZRAP278CA0006.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.19 via Frontend Transport; Tue, 16 Jun 2020 09:44:55 +0000 X-Mailer: git-send-email 2.8.4 X-Originating-IP: [37.142.13.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 60c2539a-34d7-4752-0bbf-08d811d9ed62 X-MS-TrafficTypeDiagnostic: AM0PR05MB5859: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtFwd X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:800; X-Forefront-PRVS: 04362AC73B X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eRclvkSRt5C/wdoVX0nEyS1TgsIj3XarZ0wrhzr7tlkBFnMC4ubhhQnMpWvW7GHrgBGPn15WVUEpXgeZAgPpgxNHwxPmzLlKhOCA4SNFzwfeQ43In2KW26NKo136hBO6+iCTjVLSZiB2A8e2QeFx4ReiV//1Uo4TOgrXl2MezjJhv0E2imkEDohyAoKZ4Xq3W7Jnb9aqeiwU/9FSKrOv+Luk5x3pPrNRglViXbPP5p/HQ4q6lyD8m+gNGZT+LCgONvjlxnyWDkWMUD5kA12Ft0vNvSiw99mYC39qkhpjtgBgSc1WDpulS6HcM4L8nBG4oJj2yKbmPaZ/eH40gwIinQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR05MB4209.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(366004)(136003)(376002)(39860400002)(346002)(396003)(8936002)(55016002)(8676002)(36756003)(107886003)(6636002)(2906002)(86362001)(4326008)(66946007)(66476007)(66556008)(110136005)(478600001)(1076003)(186003)(6666004)(8886007)(16526019)(5660300002)(2616005)(956004)(316002)(52116002)(26005)(83380400001)(7696005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: onyiy4upsGiuBEkALsPG5C8kVMukpKI6XNuEEPEMHsqi3mvhExqcRlqHdGvdhzJQ0V+5DQegl40YD9QP9833unSg5hU2mHWmzo1rbeHF+2O/WbcflRMXQX2uGYeTyW+mwfty1UHupo/CdXSOHHZGRWjCZoUifC7g8uffo4cFvOn3Cj7C1+GdMmy25owWFulqWVAaMwGFMVNhjpsczL0qbrJjQCmtsDGePMTCzkttw4kHy3z6FNAGJQzYwu2yQlMUPQsri53L/Nu0HySs1chNhIvfW7okwA38LUwdZnk5BNG3aWKm9E/mIBFOwkflEeR5kC2KvBe71rAbKMxhwfjju8b08bRY4mXenH2VNnCcG2uOmaJ/N1T++4efx8+VF3flBVYXFYIrbuTAlO+fPa1Ohed92tRbqPeBzoz9AoJaMbEVgC7QC0jJ3CTUiVOIECj0olOgZEnzW5EEqYFGELAmWh+VEQB9v7OmfUAP28Sor1C4ZhK52O5OBkOGQ/8VtPpa X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 60c2539a-34d7-4752-0bbf-08d811d9ed62 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jun 2020 09:44:56.3115 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: CMm51Gnj5B0vxaVy9phcw3XTFoHqqXoR1G/DzooiZmk6jK9F7oE+f2B7vmRESWGZIJu+tKg3YOAa1OxMNY9S2g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB5859 Subject: [dpdk-dev] [PATCH v1 4/4] mlx5/linux: add MR callbacks to verbs operations struct 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" Create a set of verbs callbacks in 'struct mlx5_verbs_ops' and add MR operations to it (file net/mlx5/linux/mlx5_verbs.c). Signed-off-by: Ophir Munk Acked-by: Matan Azrad --- drivers/net/mlx5/Makefile | 1 + drivers/net/mlx5/linux/meson.build | 1 + drivers/net/mlx5/linux/mlx5_os.c | 5 ++- drivers/net/mlx5/linux/mlx5_verbs.c | 78 +++++++++++++++++++++++++++++++++++++ drivers/net/mlx5/linux/mlx5_verbs.h | 15 +++++++ 5 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 drivers/net/mlx5/linux/mlx5_verbs.c create mode 100644 drivers/net/mlx5/linux/mlx5_verbs.h diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile index fada6fb..a458402 100644 --- a/drivers/net/mlx5/Makefile +++ b/drivers/net/mlx5/Makefile @@ -34,6 +34,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_utils.c SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += linux/mlx5_socket.c SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += linux/mlx5_os.c SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += linux/mlx5_ethdev_os.c +SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += linux/mlx5_verbs.c # Basic CFLAGS. CFLAGS += -O3 diff --git a/drivers/net/mlx5/linux/meson.build b/drivers/net/mlx5/linux/meson.build index ad908c4..14eed03 100644 --- a/drivers/net/mlx5/linux/meson.build +++ b/drivers/net/mlx5/linux/meson.build @@ -6,5 +6,6 @@ sources += files( 'mlx5_socket.c', 'mlx5_os.c', 'mlx5_ethdev_os.c', + 'mlx5_verbs.c', ) diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index f498d00..3792371 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -52,6 +52,7 @@ #include "mlx5_mr.h" #include "mlx5_flow.h" #include "rte_pmd_mlx5.h" +#include "mlx5_verbs.h" #define MLX5_TAGS_HLIST_ARRAY_SIZE 8192 @@ -2335,8 +2336,8 @@ void mlx5_os_set_reg_mr_cb(mlx5_reg_mr_t *reg_mr_cb, mlx5_dereg_mr_t *dereg_mr_cb) { - *reg_mr_cb = mlx5_common_verbs_reg_mr; - *dereg_mr_cb = mlx5_common_verbs_dereg_mr; + *reg_mr_cb = mlx5_verbs_ops.reg_mr; + *dereg_mr_cb = mlx5_verbs_ops.dereg_mr; } const struct eth_dev_ops mlx5_os_dev_ops = { diff --git a/drivers/net/mlx5/linux/mlx5_verbs.c b/drivers/net/mlx5/linux/mlx5_verbs.c new file mode 100644 index 0000000..8e42ec8 --- /dev/null +++ b/drivers/net/mlx5/linux/mlx5_verbs.c @@ -0,0 +1,78 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2020 Mellanox Technologies, Ltd + */ + +#include +#include +#include +#include +#include +#include +#include + +/* Verbs header. */ +/* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */ +#include "mlx5_autoconf.h" +#ifdef PEDANTIC +#pragma GCC diagnostic ignored "-Wpedantic" +#endif +#ifdef HAVE_INFINIBAND_VERBS_H +#include +#endif +#ifdef HAVE_INFINIBAND_MLX5DV_H +#include +#endif +#ifdef PEDANTIC +#pragma GCC diagnostic error "-Wpedantic" +#endif + +#include +#include +#include +#include + +#include +#include +#include +#include +/** + * Register mr. Given protection doamin pointer, pointer to addr and length + * register the memory region. + * + * @param[in] pd + * Pointer to protection domain context. + * @param[in] addr + * Pointer to memory start address. + * @param[in] lentgh + * Length of the memory to register. + * @param[out] pmd_mr + * pmd_mr struct set with lkey, address, length and pointer to mr object + * + * @return + * 0 on successful registration, -1 otherwise + */ +static int +mlx5_reg_mr(void *pd, void *addr, size_t length, + struct mlx5_pmd_mr *pmd_mr) +{ + return mlx5_common_verbs_reg_mr(pd, addr, length, pmd_mr); +} + +/** + * Deregister mr. Given the mlx5 pmd MR - deregister the MR + * + * @param[in] pmd_mr + * pmd_mr struct set with lkey, address, length and pointer to mr object + * + */ +static void +mlx5_dereg_mr(struct mlx5_pmd_mr *pmd_mr) +{ + mlx5_common_verbs_dereg_mr(pmd_mr); +} + +/* verbs operations. */ +const struct mlx5_verbs_ops mlx5_verbs_ops = { + .reg_mr = mlx5_reg_mr, + .dereg_mr = mlx5_dereg_mr, +}; diff --git a/drivers/net/mlx5/linux/mlx5_verbs.h b/drivers/net/mlx5/linux/mlx5_verbs.h new file mode 100644 index 0000000..4f0b637 --- /dev/null +++ b/drivers/net/mlx5/linux/mlx5_verbs.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2020 Mellanox Technologies, Ltd + */ + +#ifndef RTE_PMD_MLX5_VERBS_H_ +#define RTE_PMD_MLX5_VERBS_H_ + +struct mlx5_verbs_ops { + mlx5_reg_mr_t reg_mr; + mlx5_dereg_mr_t dereg_mr; +}; + +/* Verbs ops struct */ +extern const struct mlx5_verbs_ops mlx5_verbs_ops; +#endif /* RTE_PMD_MLX5_VERBS_H_ */