> From: Paul Menzel <[email protected]> > To: Takashi Kozu <[email protected]> > Cc: [email protected], [email protected], > [email protected], [email protected], [email protected], > [email protected], [email protected], > [email protected], [email protected], > Kohei Enju <[email protected]> > Subject: Re: [Intel-wired-lan] [PATCH iwl-next v2 1/3] igb: prepare for RSS > key get/set support > Date: Thu, 8 Jan 2026 13:27:57 +0100 [thread overview] > Message-ID: <[email protected]> (raw) > In-Reply-To: <[email protected]> > > Dear Takashi, > > > Thank you for the patch. > > Am 08.01.26 um 06:20 schrieb Takashi Kozu: > > Store the RSS key inside struct igb_adapter and introduce the > > igb_write_rss_key() helper function. This allows the driver to program > > the E1000 registers using a persistent RSS key, instead of using a > > stack-local buffer in igb_setup_mrqc(). > > > > Tested-by: Kohei Enju <[email protected]> > > Signed-off-by: Takashi Kozu <[email protected]> > > --- > > drivers/net/ethernet/intel/igb/igb.h | 3 +++ > > drivers/net/ethernet/intel/igb/igb_ethtool.c | 12 ++++++++++++ > > drivers/net/ethernet/intel/igb/igb_main.c | 6 ++---- > > 3 files changed, 17 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/net/ethernet/intel/igb/igb.h > > b/drivers/net/ethernet/intel/igb/igb.h > > index 0fff1df81b7b..8c9b02058cec 100644 > > --- a/drivers/net/ethernet/intel/igb/igb.h > > +++ b/drivers/net/ethernet/intel/igb/igb.h > > @@ -495,6 +495,7 @@ struct hwmon_buff { > > #define IGB_N_PEROUT 2 > > #define IGB_N_SDP 4 > > #define IGB_RETA_SIZE 128 > > +#define IGB_RSS_KEY_SIZE 40 > > > > enum igb_filter_match_flags { > > IGB_FILTER_FLAG_ETHER_TYPE = 0x1, > > @@ -655,6 +656,7 @@ struct igb_adapter { > > struct i2c_client *i2c_client; > > u32 rss_indir_tbl_init; > > u8 rss_indir_tbl[IGB_RETA_SIZE]; > > + u8 rss_key[IGB_RSS_KEY_SIZE]; > > > > unsigned long link_check_timeout; > > int copper_tries; > > @@ -735,6 +737,7 @@ void igb_down(struct igb_adapter *); > > void igb_reinit_locked(struct igb_adapter *); > > void igb_reset(struct igb_adapter *); > > int igb_reinit_queues(struct igb_adapter *); > > +void igb_write_rss_key(struct igb_adapter *adapter); > > void igb_write_rss_indir_tbl(struct igb_adapter *); > > int igb_set_spd_dplx(struct igb_adapter *, u32, u8); > > int igb_setup_tx_resources(struct igb_ring *); > > diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c > > b/drivers/net/ethernet/intel/igb/igb_ethtool.c > > index 10e2445e0ded..8695ff28a7b8 100644 > > --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c > > +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c > > @@ -3016,6 +3016,18 @@ static int igb_set_rxnfc(struct net_device *dev, > > struct ethtool_rxnfc *cmd) > > return ret; > > } > > > > +void igb_write_rss_key(struct igb_adapter *adapter) > > +{ > > + struct e1000_hw *hw = &adapter->hw; > > + u32 val; > > + int i; > > + > > + for (i = 0; i < IGB_RSS_KEY_SIZE / 4; i++) { > > + val = get_unaligned_le32(&adapter->rss_key[i info.plist 4]); > > Why is `get_unaligned_le32()` needed?
I think it's necessary in order to align to 4 bytes.
