On Wed, 18 Dec 2024 14:45:23 +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. > > When user updates ring parameter, the new hds_config value is updated > and current hds_config value is stored to old_hdsconfig. > Driver's .set_ringparam() callback can distinguish a passed > tcp-data-split value is came from user explicitly. > If .set_ringparam() is failed, hds_config is rollbacked immediately. > > Suggested-by: Jakub Kicinski <kuba@xxxxxxxxxx> > Signed-off-by: Taehee Yoo <ap420073@xxxxxxxxx> Reviewed-by: Jakub Kicinski <kuba@xxxxxxxxxx>