Received: by 2002:ab2:b82:0:b0:1f3:401:3cfb with SMTP id 2csp828825lqh; Thu, 28 Mar 2024 19:23:43 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWL1jNnUBWaYlFun7aRJQgiZcrkB0ZY+DXuJ2vch9yiNe/LvPY69ly46/4m05OkkjbHf5aE1r440pTvjONLwzbL/Wuamc5gK/VRmbrDMw== X-Google-Smtp-Source: AGHT+IGw8UesMg5OknCVAtWNQYzk15pBn2vJl8UrX39I/PzFltrIsa10dGjPzNZng9yGNPp85pZ6 X-Received: by 2002:a05:6870:2153:b0:22a:6ce3:d57 with SMTP id g19-20020a056870215300b0022a6ce30d57mr1135988oae.25.1711679023310; Thu, 28 Mar 2024 19:23:43 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711679023; cv=pass; d=google.com; s=arc-20160816; b=t7jaGDk//RFg4za4kJ0BSJASUcic/4VmNJTkRkpTrATt++xdcqLaMPNI1XHxev4vAS Ypp7FmI/nJFYdNCqm50YBawx8WqxsZ8CqZOlQEGN1UW0u+xqc44IaaY9yRTVsGvkQMfN bdYE+NIs8hWLT5B3a6JiObqILRwLj3CpPJgu65+vDmq0u4uHwnb5RI1oFH/YcUP1Hlpj /QgUxbPbnpE2710t97SwrCSm6SBa9uX1eU97wXPu5ZsW9mmzYxQhObOt9fVhPjh4/uoN RhFjyxl1sox55MvCfOuLs4D/IqzPwTU3C+MffWrw7sYYOX5iccSb2QT/JsJgYjipcGUV 54Iw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:from:references:cc:to:subject :user-agent:mime-version:list-unsubscribe:list-subscribe:list-id :precedence:date:message-id:dkim-signature; bh=NX8pI+Bd0/enxNzF+RhtcwIAqaNwq85yczophRjct+I=; fh=S/UmI2vJ0lGLszweucPCUVrW/fldEPPy7tKz9FwfkC8=; b=DleCkGgAoSf7D0fzAzwYyfpZPEoYzuQFwUsTMu7Dse5SHu/wmdMA7fGFxC91RDvJBB iYCOiZuErv245wEgpz5n0MBlDVyk/hY1gEuI0tv/fsIOkBKizOdA37c5ktsycuDMpju6 JichDTFJid0otvOaUHqEunlPGCkHq+1tMmR2MAUhw6TLRAjyHiYsAJ9wOr9bvv0c6iv5 6jVTIhqIW9qsJAImI22CZ6ZJ8o4BMgbh0tdRLULcT7GRo7h5TH5kNKlsfj4YIEFWhiqz bPf9aIP4oKEhWyw/X/+7SPnCsm9lwCjRZ687o3ss1ApFnvErRkxnyYcsKH/6vtpSmD6A VIzA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linux.alibaba.com header.s=default header.b=KPupsMe7; arc=pass (i=1 spf=pass spfdomain=linux.alibaba.com dkim=pass dkdomain=linux.alibaba.com dmarc=pass fromdomain=linux.alibaba.com); spf=pass (google.com: domain of linux-kernel+bounces-124049-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-124049-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.alibaba.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id y3-20020a63fa03000000b005f06664ef2asi2642283pgh.206.2024.03.28.19.23.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Mar 2024 19:23:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-124049-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.alibaba.com header.s=default header.b=KPupsMe7; arc=pass (i=1 spf=pass spfdomain=linux.alibaba.com dkim=pass dkdomain=linux.alibaba.com dmarc=pass fromdomain=linux.alibaba.com); spf=pass (google.com: domain of linux-kernel+bounces-124049-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-124049-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.alibaba.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 9B1BC294513 for ; Fri, 29 Mar 2024 02:14:34 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5383933CCC; Fri, 29 Mar 2024 02:10:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="KPupsMe7" Received: from out30-113.freemail.mail.aliyun.com (out30-113.freemail.mail.aliyun.com [115.124.30.113]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B0A754EB45; Fri, 29 Mar 2024 02:10:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.113 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711678223; cv=none; b=Ub31zwgQD/VtpkSkL+dTH+DQpTbySddp7m+RSBO3pbJ09RuhI2q20Aj22Cx5weBrw/nhVfqf6RLjLsxBpiDde0zRbZNB34q3R7y1+bdFALWHQHeyVTBExUxAgDsnryQJAQE9tznIfu/prIyBJCufIPD3NA0xXLqg14YHKgYKAA0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711678223; c=relaxed/simple; bh=hj5TjGL4a8qXk947vXHRELwRpXFvFpzKGFWwPuPdOh0=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=iCzeNAvt7mVKtnerffdraTyYHMEOcL7NUkKNnkRFGIfDT8y/POmB6CvYTxndyL26cS7P6x8fZx6CUWDU2Klu+bYA9UhGyFXRYvKiWPJe8GpKEs6LvmXw1CBT+XdrbLt0rmtQeaXaHXajfFy40kGqSNMcBUNYIsg9snZJRybBDPs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=KPupsMe7; arc=none smtp.client-ip=115.124.30.113 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1711678213; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=NX8pI+Bd0/enxNzF+RhtcwIAqaNwq85yczophRjct+I=; b=KPupsMe7H6qADWrwXStA2JgCOZ0U/RgzM2CxrMtUp8pEN2VJctvlle1oEFeOG+UbHCpsSY+jB1wkmaLXLIGlsiS7iOOojUUn93YOHfWKmKZNpT4N3BsAL1iZz4rQnzkA6pfUpIZnR3iqyV75DztbQXTBVwCk0Uax9ST4OonAlrs= X-Alimail-AntiSpam:AC=PASS;BC=-1|-1;BR=01201311R241e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045192;MF=hengqi@linux.alibaba.com;NM=1;PH=DS;RN=13;SR=0;TI=SMTPD_---0W3UsYoD_1711678211; Received: from 30.221.147.241(mailfrom:hengqi@linux.alibaba.com fp:SMTPD_---0W3UsYoD_1711678211) by smtp.aliyun-inc.com; Fri, 29 Mar 2024 10:10:12 +0800 Message-ID: <82e6e5c0-0943-467e-a11b-e511839f38eb@linux.alibaba.com> Date: Fri, 29 Mar 2024 10:10:10 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH net v2 1/2] virtio_net: Do not set rss_indir if RSS is not supported To: Breno Leitao Cc: rbc@meta.com, riel@surriel.com, "open list:VIRTIO CORE AND NET DRIVERS" , "open list:NETWORKING DRIVERS" , open list , "Michael S. Tsirkin" , Jason Wang , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xuan Zhuo References: <20240326151911.2155689-1-leitao@debian.org> <1711503463.632461-1-xuanzhuo@linux.alibaba.com> <1711589335.4973893-1-xuanzhuo@linux.alibaba.com> From: Heng Qi In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit 在 2024/3/28 下午10:37, Breno Leitao 写道: >>> On Wed, Mar 27, 2024 at 09:37:43AM +0800, Xuan Zhuo wrote: >>>> On Tue, 26 Mar 2024 08:19:08 -0700, Breno Leitao wrote: >>>>> Do not set virtnet_info->rss_indir_table_size if RSS is not available >>>>> for the device. >>>>> >>>>> Currently, rss_indir_table_size is set if either has_rss or >>>>> has_rss_hash_report is available, but, it should only be set if has_rss >>>>> is set. >>>>> >>>>> On the virtnet_set_rxfh(), return an invalid command if the request has >>>>> indirection table set, but virtnet does not support RSS. >>>>> >>>>> Suggested-by: Heng Qi >>>>> Signed-off-by: Breno Leitao >>>>> --- >>>>> drivers/net/virtio_net.c | 9 +++++++-- >>>>> 1 file changed, 7 insertions(+), 2 deletions(-) >>>>> >>>>> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c >>>>> index c22d1118a133..c640fdf28fc5 100644 >>>>> --- a/drivers/net/virtio_net.c >>>>> +++ b/drivers/net/virtio_net.c >>>>> @@ -3813,6 +3813,9 @@ static int virtnet_set_rxfh(struct net_device *dev, >>>>> rxfh->hfunc != ETH_RSS_HASH_TOP) >>>>> return -EOPNOTSUPP; >>>>> >>>>> + if (rxfh->indir && !vi->has_rss) >>>>> + return -EINVAL; >>>>> + >>>>> if (rxfh->indir) { >>>> Put !vi->has_rss here? >>> I am not sure I understand the suggestion. Where do you suggest we have >>> !vi->has_rss? >>> >>> If we got this far, we either have: >>> >>> a) rxfh->indir set and vi->has_rss is also set >>> b) rxfh->indir not set. (vi->has_rss could be set or not). >> >> This function does two tasks. >> 1. update indir table >> 2. update rss key >> >> #1 only for has_rss >> #2 for has_rss or has_rss_hash_report >> >> >> So I would code: >> >> bool update = false >> >> if (rxfh->indir) { >> if (!vi->has_rss) >> return -EINVAL; >> >> for (i = 0; i < vi->rss_indir_table_size; ++i) >> vi->ctrl->rss.indirection_table[i] = rxfh->indir[i]; >> >> update = true >> } >> >> if (rxfh->key) { >> if (!vi->has_rss && !vi->has_rss_hash_report) >> return -EINVAL; >> >> memcpy(vi->ctrl->rss.key, rxfh->key, vi->rss_key_size); >> update = true >> } >> >> >> if (update) >> virtnet_commit_rss_command(vi); >> >> Thanks. > This is a bit different from the previous proposal, but, I like this one > approach better. It makes the code easier to read. > > How does the full patch looks like? > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index c22d1118a133..180f342f1898 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -3807,20 +3807,35 @@ static int virtnet_set_rxfh(struct net_device *dev, > struct netlink_ext_ack *extack) > { > struct virtnet_info *vi = netdev_priv(dev); > + bool update = false; > int i; > > + if (!vi->has_rss && !vi->has_rss_hash_report) > + return -EOPNOTSUPP; > + I think this two modifications are no longer needed as they have been embedded below. > if (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE && > rxfh->hfunc != ETH_RSS_HASH_TOP) > return -EOPNOTSUPP; > > if (rxfh->indir) { > + if (!vi->has_rss) > + return -EINVAL; -EOPNOTSUPP seems better. > + > for (i = 0; i < vi->rss_indir_table_size; ++i) > vi->ctrl->rss.indirection_table[i] = rxfh->indir[i]; > + update = true; > } > - if (rxfh->key) > + > + if (rxfh->key) { > + if (!vi->has_rss && !vi->has_rss_hash_report) > + return -EINVAL; Same as above. return -EOPNOTSUPP. Others look good. Thanks. > + > memcpy(vi->ctrl->rss.key, rxfh->key, vi->rss_key_size); > + update = true; > + } > > - virtnet_commit_rss_command(vi); > + if (update) > + virtnet_commit_rss_command(vi); > > return 0; > } > @@ -4729,13 +4744,15 @@ static int virtnet_probe(struct virtio_device *vdev) > if (virtio_has_feature(vdev, VIRTIO_NET_F_HASH_REPORT)) > vi->has_rss_hash_report = true; > > - if (virtio_has_feature(vdev, VIRTIO_NET_F_RSS)) > + if (virtio_has_feature(vdev, VIRTIO_NET_F_RSS)) { > vi->has_rss = true; > > - if (vi->has_rss || vi->has_rss_hash_report) { > vi->rss_indir_table_size = > virtio_cread16(vdev, offsetof(struct virtio_net_config, > rss_max_indirection_table_length)); > + } > + > + if (vi->has_rss || vi->has_rss_hash_report) { > vi->rss_key_size = > virtio_cread8(vdev, offsetof(struct virtio_net_config, rss_max_key_size)); >