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. */