From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4AD29A0C3F for ; Sat, 12 Jun 2021 01:21:16 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 414114003F; Sat, 12 Jun 2021 01:21:16 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1anam02on2055.outbound.protection.outlook.com [40.107.96.55]) by mails.dpdk.org (Postfix) with ESMTP id 083DA4111C for ; Sat, 12 Jun 2021 01:21:15 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dsHJCYqqP74NB3dIlSTFnEdVrcdiSsG8y0RszVh7JQ8O0euFs4bVTsHqJME2q2v8Lc9ftmKOpcMyr1xmTOUm9OP/pvefpC3s81o7P/8f8uIrzxHlAH3s+rSbLZ4VCuUObW1ibVN0EppLmx9RPl1UI+kYe2t7VODeadWVd1U3QM3T/2ZL+zwrRh+vg0CAfwyt6moicxbQlU1aS+eZ81uo89BmI40w3k/KYakUoQRI2m08WKLAFAZkEK5T7mRe4PLFOne0Eco6dmxFUcPoWIQj2P1V2mYY4cBs1bcUkeU9/nGS5T/ovMOGuBVqZ7o7i0gl5ipDlpPzGD5MJBBMOzGbaw== 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=Qo0w1r0egDrJqO/zx789bW0ccGUlHPd+ethQ/5r80Xg=; b=ZAqNfffOlr9wRoea3PqiEcf02Cq0+R3mN3nmjpXpdyMIxsADfgbo1ZJuFAQk9oJIA+g4L6NgvkDqk1UnvsIuJQZYctHrQsUe0+IEBW0D2Th3qQ+vLd08XMn5y2m7xOMLQ/ncz6+r5g+p6U4UOeWcDezSfP1oS761PV1PUqWoenPyMpzJ+8Am9Xy6Sd81zg47ODp/ph1I7gYPrO9qAJVJNQflHehjHxt2wQSIIGy+uhGg9HDV65fW2UvIb0y+PxPKK1Hoo3dIloSr8X13/gj8Rbl5pduYsi+PZfOVSZyf0lY8sxk9XlpClXUxjuSpufUwEX3im1iBrhP3609CLRZZzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Qo0w1r0egDrJqO/zx789bW0ccGUlHPd+ethQ/5r80Xg=; b=mzNb9JBBqxMF3QRJWHzy4zc5rOWIEF+vS+eqv6NRoSo5Op/Y9rbgB5VRcWTM+d9pp8A/8MeLLOCNwI1uMf1k0cZIUTlCLBaQXPUARudW+Mi1y0Dl3P9o7BOv0AFOpvhORAaxZvtmo8L4UQNgAyfg7kwBOZzghECA+5jtiuceaScDmlwW5kYYHGpE4GqrKbJ/JwNSZ4Z9UA1YhqYRuapH9vPP0MPsxAuINF88+yPV03p8f6w3iIrXmWt2/BndmSJWvHmWED+dR/OjNq80lK3xfwczz/d212SYQOjHQc1GGYSuPfrv/waYdeFyO95do6YxhZUfm0lvbeudMcmiK0fsFQ== Received: from DS7PR03CA0288.namprd03.prod.outlook.com (2603:10b6:5:3ad::23) by CY4PR12MB1800.namprd12.prod.outlook.com (2603:10b6:903:122::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.24; Fri, 11 Jun 2021 23:21:13 +0000 Received: from DM6NAM11FT038.eop-nam11.prod.protection.outlook.com (2603:10b6:5:3ad:cafe::b8) by DS7PR03CA0288.outlook.office365.com (2603:10b6:5:3ad::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21 via Frontend Transport; Fri, 11 Jun 2021 23:21:13 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by DM6NAM11FT038.mail.protection.outlook.com (10.13.173.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4219.21 via Frontend Transport; Fri, 11 Jun 2021 23:21:12 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 11 Jun 2021 23:21:10 +0000 From: Xueming Li To: Bing Zhao CC: Luca Boccassi , Viacheslav Ovsiienko , dpdk stable Date: Sat, 12 Jun 2021 07:04:27 +0800 Message-ID: <20210611230433.8208-173-xuemingl@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210611230433.8208-1-xuemingl@nvidia.com> References: <20210510160258.30982-229-xuemingl@nvidia.com> <20210611230433.8208-1-xuemingl@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL105.nvidia.com (172.20.187.12) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2d478c00-b28e-46c4-2901-08d92d2f9aa0 X-MS-TrafficTypeDiagnostic: CY4PR12MB1800: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xuIU3u2Absj/BC5nI3nE0uZTiWU3sVgkdWvQxUl2P1aFiDQhi5dyV1ISQPjR3ORmyGklsPZDGVIhnKWFp1xwJDwxtAB6XLIp/H7T+Ltdj2vQeBL1dy0a4mvyKb7S9yZN3caRM/JohgyjtYcTu6CJc+/tPdwqnl8/5r49sjl+m2aB4ai5xCj4xRBW6qPc/P2kfB+x4rEfm/79lN4ctqEMb3rJsJylU1uWQWoMk1UwXeSXz2zQVPX6R/7Xzjw0jaGL04uMHssX0CS9grUabEbS9SRJdv4wXEE5grI4g2uvmOBWy6Oi2C6yetXvK1pamWxgLm4aPlEeLhy9ck3VnLP8QTdUIIoiNt1tjfSux0YLec0YfRDHXxQGp9U7I9Dku+Ql0qj1Eti4kRSYL34sH21f9zbFi3KDBrb/zus9a9tNZ63J0ABbDwosksMcuRWrP9LEJcgQtYZNktI7njgVaxitGyZBddYCuoILridDheOeeDKdbPzuvtr13ZhYGT+tAZXtwk3hp82YEUfuOLlR2hyS9ai2jd9RGNNuwgCAc5sF3XWRCKAdtNFcmGgE9o0WEqAab78bU+PRCFKmZU2GKhw74KL1Vpt+hxP9ga8cbXmQwLec4BljbztMt6Mg9hNHRkMl1VefrhH2pGtZYZrdfOG7GZBYi150d/9+yE5taS2FFIhpk+un+JpTWse6fctvkTnNT2B2bZ+4V0KkqBESvfdTlq4LYf4E9OIxpAIBNCvDySNSt8IQqkqgHPoqRH3azpZZ55S1OiCOVvtjqbul1wxoV3/V0/CPr0Qe4CZpdc7+6hmEMJtuZKXGYYmcDmhqKwSg X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(396003)(376002)(39860400002)(346002)(136003)(36840700001)(46966006)(54906003)(966005)(36756003)(53546011)(7636003)(70586007)(316002)(4326008)(82740400003)(6862004)(55016002)(36906005)(336012)(70206006)(478600001)(6286002)(83380400001)(426003)(37006003)(2616005)(1076003)(82310400003)(86362001)(2906002)(30864003)(6666004)(5660300002)(47076005)(36860700001)(26005)(6636002)(7696005)(186003)(8676002)(16526019)(356005)(8936002); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jun 2021 23:21:12.9306 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2d478c00-b28e-46c4-2901-08d92d2f9aa0 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DM6NAM11FT038.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1800 Subject: [dpdk-stable] patch 'net/mlx5: fix loopback for Direct Verbs queue' has been queued to stable release 20.11.2 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to stable release 20.11.2 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 06/14/21. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/steevenlee/dpdk This queued commit can be viewed at: https://github.com/steevenlee/dpdk/commit/83fcaa37fe82555e4b9d3dc726882aef259780b9 Thanks. Xueming Li --- >From 83fcaa37fe82555e4b9d3dc726882aef259780b9 Mon Sep 17 00:00:00 2001 From: Bing Zhao Date: Mon, 17 May 2021 18:18:41 +0300 Subject: [PATCH] net/mlx5: fix loopback for Direct Verbs queue Cc: Luca Boccassi [ upstream commit 23233fd63a15e5cde5bae4f26f78f4d679033a7b ] In the past, all the queues and other hardware objects were created through Verbs interface. Currently, most of the objects creation are migrated to Devx interface by default, including queues. Only when the DV is disabled by device arg or eswitch is enabled, all or some of the objects are created through Verbs interface. When using Devx interface to create queues, the kernel driver behavior is different from the case using Verbs. The Tx loopback cannot work properly even if the Tx and Rx queues are configured with loopback attribute. To fix the support self loopback for Tx, a Verbs dummy queue pair needs to be created to trigger the kernel to enable the global loopback capability. This is only required when TIR is created for Rx and loopback is needed. Only CQ and QP are needed for this case, no WQ(RQ) needs to be created. Bugzilla ID: 645 Fixes: 6deb19e1b2d2 ("net/mlx5: separate Rx queue object creations") Signed-off-by: Bing Zhao Acked-by: Viacheslav Ovsiienko --- drivers/net/mlx5/linux/mlx5_os.c | 5 +- drivers/net/mlx5/linux/mlx5_verbs.c | 121 ++++++++++++++++++++++++++++ drivers/net/mlx5/linux/mlx5_verbs.h | 2 + drivers/net/mlx5/mlx5.h | 11 +++ drivers/net/mlx5/mlx5_devx.c | 2 + drivers/net/mlx5/mlx5_trigger.c | 10 +++ 6 files changed, 150 insertions(+), 1 deletion(-) diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index 22fbe30e05..800df92997 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -1508,7 +1508,10 @@ err_secondary: /* Use specific wrappers for Tx object. */ priv->obj_ops.txq_obj_new = mlx5_os_txq_obj_new; priv->obj_ops.txq_obj_release = mlx5_os_txq_obj_release; - + priv->obj_ops.lb_dummy_queue_create = + mlx5_rxq_ibv_obj_dummy_lb_create; + priv->obj_ops.lb_dummy_queue_release = + mlx5_rxq_ibv_obj_dummy_lb_release; } else { priv->obj_ops = ibv_obj_ops; } diff --git a/drivers/net/mlx5/linux/mlx5_verbs.c b/drivers/net/mlx5/linux/mlx5_verbs.c index 6b98a4c166..689c523ec8 100644 --- a/drivers/net/mlx5/linux/mlx5_verbs.c +++ b/drivers/net/mlx5/linux/mlx5_verbs.c @@ -1053,6 +1053,125 @@ error: return -rte_errno; } +/* + * Create the dummy QP with minimal resources for loopback. + * + * @param dev + * Pointer to Ethernet device. + * + * @return + * 0 on success, a negative errno value otherwise and rte_errno is set. + */ +int +mlx5_rxq_ibv_obj_dummy_lb_create(struct rte_eth_dev *dev) +{ +#if defined(HAVE_IBV_DEVICE_TUNNEL_SUPPORT) && defined(HAVE_IBV_FLOW_DV_SUPPORT) + struct mlx5_priv *priv = dev->data->dev_private; + struct mlx5_dev_ctx_shared *sh = priv->sh; + struct ibv_context *ctx = sh->ctx; + struct mlx5dv_qp_init_attr qp_init_attr = {0}; + struct { + struct ibv_cq_init_attr_ex ibv; + struct mlx5dv_cq_init_attr mlx5; + } cq_attr = {{0}}; + + if (dev->data->dev_conf.lpbk_mode) { + /* Allow packet sent from NIC loop back w/o source MAC check. */ + qp_init_attr.comp_mask |= + MLX5DV_QP_INIT_ATTR_MASK_QP_CREATE_FLAGS; + qp_init_attr.create_flags |= + MLX5DV_QP_CREATE_TIR_ALLOW_SELF_LOOPBACK_UC; + } else { + return 0; + } + /* Only need to check refcnt, 0 after "sh" is allocated. */ + if (!!(__atomic_fetch_add(&sh->self_lb.refcnt, 1, __ATOMIC_RELAXED))) { + MLX5_ASSERT(sh->self_lb.ibv_cq && sh->self_lb.qp); + priv->lb_used = 1; + return 0; + } + cq_attr.ibv = (struct ibv_cq_init_attr_ex){ + .cqe = 1, + .channel = NULL, + .comp_mask = 0, + }; + cq_attr.mlx5 = (struct mlx5dv_cq_init_attr){ + .comp_mask = 0, + }; + /* Only CQ is needed, no WQ(RQ) is required in this case. */ + sh->self_lb.ibv_cq = mlx5_glue->cq_ex_to_cq(mlx5_glue->dv_create_cq(ctx, + &cq_attr.ibv, + &cq_attr.mlx5)); + if (!sh->self_lb.ibv_cq) { + DRV_LOG(ERR, "Port %u cannot allocate CQ for loopback.", + dev->data->port_id); + rte_errno = errno; + goto error; + } + sh->self_lb.qp = mlx5_glue->dv_create_qp(ctx, + &(struct ibv_qp_init_attr_ex){ + .qp_type = IBV_QPT_RAW_PACKET, + .comp_mask = IBV_QP_INIT_ATTR_PD, + .pd = sh->pd, + .send_cq = sh->self_lb.ibv_cq, + .recv_cq = sh->self_lb.ibv_cq, + .cap.max_recv_wr = 1, + }, + &qp_init_attr); + if (!sh->self_lb.qp) { + DRV_LOG(DEBUG, "Port %u cannot allocate QP for loopback.", + dev->data->port_id); + rte_errno = errno; + goto error; + } + priv->lb_used = 1; + return 0; +error: + if (sh->self_lb.ibv_cq) { + claim_zero(mlx5_glue->destroy_cq(sh->self_lb.ibv_cq)); + sh->self_lb.ibv_cq = NULL; + } + (void)__atomic_sub_fetch(&sh->self_lb.refcnt, 1, __ATOMIC_RELAXED); + return -rte_errno; +#else + RTE_SET_USED(dev); + return 0; +#endif +} + +/* + * Release the dummy queue resources for loopback. + * + * @param dev + * Pointer to Ethernet device. + */ +void +mlx5_rxq_ibv_obj_dummy_lb_release(struct rte_eth_dev *dev) +{ +#if defined(HAVE_IBV_DEVICE_TUNNEL_SUPPORT) && defined(HAVE_IBV_FLOW_DV_SUPPORT) + struct mlx5_priv *priv = dev->data->dev_private; + struct mlx5_dev_ctx_shared *sh = priv->sh; + + if (!priv->lb_used) + return; + MLX5_ASSERT(__atomic_load_n(&sh->self_lb.refcnt, __ATOMIC_RELAXED)); + if (!(__atomic_sub_fetch(&sh->self_lb.refcnt, 1, __ATOMIC_RELAXED))) { + if (sh->self_lb.qp) { + claim_zero(mlx5_glue->destroy_qp(sh->self_lb.qp)); + sh->self_lb.qp = NULL; + } + if (sh->self_lb.ibv_cq) { + claim_zero(mlx5_glue->destroy_cq(sh->self_lb.ibv_cq)); + sh->self_lb.ibv_cq = NULL; + } + } + priv->lb_used = 0; +#else + RTE_SET_USED(dev); + return; +#endif +} + /** * Release an Tx verbs queue object. * @@ -1082,4 +1201,6 @@ struct mlx5_obj_ops ibv_obj_ops = { .txq_obj_new = mlx5_txq_ibv_obj_new, .txq_obj_modify = mlx5_ibv_modify_qp, .txq_obj_release = mlx5_txq_ibv_obj_release, + .lb_dummy_queue_create = NULL, + .lb_dummy_queue_release = NULL, }; diff --git a/drivers/net/mlx5/linux/mlx5_verbs.h b/drivers/net/mlx5/linux/mlx5_verbs.h index 0670f6c47e..e4975051d9 100644 --- a/drivers/net/mlx5/linux/mlx5_verbs.h +++ b/drivers/net/mlx5/linux/mlx5_verbs.h @@ -14,6 +14,8 @@ struct mlx5_verbs_ops { int mlx5_txq_ibv_obj_new(struct rte_eth_dev *dev, uint16_t idx); void mlx5_txq_ibv_obj_release(struct mlx5_txq_obj *txq_obj); +int mlx5_rxq_ibv_obj_dummy_lb_create(struct rte_eth_dev *dev); +void mlx5_rxq_ibv_obj_dummy_lb_release(struct rte_eth_dev *dev); /* Verbs ops struct */ extern const struct mlx5_verbs_ops mlx5_verbs_ops; diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 9437f45480..831838768a 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -269,6 +269,13 @@ struct mlx5_drop { struct mlx5_rxq_obj *rxq; /* Rx queue object. */ }; +/* Loopback dummy queue resources required due to Verbs API. */ +struct mlx5_lb_ctx { + struct ibv_qp *qp; /* QP object. */ + void *ibv_cq; /* Completion queue. */ + uint16_t refcnt; /* Reference count for representors. */ +}; + #define MLX5_COUNTERS_PER_POOL 512 #define MLX5_MAX_PENDING_QUERIES 4 #define MLX5_CNT_CONTAINER_RESIZE 64 @@ -751,6 +758,7 @@ struct mlx5_dev_ctx_shared { void *devx_rx_uar; /* DevX UAR for Rx. */ struct mlx5_aso_age_mng *aso_age_mng; /* Management data for aging mechanism using ASO Flow Hit. */ + struct mlx5_lb_ctx self_lb; /* QP to enable self loopback for Devx. */ struct mlx5_dev_shared_port port[]; /* per device port data array. */ }; @@ -915,6 +923,8 @@ struct mlx5_obj_ops { int (*txq_obj_modify)(struct mlx5_txq_obj *obj, enum mlx5_txq_modify_type type, uint8_t dev_port); void (*txq_obj_release)(struct mlx5_txq_obj *txq_obj); + int (*lb_dummy_queue_create)(struct rte_eth_dev *dev); + void (*lb_dummy_queue_release)(struct rte_eth_dev *dev); }; #define MLX5_RSS_HASH_FIELDS_LEN RTE_DIM(mlx5_rss_hash_fields) @@ -938,6 +948,7 @@ struct mlx5_priv { unsigned int mtr_en:1; /* Whether support meter. */ unsigned int mtr_reg_share:1; /* Whether support meter REG_C share. */ unsigned int sampler_en:1; /* Whether support sampler. */ + unsigned int lb_used:1; /* Loopback queue is referred to. */ uint16_t domain_id; /* Switch domain identifier. */ uint16_t vport_id; /* Associated VF vport index (if any). */ uint32_t vport_meta_tag; /* Used for vport index match ove VF LAG. */ diff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c index 377362e321..2d1ce4d556 100644 --- a/drivers/net/mlx5/mlx5_devx.c +++ b/drivers/net/mlx5/mlx5_devx.c @@ -1567,4 +1567,6 @@ struct mlx5_obj_ops devx_obj_ops = { .txq_obj_new = mlx5_txq_devx_obj_new, .txq_obj_modify = mlx5_devx_modify_sq, .txq_obj_release = mlx5_txq_devx_obj_release, + .lb_dummy_queue_create = NULL, + .lb_dummy_queue_release = NULL, }; diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index bd029154f8..0c267dce06 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -1066,6 +1066,12 @@ mlx5_dev_start(struct rte_eth_dev *dev) dev->data->port_id, strerror(rte_errno)); goto error; } + if ((priv->config.devx && priv->config.dv_flow_en && + priv->config.dest_tir) && priv->obj_ops.lb_dummy_queue_create) { + ret = priv->obj_ops.lb_dummy_queue_create(dev); + if (ret) + goto error; + } ret = mlx5_txq_start(dev); if (ret) { DRV_LOG(ERR, "port %u Tx queue allocation failed: %s", @@ -1146,6 +1152,8 @@ error: mlx5_traffic_disable(dev); mlx5_txq_stop(dev); mlx5_rxq_stop(dev); + if (priv->obj_ops.lb_dummy_queue_release) + priv->obj_ops.lb_dummy_queue_release(dev); mlx5_txpp_stop(dev); /* Stop last. */ rte_errno = ret; /* Restore rte_errno. */ return -rte_errno; @@ -1183,6 +1191,8 @@ mlx5_dev_stop(struct rte_eth_dev *dev) priv->sh->port[priv->dev_port - 1].devx_ih_port_id = RTE_MAX_ETHPORTS; mlx5_txq_stop(dev); mlx5_rxq_stop(dev); + if (priv->obj_ops.lb_dummy_queue_release) + priv->obj_ops.lb_dummy_queue_release(dev); mlx5_txpp_stop(dev); return 0; -- 2.25.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2021-06-12 06:54:00.916760800 +0800 +++ 0173-net-mlx5-fix-loopback-for-Direct-Verbs-queue.patch 2021-06-12 06:53:56.690000000 +0800 @@ -1 +1 @@ -From 23233fd63a15e5cde5bae4f26f78f4d679033a7b Mon Sep 17 00:00:00 2001 +From 83fcaa37fe82555e4b9d3dc726882aef259780b9 Mon Sep 17 00:00:00 2001 @@ -4,0 +5,3 @@ +Cc: Luca Boccassi + +[ upstream commit 23233fd63a15e5cde5bae4f26f78f4d679033a7b ] @@ -25 +27,0 @@ -Cc: stable@dpdk.org @@ -39 +41 @@ -index ef7ccba5de..534a56a555 100644 +index 22fbe30e05..800df92997 100644 @@ -42 +44,2 @@ -@@ -1632,7 +1632,10 @@ err_secondary: +@@ -1508,7 +1508,10 @@ err_secondary: + /* Use specific wrappers for Tx object. */ @@ -45 +47,0 @@ - mlx5_queue_counter_id_prepare(eth_dev); @@ -55 +57 @@ -index 0b0759f33f..d4fa202ac4 100644 +index 6b98a4c166..689c523ec8 100644 @@ -58 +60 @@ -@@ -1055,6 +1055,125 @@ error: +@@ -1053,6 +1053,125 @@ error: @@ -184 +186 @@ -@@ -1084,4 +1203,6 @@ struct mlx5_obj_ops ibv_obj_ops = { +@@ -1082,4 +1201,6 @@ struct mlx5_obj_ops ibv_obj_ops = { @@ -192 +194 @@ -index 76a79bf4f4..f7e8e2fe98 100644 +index 0670f6c47e..e4975051d9 100644 @@ -195 +197 @@ -@@ -9,6 +9,8 @@ +@@ -14,6 +14,8 @@ struct mlx5_verbs_ops { @@ -203 +205 @@ - extern const struct mlx5_mr_ops mlx5_mr_verbs_ops; + extern const struct mlx5_verbs_ops mlx5_verbs_ops; @@ -205 +207 @@ -index b8a29dd369..32b2817bf2 100644 +index 9437f45480..831838768a 100644 @@ -208 +210 @@ -@@ -287,6 +287,13 @@ struct mlx5_drop { +@@ -269,6 +269,13 @@ struct mlx5_drop { @@ -222,4 +224,4 @@ -@@ -1128,6 +1135,7 @@ struct mlx5_dev_ctx_shared { - /* Meter management structure. */ - struct mlx5_aso_ct_pools_mng *ct_mng; - /* Management data for ASO connection tracking. */ +@@ -751,6 +758,7 @@ struct mlx5_dev_ctx_shared { + void *devx_rx_uar; /* DevX UAR for Rx. */ + struct mlx5_aso_age_mng *aso_age_mng; + /* Management data for aging mechanism using ASO Flow Hit. */ @@ -230 +232 @@ -@@ -1287,6 +1295,8 @@ struct mlx5_obj_ops { +@@ -915,6 +923,8 @@ struct mlx5_obj_ops { @@ -239,2 +241 @@ -@@ -1316,6 +1326,7 @@ struct mlx5_priv { - unsigned int sampler_en:1; /* Whether support sampler. */ +@@ -938,6 +948,7 @@ struct mlx5_priv { @@ -242,0 +244 @@ + unsigned int sampler_en:1; /* Whether support sampler. */ @@ -248 +250 @@ -index 531a81d7fa..78b88f99b4 100644 +index 377362e321..2d1ce4d556 100644 @@ -251 +253 @@ -@@ -1188,4 +1188,6 @@ struct mlx5_obj_ops devx_obj_ops = { +@@ -1567,4 +1567,6 @@ struct mlx5_obj_ops devx_obj_ops = { @@ -259 +261 @@ -index 879d3171e9..ae7fcca229 100644 +index bd029154f8..0c267dce06 100644 @@ -262 +264 @@ -@@ -1068,6 +1068,12 @@ mlx5_dev_start(struct rte_eth_dev *dev) +@@ -1066,6 +1066,12 @@ mlx5_dev_start(struct rte_eth_dev *dev) @@ -275 +277 @@ -@@ -1148,6 +1154,8 @@ error: +@@ -1146,6 +1152,8 @@ error: @@ -284 +286 @@ -@@ -1186,6 +1194,8 @@ mlx5_dev_stop(struct rte_eth_dev *dev) +@@ -1183,6 +1191,8 @@ mlx5_dev_stop(struct rte_eth_dev *dev)