[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <IA3PR11MB898693239F08B055E714E430E588A@IA3PR11MB8986.namprd11.prod.outlook.com>
Date: Mon, 19 Jan 2026 10:19:02 +0000
From: "Loktionov, Aleksandr" <aleksandr.loktionov@...el.com>
To: Takashi Kozu <takkozu@...zon.com>, "Nguyen, Anthony L"
<anthony.l.nguyen@...el.com>
CC: "Kitszel, Przemyslaw" <przemyslaw.kitszel@...el.com>,
"andrew+netdev@...n.ch" <andrew+netdev@...n.ch>, "davem@...emloft.net"
<davem@...emloft.net>, "edumazet@...gle.com" <edumazet@...gle.com>,
"kuba@...nel.org" <kuba@...nel.org>, "pabeni@...hat.com" <pabeni@...hat.com>,
"intel-wired-lan@...ts.osuosl.org" <intel-wired-lan@...ts.osuosl.org>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>, "pmenzel@...gen.mpg.de"
<pmenzel@...gen.mpg.de>, "Kwapulinski, Piotr" <piotr.kwapulinski@...el.com>
Subject: RE: [PATCH iwl-next v3 1/3] igb: prepare for RSS key get/set support
> -----Original Message-----
> From: Takashi Kozu <takkozu@...zon.com>
> Sent: Monday, January 19, 2026 9:45 AM
> To: Nguyen, Anthony L <anthony.l.nguyen@...el.com>
> Cc: Kitszel, Przemyslaw <przemyslaw.kitszel@...el.com>;
> andrew+netdev@...n.ch; davem@...emloft.net; edumazet@...gle.com;
> kuba@...nel.org; pabeni@...hat.com; intel-wired-lan@...ts.osuosl.org;
> netdev@...r.kernel.org; Loktionov, Aleksandr
> <aleksandr.loktionov@...el.com>; pmenzel@...gen.mpg.de; Kwapulinski,
> Piotr <piotr.kwapulinski@...el.com>; Takashi Kozu <takkozu@...zon.com>
> Subject: [PATCH iwl-next v3 1/3] igb: prepare for RSS key get/set
> support
>
> 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().
>
> Signed-off-by: Takashi Kozu <takkozu@...zon.com>
> ---
> drivers/net/ethernet/intel/igb/igb.h | 3 +++
> drivers/net/ethernet/intel/igb/igb_ethtool.c | 21
> ++++++++++++++++++++
> drivers/net/ethernet/intel/igb/igb_main.c | 8 ++++----
> 3 files changed, 28 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..5107b0de4fa3 100644
> --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
> +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
> @@ -3016,6 +3016,27 @@ static int igb_set_rxnfc(struct net_device
> *dev, struct ethtool_rxnfc *cmd)
> return ret;
> }
>
> +/**
> + * igb_write_rss_key - Program the RSS key into device registers
> + * @adapter: board private structure
> + *
> + * Write the RSS key stored in adapter->rss_key to the E1000 hardware
> registers.
> + * Each 32-bit chunk of the key is read using get_unaligned_le32()
> and
> +written
> + * to the appropriate register.
> + */
> +void igb_write_rss_key(struct igb_adapter *adapter) {
Opening brace placement violates kernel coding style. For functions,
the opening brace should be on the next line, not on the same line as the function declaration.
Or is it my mail-client issue?
> + ASSERT_RTNL();
> +
> + struct e1000_hw *hw = &adapter->hw;
Declarations should be at the start of the block.
I think ASSERT_RTNL(); can be moved down safely?
> +
> + for (int i = 0; i < IGB_RSS_KEY_SIZE / 4; i++) {
> + u32 val = get_unaligned_le32(&adapter->rss_key[i * 4]);
> +
> + wr32(E1000_RSSRK(i), val);
> + }
> +}
> +
> static int igb_get_eee(struct net_device *netdev, struct ethtool_keee
> *edata) {
> struct igb_adapter *adapter = netdev_priv(netdev); diff --git
> a/drivers/net/ethernet/intel/igb/igb_main.c
> b/drivers/net/ethernet/intel/igb/igb_main.c
> index 85f9589cc568..568f491053ce 100644
...
--
> 2.52.0
Powered by blists - more mailing lists