All of lore.kernel.org
 help / color / mirror / Atom feed
From: Saeed Mahameed <saeed@kernel.org>
To: Taehee Yoo <ap420073@gmail.com>
Cc: Jakub Kicinski <kuba@kernel.org>,
	davem@davemloft.net, pabeni@redhat.com, edumazet@google.com,
	almasrymina@google.com, donald.hunter@gmail.com, corbet@lwn.net,
	michael.chan@broadcom.com, andrew+netdev@lunn.ch,
	hawk@kernel.org, ilias.apalodimas@linaro.org, ast@kernel.org,
	daniel@iogearbox.net, john.fastabend@gmail.com, dw@davidwei.uk,
	sdf@fomichev.me, asml.silence@gmail.com, brett.creeley@amd.com,
	linux-doc@vger.kernel.org, netdev@vger.kernel.org,
	kory.maincent@bootlin.com, maxime.chevallier@bootlin.com,
	danieller@nvidia.com, hengqi@linux.alibaba.com,
	ecree.xilinx@gmail.com, przemyslaw.kitszel@intel.com,
	hkallweit1@gmail.com, ahmed.zaki@intel.com,
	rrameshbabu@nvidia.com, idosch@nvidia.com, jiri@resnulli.us,
	bigeasy@linutronix.de, lorenzo@kernel.org, jdamato@fastly.com,
	aleksander.lobakin@intel.com, kaiyuanz@google.com,
	willemb@google.com, daniel.zahka@gmail.com
Subject: Re: [PATCH net-next v5 2/7] net: ethtool: add tcp_data_split_mod member in kernel_ethtool_ringparam
Date: Fri, 15 Nov 2024 12:07:23 -0800	[thread overview]
Message-ID: <Zzep-7lOEfjXxsCs@x130> (raw)
In-Reply-To: <CAMArcTWfxiKWghy3cFEL4rj7=VKku_Sm4W9pVWk39TEae1fyAw@mail.gmail.com>

On 16 Nov 02:17, Taehee Yoo wrote:
>On Fri, Nov 15, 2024 at 1:22 PM Jakub Kicinski <kuba@kernel.org> wrote:
>>
>> On Wed, 13 Nov 2024 17:32:16 +0000 Taehee Yoo wrote:
>> > When tcp-data-split is UNKNOWN mode, drivers arbitrarily handle it.
>> > For example, bnxt_en driver automatically enables if at least one of
>> > LRO/GRO/JUMBO is enabled.
>> > If tcp-data-split is UNKNOWN and LRO is enabled, a driver returns
>> > ENABLES of tcp-data-split, not UNKNOWN.
>> > So, `ethtool -g eth0` shows tcp-data-split is enabled.
>> >
>> > The problem is in the setting situation.
>> > In the ethnl_set_rings(), it first calls get_ringparam() to get the
>> > current driver's config.
>> > At that moment, if driver's tcp-data-split config is UNKNOWN, it returns
>> > ENABLE if LRO/GRO/JUMBO is enabled.
>> > Then, it sets values from the user and driver's current config to
>> > kernel_ethtool_ringparam.
>> > Last it calls .set_ringparam().
>> > The driver, especially bnxt_en driver receives
>> > ETHTOOL_TCP_DATA_SPLIT_ENABLED.
>> > But it can't distinguish whether it is set by the user or just the
>> > current config.
>> >
>> > The new tcp_data_split_mod member indicates the tcp-data-split value is
>> > explicitly set by the user.
>> > So the driver can handle ETHTOOL_TCP_DATA_SPLIT_ENABLED properly.
>>
>> I think this can work, but it isn't exactly what I had in mind.
>>
>> I was thinking we'd simply add u8 hds_config to
>> struct ethtool_netdev_state (which is stored inside netdev).
>> And update it there if user request via ethnl_set_rings() succeeds.
>>
>> That gives the driver and the core quick and easy access to checking if
>> the user forced the setting to ENABLED or DISABLED, or didn't (UNKNOWN).
>>
>> As far as the parameter passed to ->set_ringparam() goes we could do
>> (assuming the new fields in ethtool_netdev state is called hds):
>>
>>         kernel_ringparam.tcp_data_split =
>>                 nla_get_u32_default(tb[ETHTOOL_A_RINGS_TCP_DATA_SPLIT],
>>                                     dev->ethtool->hds);
>>
>> If the driver see UNKNOWN it means user doesn't care.
>> If the driver sees ENABLED/DISABLE it must comply, doesn't matter if
>> the user requested it in current netlink call, or previous and hasn't
>> reset it, yet.
>>

This complicates things, drivers shouldn't store previous uncommitted "wanted" values.
We have wanted_features for that, and I don't think it's smart to have yet another
wanted_features mechanism, let's keep it simple, any explicit config by
ethtool should either be immediately committed or returned as error to
user and driver will only reflect the old/current value in future get requests.

HDS can conflict with many other features e.g XDP/LRO/rx_copy_break/MTU
limitations etc ...

>> Hope this makes sense...
>
>Thank you so much for the details!
>I will try to use ethtool_netdev_state instead of this approach.
>
>Thanks a lot!
>Taehee Yoo
>

  reply	other threads:[~2024-11-15 20:07 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-13 17:32 [PATCH net-next v5 0/7] bnxt_en: implement tcp-data-split and thresh option Taehee Yoo
2024-11-13 17:32 ` [PATCH net-next v5 1/7] bnxt_en: add support for rx-copybreak ethtool command Taehee Yoo
2024-11-14 22:54   ` Andy Gospodarek
2024-11-15  0:22   ` Michael Chan
2024-11-13 17:32 ` [PATCH net-next v5 2/7] net: ethtool: add tcp_data_split_mod member in kernel_ethtool_ringparam Taehee Yoo
2024-11-15  4:22   ` Jakub Kicinski
2024-11-15 17:17     ` Taehee Yoo
2024-11-15 20:07       ` Saeed Mahameed [this message]
2024-11-13 17:32 ` [PATCH net-next v5 3/7] bnxt_en: add support for tcp-data-split ethtool command Taehee Yoo
2024-11-14 22:54   ` Andy Gospodarek
2024-11-15  4:15   ` Jakub Kicinski
2024-11-15 17:12     ` Taehee Yoo
2024-11-13 17:32 ` [PATCH net-next v5 4/7] net: ethtool: add support for configuring header-data-split-thresh Taehee Yoo
2024-11-15  4:24   ` Jakub Kicinski
2024-11-15 18:05     ` Taehee Yoo
2024-11-15 19:18       ` Jakub Kicinski
2024-11-17 12:31         ` Taehee Yoo
2024-11-15 20:27   ` Saeed Mahameed
2024-11-17 14:26     ` Taehee Yoo
2024-11-13 17:32 ` [PATCH net-next v5 5/7] bnxt_en: add support for header-data-split-thresh ethtool command Taehee Yoo
2024-11-14 22:54   ` Andy Gospodarek
2024-11-15  0:27     ` Michael Chan
2024-11-15 16:18       ` Taehee Yoo
2024-11-13 17:32 ` [PATCH net-next v5 6/7] net: devmem: add ring parameter filtering Taehee Yoo
2024-11-13 17:32 ` [PATCH net-next v5 7/7] net: ethtool: " Taehee Yoo
2024-11-14 22:55 ` [PATCH net-next v5 0/7] bnxt_en: implement tcp-data-split and thresh option Andy Gospodarek
2024-12-17 16:30 ` Jakub Kicinski
2024-12-18 13:34   ` Taehee Yoo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Zzep-7lOEfjXxsCs@x130 \
    --to=saeed@kernel.org \
    --cc=ahmed.zaki@intel.com \
    --cc=aleksander.lobakin@intel.com \
    --cc=almasrymina@google.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=ap420073@gmail.com \
    --cc=asml.silence@gmail.com \
    --cc=ast@kernel.org \
    --cc=bigeasy@linutronix.de \
    --cc=brett.creeley@amd.com \
    --cc=corbet@lwn.net \
    --cc=daniel.zahka@gmail.com \
    --cc=daniel@iogearbox.net \
    --cc=danieller@nvidia.com \
    --cc=davem@davemloft.net \
    --cc=donald.hunter@gmail.com \
    --cc=dw@davidwei.uk \
    --cc=ecree.xilinx@gmail.com \
    --cc=edumazet@google.com \
    --cc=hawk@kernel.org \
    --cc=hengqi@linux.alibaba.com \
    --cc=hkallweit1@gmail.com \
    --cc=idosch@nvidia.com \
    --cc=ilias.apalodimas@linaro.org \
    --cc=jdamato@fastly.com \
    --cc=jiri@resnulli.us \
    --cc=john.fastabend@gmail.com \
    --cc=kaiyuanz@google.com \
    --cc=kory.maincent@bootlin.com \
    --cc=kuba@kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=lorenzo@kernel.org \
    --cc=maxime.chevallier@bootlin.com \
    --cc=michael.chan@broadcom.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=przemyslaw.kitszel@intel.com \
    --cc=rrameshbabu@nvidia.com \
    --cc=sdf@fomichev.me \
    --cc=willemb@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.