From patchwork Sun Jul 23 15:06:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 124475 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp1315379vqg; Sun, 23 Jul 2023 08:38:21 -0700 (PDT) X-Google-Smtp-Source: APBJJlGEgmkFvn5heFsFcVj0AMX66DrJ6uW1J+CgTdn35czgCYvhGMk98tHrGn0agYWu3F4i6MzA X-Received: by 2002:a05:6a00:1a16:b0:681:d247:8987 with SMTP id g22-20020a056a001a1600b00681d2478987mr3469662pfv.17.1690126701165; Sun, 23 Jul 2023 08:38:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690126701; cv=none; d=google.com; s=arc-20160816; b=bxb5zfhUB0nn9epBnd497GJdlWkKP8QvWg0hG/7rJZ/HOei4dap1Fg83kRoxQE5uwz Wz47nKg83FdNfZEfuqVpUkpLObRH+lmVVBx3j0Un+MDkO6hCwxfm6et0i7+67cjS/zyZ GYnRTwIzCcFt0xYGvmpiL8jBi9kNLaehWnvs5Gz86F3ZydnxK61u5ANIfXhmtHT8vFZR xN/1NKX7vBLllTnBXRKwsBDtdZXGIfDvDRRAAIL2w8q6UgNB1q28e5h69krfQ0s9M8B1 QWFJt8s5CL5GFMf+DMvofk4R+IUHAQ7qF/15ET2k7YIn1nnZiwJMN4by0YNW1uMFjw1Q QdlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=JDolbZwxUR1dqTmWKJPBm9xAZkcLiWXKL3X8juy54I0=; fh=xKmG77m/NWoFpY5P5LAWC3QmMvCsac2XN+OoFpV6C28=; b=FNh7il7ML0vMmjCf8P/+o3CuI8DWOqKjkZfTAhtRcxuTfqx5dds9VWulEcekX+/HUE Wt78edulMD8lMNuqhLxRp1MlCuM1fn5Rdw9X+FZbzcX1OGhOjJ1XppS0nSWy88rrjYMG fczanm2kGZ1fHLPFBfIC9sbPA8LP48lCpbphh7i/40mAdiRt53AUcBboq7EY35/8aJe5 wXzteK6KfhNfqyqXltvDiKtY0NqxFpU3IEEA48cG6wetVP2I+6TTczNc64JzwxV/X7mY sYeHpbGARuIY9r4fHXYqDcy5eeLj/HQNo4+v23cja2oNaOeQQrKYae4Dysf16zsGLfnU IjRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@fastly.com header.s=google header.b="O/JiitTX"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=fastly.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w64-20020a638243000000b0055c85a94f11si7301359pgd.276.2023.07.23.08.38.08; Sun, 23 Jul 2023 08:38:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@fastly.com header.s=google header.b="O/JiitTX"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=fastly.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229829AbjGWPHc (ORCPT + 99 others); Sun, 23 Jul 2023 11:07:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229476AbjGWPHb (ORCPT ); Sun, 23 Jul 2023 11:07:31 -0400 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2F75AF3 for ; Sun, 23 Jul 2023 08:07:30 -0700 (PDT) Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-992acf67388so522634666b.1 for ; Sun, 23 Jul 2023 08:07:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1690124848; x=1690729648; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JDolbZwxUR1dqTmWKJPBm9xAZkcLiWXKL3X8juy54I0=; b=O/JiitTXHFP0uR2DRWyLFH1VT54tr4N2dQ5DnWPJnLMNEzorUdFk/NfGRMjgKg7qmm 3nNtv6BWuA4DnciYCfXfiUHeaA2NgbXLjvAin94mQlXkCYvP2ZLApewcCkGPP9T3L9sD 9h9QsL2oYsGPrU9gB+t73IMPU9nhuqFj61ujk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690124848; x=1690729648; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JDolbZwxUR1dqTmWKJPBm9xAZkcLiWXKL3X8juy54I0=; b=MBJT/1h1ri+vERZJN/WM1m+oFzv8F9yioYQxOt6ObrO3Rv3RitgeUQ1GuvvX0nbPJ4 qrLtS033TdwUQ/Ga9wP1i0zQbIjGo4umh7Fq5tZfzMeL6XL4SwiVLwj/UFX+OKPXEeZx g7k17zD1MDcp091N7HgczWgbgmGuQfWz+HflnAda4wcg2mtFfLRycvxZKv60NOXX3OBj kPIzVfLHjmBCTY1IvpFaeFl7ZqTkbKlKNHJpQceywVJGRpPYe3lnsuemPYkd0BGUwO8g 29wiiqXD9DtoYl4vz7tnIabYyXmvSNuv0tlKNEvg6pXPhFWsxnLwVquJNmiMlFw0bymF teAA== X-Gm-Message-State: ABy/qLb5HAa4vYUNEb+Ibhx0kNqx6bzZ2oUVIW3L0BJRABJ3oEfJL8uB GhW8yYtjFyugbUHM4UeBkFSDwQ== X-Received: by 2002:a17:906:768f:b0:993:d8a2:385 with SMTP id o15-20020a170906768f00b00993d8a20385mr7300555ejm.22.1690124848600; Sun, 23 Jul 2023 08:07:28 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id t10-20020a1709064f0a00b009929d998abcsm5227691eju.209.2023.07.23.08.07.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Jul 2023 08:07:28 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org, saeedm@nvidia.com, tariqt@nvidia.com, ecree@solarflare.com, andrew@lunn.ch, kuba@kernel.org, davem@davemloft.net, leon@kernel.org, pabeni@redhat.com, bhutchings@solarflare.com, arnd@arndb.de Cc: linux-kernel@vger.kernel.org, Joe Damato Subject: [net 1/2] net: ethtool: Unify ETHTOOL_{G,S}RXFH rxnfc copy Date: Sun, 23 Jul 2023 15:06:57 +0000 Message-Id: <20230723150658.241597-2-jdamato@fastly.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230723150658.241597-1-jdamato@fastly.com> References: <20230723150658.241597-1-jdamato@fastly.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772226295879884604 X-GMAIL-MSGID: 1772226295879884604 ETHTOOL_GRXFH correctly copies in the full struct ethtool_rxnfc when FLOW_RSS is set; ETHTOOL_SRXFH needs a similar code path to handle the FLOW_RSS case so that ethtool can set the flow hash for custom RSS contexts (if supported by the driver). The copy code from ETHTOOL_GRXFH has been pulled out in to a helper so that it can be called in both ETHTOOL_{G,S}RXFH code paths. Fixes: 84a1d9c48200 ("net: ethtool: extend RXNFC API to support RSS spreading of filter matches") Signed-off-by: Joe Damato Acked-by: Edward Cree --- net/ethtool/ioctl.c | 75 +++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index 4a51e0ec295c..7d40e7913e76 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -907,6 +907,38 @@ static int ethtool_rxnfc_copy_to_compat(void __user *useraddr, return 0; } +static int ethtool_rxnfc_copy_struct(u32 cmd, struct ethtool_rxnfc *info, + size_t *info_size, void __user *useraddr) +{ + /* struct ethtool_rxnfc was originally defined for + * ETHTOOL_{G,S}RXFH with only the cmd, flow_type and data + * members. User-space might still be using that + * definition. + */ + if (cmd == ETHTOOL_GRXFH || cmd == ETHTOOL_SRXFH) + *info_size = (offsetof(struct ethtool_rxnfc, data) + + sizeof(info->data)); + + if (ethtool_rxnfc_copy_from_user(info, useraddr, *info_size)) + return -EFAULT; + + if ((cmd == ETHTOOL_GRXFH || cmd == ETHTOOL_SRXFH) && info->flow_type & FLOW_RSS) { + *info_size = sizeof(*info); + if (ethtool_rxnfc_copy_from_user(info, useraddr, *info_size)) + return -EFAULT; + /* Since malicious users may modify the original data, + * we need to check whether FLOW_RSS is still requested. + */ + if (!(info->flow_type & FLOW_RSS)) + return -EINVAL; + } + + if (info->cmd != cmd) + return -EINVAL; + + return 0; +} + static int ethtool_rxnfc_copy_to_user(void __user *useraddr, const struct ethtool_rxnfc *rxnfc, size_t size, const u32 *rule_buf) @@ -944,16 +976,9 @@ static noinline_for_stack int ethtool_set_rxnfc(struct net_device *dev, if (!dev->ethtool_ops->set_rxnfc) return -EOPNOTSUPP; - /* struct ethtool_rxnfc was originally defined for - * ETHTOOL_{G,S}RXFH with only the cmd, flow_type and data - * members. User-space might still be using that - * definition. */ - if (cmd == ETHTOOL_SRXFH) - info_size = (offsetof(struct ethtool_rxnfc, data) + - sizeof(info.data)); - - if (ethtool_rxnfc_copy_from_user(&info, useraddr, info_size)) - return -EFAULT; + rc = ethtool_rxnfc_copy_struct(cmd, &info, &info_size, useraddr); + if (rc) + return rc; rc = dev->ethtool_ops->set_rxnfc(dev, &info); if (rc) @@ -978,33 +1003,9 @@ static noinline_for_stack int ethtool_get_rxnfc(struct net_device *dev, if (!ops->get_rxnfc) return -EOPNOTSUPP; - /* struct ethtool_rxnfc was originally defined for - * ETHTOOL_{G,S}RXFH with only the cmd, flow_type and data - * members. User-space might still be using that - * definition. */ - if (cmd == ETHTOOL_GRXFH) - info_size = (offsetof(struct ethtool_rxnfc, data) + - sizeof(info.data)); - - if (ethtool_rxnfc_copy_from_user(&info, useraddr, info_size)) - return -EFAULT; - - /* If FLOW_RSS was requested then user-space must be using the - * new definition, as FLOW_RSS is newer. - */ - if (cmd == ETHTOOL_GRXFH && info.flow_type & FLOW_RSS) { - info_size = sizeof(info); - if (ethtool_rxnfc_copy_from_user(&info, useraddr, info_size)) - return -EFAULT; - /* Since malicious users may modify the original data, - * we need to check whether FLOW_RSS is still requested. - */ - if (!(info.flow_type & FLOW_RSS)) - return -EINVAL; - } - - if (info.cmd != cmd) - return -EINVAL; + ret = ethtool_rxnfc_copy_struct(cmd, &info, &info_size, useraddr); + if (ret) + return ret; if (info.cmd == ETHTOOL_GRXCLSRLALL) { if (info.rule_cnt > 0) { From patchwork Sun Jul 23 15:06:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 124477 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp1328718vqg; Sun, 23 Jul 2023 09:09:36 -0700 (PDT) X-Google-Smtp-Source: APBJJlHMXyvItpzq+eb3aYrLKIMjN0sCT7OgQYiqHfJ1Jf4mbGEg2f2M70iB+gatGHbnid3oKib2 X-Received: by 2002:a92:c104:0:b0:346:5ab2:4d85 with SMTP id p4-20020a92c104000000b003465ab24d85mr4298228ile.28.1690128575924; Sun, 23 Jul 2023 09:09:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690128575; cv=none; d=google.com; s=arc-20160816; b=X82WqvowjXSzpRqWtptkrtN3tlLA/ozEqfsW0DI2q2mdVXKnIpIBdO31gMWzZ4f0KE jAA4XQ9hyJYxv/vFCaneDprEVrCFB+GKouCNE30ANw7NuClTnmxnuUqD484su2xM94yy vQvQZPMuKEx/yifA8p9peKIAQOibPUXS2cZYdqZVHs1/SXX8Z4Sw/WNeS/+HnLlr1f9L JauusAO1VaTMSRzF9BbOmE2qjN5YJ9/WeAdD7B9aY4LVbHzbxmtY7ugW+TgH/j2BZbm5 GvHOvzn1N1awCAz86PVwC1rfUIN4HmXmIxz8yzFU44n5FQraHjseiAwj/K//uFzP8AEj IKBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=GEc9euFEeaN2LOx71f0ruznOJAiMTwjsoaciaFbgqt0=; fh=xKmG77m/NWoFpY5P5LAWC3QmMvCsac2XN+OoFpV6C28=; b=Sc6zzYRbxY4pr3dvmfrhTUenlP47tS0KKwtRKhbetXvop4MoymPa/lRA8ejUntQtZQ E6FoI+BioCp3CVo6gTtZI1O3b0S1wyl6OXxDhI5LZ1XJ35J10gyMXlxh+nwklLXcy8W9 u9P7kddCduMJFqDUyZItY8sXbtC+xY8SvjQZZ2OPnuNm0skH0Lj9GOsYWvVnUqJaP2p4 aVeJaFognVqOCZsvY7MBP3FspLHJOokzXe16GPy1xBXtFrylewaZCkhz8CEgiP5cFaly YOiMvBmhz6cYzQIGepUHjJ3hQhuRAN62aef4MWs8WZbu4ttRvDKSCErCT00O922VwtnV JLnQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@fastly.com header.s=google header.b=cj3NZzAi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=fastly.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w1-20020a63f501000000b0055117ae3878si7096243pgh.324.2023.07.23.09.09.22; Sun, 23 Jul 2023 09:09:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@fastly.com header.s=google header.b=cj3NZzAi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=fastly.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229835AbjGWPHg (ORCPT + 99 others); Sun, 23 Jul 2023 11:07:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54090 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229640AbjGWPHe (ORCPT ); Sun, 23 Jul 2023 11:07:34 -0400 Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 058DDFB for ; Sun, 23 Jul 2023 08:07:33 -0700 (PDT) Received: by mail-ed1-x535.google.com with SMTP id 4fb4d7f45d1cf-52229f084beso612847a12.2 for ; Sun, 23 Jul 2023 08:07:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; t=1690124851; x=1690729651; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GEc9euFEeaN2LOx71f0ruznOJAiMTwjsoaciaFbgqt0=; b=cj3NZzAiM9ofKEZ0Mvd0r8MPdICmm1gpUfdlfHdiGZzsP5ZWhqtWLG6xjIFUtyvZU2 FvXax1CjYYcRYhXXhqkcyw4Pht0DLLlfRcRAfFKGBrTdNGtH1bRIoW8emVafpD17JgYR acikaMwq3ztfl7CSVb63XCkw1Ow/zbUkre8ao= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690124851; x=1690729651; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GEc9euFEeaN2LOx71f0ruznOJAiMTwjsoaciaFbgqt0=; b=hppkVYrPjBbIeLFpPz/RRVx06AIzIZbCip88wngEtNdvdH3ugh7ASLM6A8Xv1zEa/L klRhIpi4CoYEaG4Du1UwRxTn+6tT4BUWUJ47TZjm+6EdOf3NuIpbwA5e4lN6NeT5wD2n RXMztTpt4wvE8cCwxcgRtkpQLdBASkBTe+613tdT1RK21hmrjMVuTmyExg+MKDOh+y3Z Bg7muHM/rqz7DBkGnY6lcMq4aT9+muHpiV90/ugluU79rK3pm0gcfKI+XLJvdmB2v0nW CVcz5VnSxx9mgg1JPXiHHXLY+dcSFSY3B+JrW5kHuD1hA3H+G2p9SJFxTWZUfyVtXMJr Jl8A== X-Gm-Message-State: ABy/qLZAmFQc6OGttwcNbcevvPPXY0E8U+0nXPCH2g/qdZdHSHfFQiTh 6mYlLEL+RfYuWFAPzbijXj3Ckg== X-Received: by 2002:a17:906:1098:b0:982:a454:6d20 with SMTP id u24-20020a170906109800b00982a4546d20mr7326815eju.54.1690124851416; Sun, 23 Jul 2023 08:07:31 -0700 (PDT) Received: from localhost.localdomain ([2620:11a:c019:0:65e:3115:2f58:c5fd]) by smtp.gmail.com with ESMTPSA id t10-20020a1709064f0a00b009929d998abcsm5227691eju.209.2023.07.23.08.07.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Jul 2023 08:07:31 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org, saeedm@nvidia.com, tariqt@nvidia.com, ecree@solarflare.com, andrew@lunn.ch, kuba@kernel.org, davem@davemloft.net, leon@kernel.org, pabeni@redhat.com, bhutchings@solarflare.com, arnd@arndb.de Cc: linux-kernel@vger.kernel.org, Joe Damato Subject: [net 2/2] net/mlx5: Fix flowhash key set/get for custom RSS Date: Sun, 23 Jul 2023 15:06:58 +0000 Message-Id: <20230723150658.241597-3-jdamato@fastly.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230723150658.241597-1-jdamato@fastly.com> References: <20230723150658.241597-1-jdamato@fastly.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772228261366783706 X-GMAIL-MSGID: 1772228261366783706 mlx5 flow hash field retrieval and set only worked on the default RSS context, not custom RSS contexts. For example, before this patch attempting to retrieve the flow hash fields for RSS context 1 fails: $ sudo ethtool -u eth1 rx-flow-hash tcp4 context 1 Cannot get RX network flow hashing options: Invalid argument This patch fixes getting and setting the flow hash fields for contexts other than the default context. Getting the flow hash fields for RSS context 1: sudo ethtool -u eth1 rx-flow-hash tcp4 context 1 For RSS context 1: TCP over IPV4 flows use these fields for computing Hash flow key: IP DA Now, setting the flash hash fields to a custom value: sudo ethtool -U eth1 rx-flow-hash tcp4 sdfn context 1 And retrieving them again: sudo ethtool -u eth1 rx-flow-hash tcp4 context 1 For RSS context 1: TCP over IPV4 flows use these fields for computing Hash flow key: IP SA IP DA L4 bytes 0 & 1 [TCP/UDP src port] L4 bytes 2 & 3 [TCP/UDP dst port] Fixes: f01cc58c18d6 ("net/mlx5e: Support multiple RSS contexts") Signed-off-by: Joe Damato --- .../ethernet/mellanox/mlx5/core/en/rx_res.c | 23 ++++++++++--- .../ethernet/mellanox/mlx5/core/en/rx_res.h | 5 +-- .../mellanox/mlx5/core/en_fs_ethtool.c | 33 ++++++++++++++----- 3 files changed, 46 insertions(+), 15 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c index e1095bc36543..bb189c92e4c0 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c @@ -218,17 +218,32 @@ int mlx5e_rx_res_rss_set_rxfh(struct mlx5e_rx_res *res, u32 rss_idx, return mlx5e_rss_set_rxfh(rss, indir, key, hfunc, res->rss_rqns, res->rss_nch); } -u8 mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt) +int mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt, + u32 rss_idx) { - struct mlx5e_rss *rss = res->rss[0]; + struct mlx5e_rss *rss; + + if (rss_idx >= MLX5E_MAX_NUM_RSS) + return -EINVAL; + + rss = res->rss[rss_idx]; + if (!rss) + return -EINVAL; return mlx5e_rss_get_hash_fields(rss, tt); } int mlx5e_rx_res_rss_set_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt, - u8 rx_hash_fields) + u8 rx_hash_fields, u32 rss_idx) { - struct mlx5e_rss *rss = res->rss[0]; + struct mlx5e_rss *rss; + + if (rss_idx >= MLX5E_MAX_NUM_RSS) + return -EINVAL; + + rss = res->rss[rss_idx]; + if (!rss) + return -EINVAL; return mlx5e_rss_set_hash_fields(rss, tt, rx_hash_fields); } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h index 5d5f64fab60f..8ac9d67a9603 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h @@ -48,9 +48,10 @@ int mlx5e_rx_res_rss_get_rxfh(struct mlx5e_rx_res *res, u32 rss_idx, int mlx5e_rx_res_rss_set_rxfh(struct mlx5e_rx_res *res, u32 rss_idx, const u32 *indir, const u8 *key, const u8 *hfunc); -u8 mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt); +int mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt, + u32 rss_idx); int mlx5e_rx_res_rss_set_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt, - u8 rx_hash_fields); + u8 rx_hash_fields, u32 rss_idx); int mlx5e_rx_res_packet_merge_set_param(struct mlx5e_rx_res *res, struct mlx5e_packet_merge_param *pkt_merge_param); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c index aac32e505c14..50b8f3da4db1 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c @@ -902,8 +902,14 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv, u8 rx_hash_field = 0; int err; int tt; + u32 flow_type = 0; + u32 rss_idx = 0; - tt = flow_type_to_traffic_type(nfc->flow_type); + if (nfc->flow_type & FLOW_RSS) + rss_idx = nfc->rss_context; + + flow_type = flow_type_mask(nfc->flow_type); + tt = flow_type_to_traffic_type(flow_type); if (tt < 0) return tt; @@ -911,10 +917,10 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv, * on src IP, dest IP, TCP/UDP src port and TCP/UDP dest * port. */ - if (nfc->flow_type != TCP_V4_FLOW && - nfc->flow_type != TCP_V6_FLOW && - nfc->flow_type != UDP_V4_FLOW && - nfc->flow_type != UDP_V6_FLOW) + if (flow_type != TCP_V4_FLOW && + flow_type != TCP_V6_FLOW && + flow_type != UDP_V4_FLOW && + flow_type != UDP_V6_FLOW) return -EOPNOTSUPP; if (nfc->data & ~(RXH_IP_SRC | RXH_IP_DST | @@ -931,7 +937,7 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv, rx_hash_field |= MLX5_HASH_FIELD_SEL_L4_DPORT; mutex_lock(&priv->state_lock); - err = mlx5e_rx_res_rss_set_hash_fields(priv->rx_res, tt, rx_hash_field); + err = mlx5e_rx_res_rss_set_hash_fields(priv->rx_res, tt, rx_hash_field, rss_idx); mutex_unlock(&priv->state_lock); return err; @@ -940,14 +946,23 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv, static int mlx5e_get_rss_hash_opt(struct mlx5e_priv *priv, struct ethtool_rxnfc *nfc) { - u32 hash_field = 0; + int hash_field = 0; int tt; + u32 flow_type = 0; + u32 rss_idx = 0; + + if (nfc->flow_type & FLOW_RSS) + rss_idx = nfc->rss_context; - tt = flow_type_to_traffic_type(nfc->flow_type); + flow_type = flow_type_mask(nfc->flow_type); + tt = flow_type_to_traffic_type(flow_type); if (tt < 0) return tt; - hash_field = mlx5e_rx_res_rss_get_hash_fields(priv->rx_res, tt); + hash_field = mlx5e_rx_res_rss_get_hash_fields(priv->rx_res, tt, rss_idx); + if (hash_field < 0) + return hash_field; + nfc->data = 0; if (hash_field & MLX5_HASH_FIELD_SEL_SRC_IP)