From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f195.google.com (mail-wr0-f195.google.com [209.85.128.195]) by dpdk.org (Postfix) with ESMTP id 79AB92BD5 for ; Thu, 3 May 2018 13:06:31 +0200 (CEST) Received: by mail-wr0-f195.google.com with SMTP id f2-v6so5331965wrm.3 for ; Thu, 03 May 2018 04:06:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pjB1lqvF2M3ENQ2H7lBSVHmQy668q7Qko4S/u3+1e54=; b=Na1tCBsA+QYcMVekr/iE5VrBfwsEj1MBc3gObcUgdxwKPVH8NumIOmqDj3KnMzdcaW stzqrOCOxZ7ytRrX3CiDncEU4T8fkkDRLA+4non8XZ1BcVKqn3XUY4kvw4dek7gedtTU qF8QX5UYwP8kLxgXHHhNL+caj1RHobqYadX9zeJ/KeiYPrGr4Yx47KW9V7e8axSpuZ0A bDHHi/QQ7yTxYNTPu1jeHabdXT2zNcXeUfUI1VYgwOOBMXdhGlSJqhx5p0vEcBRSfKDm oc5mC2Pwex2r/jcdyjlbDDDhgXOCIDjyFRFIZpzy6BeinMPTX2WvKe1+Eq8g9Np9kyLw B4Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=pjB1lqvF2M3ENQ2H7lBSVHmQy668q7Qko4S/u3+1e54=; b=J06SF1MGuHokwRocEAXEwGWuyOmm/Bsqz57RThsICImA1wRwKKhBhjYSxn0T/71LIr gDVG5lwiZBu35wJOybzx16lxUICAE7oGliVh5+a84uwCT6libOrmVI8pnF106aOwqoFV y5eW9vJPDK9CiukI6eviQNHJcctg/ONkGMsX98nSSSIIKeC9P3181UNBpecCtw8I+t1l eAq7tTO+Xi4fJvfQhiqVTLj7do3j+WI8gLXQHbdMoUY2z8Cir9kxt5U/BQyk71gVhpuk JErtZc11GL3Lb4ls42W0wtWRY0uJVMkPx+YtGZJD+qXF56JnbHjKnYQs5o0KR0/u7huX rBVA== X-Gm-Message-State: ALQs6tATGgjc6pxUVBwLZ62DgQTKQrWGnQAHPiH1A/ScNrnRqFR1d5XJ bhWa6NBXXGITJrRqpv43NrdwhILk X-Google-Smtp-Source: AB8JxZp0/ex7omTV+XVLnMvSwod4UPlXqAAaj/1qMeiGXRS8HBYMtT7hAgEnvDKF9s8gkk0Nlrczyw== X-Received: by 2002:adf:b1cd:: with SMTP id r13-v6mr16624963wra.221.1525345591235; Thu, 03 May 2018 04:06:31 -0700 (PDT) Received: from localhost (slip139-92-244-193.lon.uk.prserv.net. [139.92.244.193]) by smtp.gmail.com with ESMTPSA id o53-v6sm15654463wrc.96.2018.05.03.04.06.30 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 03 May 2018 04:06:30 -0700 (PDT) From: luca.boccassi@gmail.com To: Adrien Mazarguil Cc: dpdk stable Date: Thu, 3 May 2018 12:06:11 +0100 Message-Id: <20180503110612.12146-4-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20180503110612.12146-1-luca.boccassi@gmail.com> References: <20180430145402.23057-42-luca.boccassi@gmail.com> <20180503110612.12146-1-luca.boccassi@gmail.com> Subject: [dpdk-stable] patch 'net/mlx4: fix inner RSS support for broken kernels' has been queued to stable release 18.02.2 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 May 2018 11:06:31 -0000 Hi, FYI, your patch has been queued to stable release 18.02.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 05/04/18. So please shout if anyone has objections. Thanks. Luca Boccassi --- >>From bbc84c3cb9d8237ea10b9fc9a3e79dda08eb4786 Mon Sep 17 00:00:00 2001 From: Adrien Mazarguil Date: Thu, 26 Apr 2018 18:26:16 +0200 Subject: [PATCH] net/mlx4: fix inner RSS support for broken kernels [ upstream commit 828a4ce3c941b2ab3cf6bb65d30339cf8bb2bdf6 ] Linux 4.15 and 4.16 may report inner RSS as a supported capability of the device, however it can't be used due to missing code in the kernel. This triggers an error when creating the default hash QP and prevents this PMD from starting up without a prior call to rte_flow_isolate(). Fixes: 55e8991e3199 ("net/mlx4: restore inner VXLAN RSS support") Signed-off-by: Adrien Mazarguil --- drivers/net/mlx4/mlx4.c | 107 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 95 insertions(+), 12 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 3a95e1d5e..bc12b6030 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -387,6 +387,99 @@ free_kvlist: return ret; } +/** + * Interpret RSS capabilities reported by device. + * + * This function returns the set of usable Verbs RSS hash fields, kernel + * quirks taken into account. + * + * @param ctx + * Verbs context. + * @param pd + * Verbs protection domain. + * @param device_attr_ex + * Extended device attributes to interpret. + * + * @return + * Usable RSS hash fields mask in Verbs format. + */ +static uint64_t +mlx4_hw_rss_sup(struct ibv_context *ctx, struct ibv_pd *pd, + struct ibv_device_attr_ex *device_attr_ex) +{ + uint64_t hw_rss_sup = device_attr_ex->rss_caps.rx_hash_fields_mask; + struct ibv_cq *cq = NULL; + struct ibv_wq *wq = NULL; + struct ibv_rwq_ind_table *ind = NULL; + struct ibv_qp *qp = NULL; + + if (!hw_rss_sup) { + WARN("no RSS capabilities reported; disabling support for UDP" + " RSS and inner VXLAN RSS"); + return IBV_RX_HASH_SRC_IPV4 | IBV_RX_HASH_DST_IPV4 | + IBV_RX_HASH_SRC_IPV6 | IBV_RX_HASH_DST_IPV6 | + IBV_RX_HASH_SRC_PORT_TCP | IBV_RX_HASH_DST_PORT_TCP; + } + if (!(hw_rss_sup & IBV_RX_HASH_INNER)) + return hw_rss_sup; + /* + * Although reported as supported, missing code in some Linux + * versions (v4.15, v4.16) prevents the creation of hash QPs with + * inner capability. + * + * There is no choice but to attempt to instantiate a temporary RSS + * context in order to confirm its support. + */ + cq = mlx4_glue->create_cq(ctx, 1, NULL, NULL, 0); + wq = cq ? mlx4_glue->create_wq + (ctx, + &(struct ibv_wq_init_attr){ + .wq_type = IBV_WQT_RQ, + .max_wr = 1, + .max_sge = 1, + .pd = pd, + .cq = cq, + }) : NULL; + ind = wq ? mlx4_glue->create_rwq_ind_table + (ctx, + &(struct ibv_rwq_ind_table_init_attr){ + .log_ind_tbl_size = 0, + .ind_tbl = &wq, + .comp_mask = 0, + }) : NULL; + qp = ind ? mlx4_glue->create_qp_ex + (ctx, + &(struct ibv_qp_init_attr_ex){ + .comp_mask = + (IBV_QP_INIT_ATTR_PD | + IBV_QP_INIT_ATTR_RX_HASH | + IBV_QP_INIT_ATTR_IND_TABLE), + .qp_type = IBV_QPT_RAW_PACKET, + .pd = pd, + .rwq_ind_tbl = ind, + .rx_hash_conf = { + .rx_hash_function = IBV_RX_HASH_FUNC_TOEPLITZ, + .rx_hash_key_len = MLX4_RSS_HASH_KEY_SIZE, + .rx_hash_key = mlx4_rss_hash_key_default, + .rx_hash_fields_mask = hw_rss_sup, + }, + }) : NULL; + if (!qp) { + WARN("disabling unusable inner RSS capability due to kernel" + " quirk"); + hw_rss_sup &= ~IBV_RX_HASH_INNER; + } else { + claim_zero(mlx4_glue->destroy_qp(qp)); + } + if (ind) + claim_zero(mlx4_glue->destroy_rwq_ind_table(ind)); + if (wq) + claim_zero(mlx4_glue->destroy_wq(wq)); + if (cq) + claim_zero(mlx4_glue->destroy_cq(cq)); + return hw_rss_sup; +} + static struct rte_pci_driver mlx4_driver; /** @@ -565,18 +658,8 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) PCI_DEVICE_ID_MELLANOX_CONNECTX3PRO); DEBUG("L2 tunnel checksum offloads are %ssupported", (priv->hw_csum_l2tun ? "" : "not ")); - priv->hw_rss_sup = device_attr_ex.rss_caps.rx_hash_fields_mask; - if (!priv->hw_rss_sup) { - WARN("no RSS capabilities reported; disabling support" - " for UDP RSS and inner VXLAN RSS"); - priv->hw_rss_sup = - IBV_RX_HASH_SRC_IPV4 | - IBV_RX_HASH_DST_IPV4 | - IBV_RX_HASH_SRC_IPV6 | - IBV_RX_HASH_DST_IPV6 | - IBV_RX_HASH_SRC_PORT_TCP | - IBV_RX_HASH_DST_PORT_TCP; - } + priv->hw_rss_sup = mlx4_hw_rss_sup(priv->ctx, priv->pd, + &device_attr_ex); DEBUG("supported RSS hash fields mask: %016" PRIx64, priv->hw_rss_sup); /* Configure the first MAC address by default. */ -- 2.14.2