Received: by 10.223.185.116 with SMTP id b49csp1063690wrg; Fri, 23 Feb 2018 11:15:08 -0800 (PST) X-Google-Smtp-Source: AH8x227cKczeTsWaF4Yrd48QKl22xoaMkUaOOPa+0YEuAYIgEisojtuW2OJoR9QqGfspswmNwNhF X-Received: by 10.99.113.75 with SMTP id b11mr2238830pgn.271.1519413308663; Fri, 23 Feb 2018 11:15:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519413308; cv=none; d=google.com; s=arc-20160816; b=XWAnyUTydZvONMc9aOktFv4kU04Z+08LSbt7nSjZ2+W4eB0RlH0i82vqWzJkRLxVrB K7bI7C1hQIGzhCTu1RqJN0gz7IjaXHwepcpRcdxIQL2f8yY6EDeChyvE4ZA85uqaxlwg sYLBWHFfsKcHVx6WXpkUjL+AXpQDz5aforVmctxnQkYgBSf71GOTJc/pXkHcl5AK6EQl VmIZ6fUUHmBIDl3QfUUUIR8iBRE+QphaaSHm9OfcBGqihXgcLNwHY9b1GFc6p334C82Y B/dHLAq7tlnfvz1A8LFnHiJ0mCvi9XV/wCwwitvqyF5NE+//9ZudlrDsx5iLWC8Q00IL X5ZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=N6USBEfU6ihafmYfFqSu/Yls1/gfhExU4u7YSua1J+I=; b=0joL2WS10PqwwEmyMb7yWyXR4s+2V0wJpRYt5Taen7IiikQPhSShxlnISYQwxoNheN BN230g7YeJmJni1Q5E34BjWr/roYGwcipHIkH9i4Ec04tEHUgZbgEKSYIawPwkp11V6q AhEyk2VMukZp1dWjvm34DPlqdgc/OJorCws1LLB3QgYIc4s1AbyJ0XtuoB1WT0sg4v5p enAFfjexBGA8KPF/jLnEsYQ2sG5+LTp2JPTarJhl7F9BHb5sq7cd5S7lMjiqBVXTBQ4t Sopu51fQfOA4R2glQVPLqWDsDF2AMyjO1uED7Hm4PdLIRaZHLyJlxjgqpmadannN0XfI lOVA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g128si1851465pgc.207.2018.02.23.11.14.53; Fri, 23 Feb 2018 11:15:08 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935574AbeBWSzo (ORCPT + 99 others); Fri, 23 Feb 2018 13:55:44 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:48322 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935543AbeBWSzl (ORCPT ); Fri, 23 Feb 2018 13:55:41 -0500 Received: from localhost (LFbn-1-12258-90.w90-92.abo.wanadoo.fr [90.92.71.90]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 68D3D1225; Fri, 23 Feb 2018 18:55:40 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Guy Levi , Yishai Hadas , Leon Romanovsky , Doug Ledford , Sasha Levin Subject: [PATCH 4.14 139/159] IB/mlx4: Fix RSS hash fields restrictions Date: Fri, 23 Feb 2018 19:27:27 +0100 Message-Id: <20180223170759.875021999@linuxfoundation.org> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180223170743.086611315@linuxfoundation.org> References: <20180223170743.086611315@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Guy Levi [ Upstream commit 4d02ebd9bbbdde1d524e62b540b0402cee7bbcdf ] Mistakenly the driver didn't allow RSS hash fields combinations which involve both IPv4 and IPv6 protocols. This bug caused to failures for user's use cases for RSS. Consequently, this patch fixes this bug and allows any combination that the HW can support. Additionally, the patch fixes the driver to return an error in case the user provides an unsupported mask for RSS hash fields. Fixes: 3078f5f1bd8b ("IB/mlx4: Add support for RSS QP") Signed-off-by: Guy Levi Reviewed-by: Yishai Hadas Signed-off-by: Leon Romanovsky Signed-off-by: Doug Ledford Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/hw/mlx4/qp.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c @@ -666,6 +666,19 @@ static int set_qp_rss(struct mlx4_ib_dev return (-EOPNOTSUPP); } + if (ucmd->rx_hash_fields_mask & ~(MLX4_IB_RX_HASH_SRC_IPV4 | + MLX4_IB_RX_HASH_DST_IPV4 | + MLX4_IB_RX_HASH_SRC_IPV6 | + MLX4_IB_RX_HASH_DST_IPV6 | + MLX4_IB_RX_HASH_SRC_PORT_TCP | + MLX4_IB_RX_HASH_DST_PORT_TCP | + MLX4_IB_RX_HASH_SRC_PORT_UDP | + MLX4_IB_RX_HASH_DST_PORT_UDP)) { + pr_debug("RX Hash fields_mask has unsupported mask (0x%llx)\n", + ucmd->rx_hash_fields_mask); + return (-EOPNOTSUPP); + } + if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_IPV4) && (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_IPV4)) { rss_ctx->flags = MLX4_RSS_IPV4; @@ -691,11 +704,11 @@ static int set_qp_rss(struct mlx4_ib_dev return (-EOPNOTSUPP); } - if (rss_ctx->flags & MLX4_RSS_IPV4) { + if (rss_ctx->flags & MLX4_RSS_IPV4) rss_ctx->flags |= MLX4_RSS_UDP_IPV4; - } else if (rss_ctx->flags & MLX4_RSS_IPV6) { + if (rss_ctx->flags & MLX4_RSS_IPV6) rss_ctx->flags |= MLX4_RSS_UDP_IPV6; - } else { + if (!(rss_ctx->flags & (MLX4_RSS_IPV6 | MLX4_RSS_IPV4))) { pr_debug("RX Hash fields_mask is not supported - UDP must be set with IPv4 or IPv6\n"); return (-EOPNOTSUPP); } @@ -707,15 +720,14 @@ static int set_qp_rss(struct mlx4_ib_dev if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_PORT_TCP) && (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_PORT_TCP)) { - if (rss_ctx->flags & MLX4_RSS_IPV4) { + if (rss_ctx->flags & MLX4_RSS_IPV4) rss_ctx->flags |= MLX4_RSS_TCP_IPV4; - } else if (rss_ctx->flags & MLX4_RSS_IPV6) { + if (rss_ctx->flags & MLX4_RSS_IPV6) rss_ctx->flags |= MLX4_RSS_TCP_IPV6; - } else { + if (!(rss_ctx->flags & (MLX4_RSS_IPV6 | MLX4_RSS_IPV4))) { pr_debug("RX Hash fields_mask is not supported - TCP must be set with IPv4 or IPv6\n"); return (-EOPNOTSUPP); } - } else if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_PORT_TCP) || (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_PORT_TCP)) { pr_debug("RX Hash fields_mask is not supported - both TCP SRC and DST must be set\n");