lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <SJ0PR11MB5866396B608ED5A9DA8EB5C5E5852@SJ0PR11MB5866.namprd11.prod.outlook.com>
Date: Mon, 12 Aug 2024 10:31:55 +0000
From: "Loktionov, Aleksandr" <aleksandr.loktionov@...el.com>
To: Simon Horman <horms@...nel.org>
CC: "intel-wired-lan@...ts.osuosl.org" <intel-wired-lan@...ts.osuosl.org>,
	"Nguyen, Anthony L" <anthony.l.nguyen@...el.com>, "netdev@...r.kernel.org"
	<netdev@...r.kernel.org>, "Kubalewski, Arkadiusz"
	<arkadiusz.kubalewski@...el.com>
Subject: RE: [PATCH iwl-next v1] i40e: Add Energy Efficient Ethernet ability
 for X710 Base-T/KR/KX cards



> -----Original Message-----
> From: Simon Horman <horms@...nel.org>
> Sent: Friday, August 9, 2024 5:26 PM
> To: Loktionov, Aleksandr <aleksandr.loktionov@...el.com>
> Cc: intel-wired-lan@...ts.osuosl.org; Nguyen, Anthony L
> <anthony.l.nguyen@...el.com>; netdev@...r.kernel.org; Kubalewski,
> Arkadiusz <arkadiusz.kubalewski@...el.com>
> Subject: Re: [PATCH iwl-next v1] i40e: Add Energy Efficient Ethernet
> ability for X710 Base-T/KR/KX cards
> 
> On Thu, Aug 08, 2024 at 01:22:17PM +0200, Aleksandr Loktionov wrote:
> 
> ...
> 
> > diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
> > b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
> > index 1d0d2e5..cd7509f 100644
> > --- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
> > +++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
> > @@ -5641,50 +5641,77 @@ static int i40e_get_module_eeprom(struct
> net_device *netdev,
> >  	return 0;
> >  }
> >
> > +static void i40e_eee_capability_to_kedata_supported(__le16
> eee_capability_,
> > +						    unsigned long *supported)
> > +{
> > +	const int eee_capability = le16_to_cpu(eee_capability_);
> 
> Hi Aleksandr,
> 
> Maybe u16 would be an appropriate type for eee_capability.
> Also, using const seems excessive here.
> 
The value is got from FW which dictates endianness.
Const is const, explicit coding style helps understanding and compiler optimizations. 

> > +	static const int lut[] = {
> > +		ETHTOOL_LINK_MODE_100baseT_Full_BIT,
> > +		ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
> > +		ETHTOOL_LINK_MODE_10000baseT_Full_BIT,
> > +		ETHTOOL_LINK_MODE_1000baseKX_Full_BIT,
> > +		ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT,
> > +		ETHTOOL_LINK_MODE_10000baseKR_Full_BIT,
> > +		ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT,
> > +	};
> > +
> > +	linkmode_zero(supported);
> > +	for (unsigned int i = ARRAY_SIZE(lut); i--; )
> > +		if (eee_capability & (1 << (i + 1)))
> 
> Perhaps:
> 
> 		if (eee_capability & BIT(i + 1))
> 
Ok

> > +			linkmode_set_bit(lut[i], supported); }
> > +
> >  static int i40e_get_eee(struct net_device *netdev, struct
> > ethtool_keee *edata)  {
> >  	struct i40e_netdev_priv *np = netdev_priv(netdev);
> >  	struct i40e_aq_get_phy_abilities_resp phy_cfg;
> >  	struct i40e_vsi *vsi = np->vsi;
> >  	struct i40e_pf *pf = vsi->back;
> >  	struct i40e_hw *hw = &pf->hw;
> > -	int status = 0;
> > +	int status;
> 
> This change seems unrelated to the subject of this patch.
> If so, please remove.
> 
But it fixes kernel coding style which checkpatch.pl may complain about.

> >
> >  	/* Get initial PHY capabilities */
> >  	status = i40e_aq_get_phy_capabilities(hw, false, true, &phy_cfg,
> NULL);
> >  	if (status)
> >  		return -EAGAIN;
> >
> >  	/* Check whether NIC configuration is compatible with Energy
> Efficient
> >  	 * Ethernet (EEE) mode.
> >  	 */
> >  	if (phy_cfg.eee_capability == 0)
> >  		return -EOPNOTSUPP;
> >
> > +	i40e_eee_capability_to_kedata_supported(phy_cfg.eee_capability,
> > +edata->supported);
> 
> Please line-wrap: Networking still prefers code to be 80 columns wide
> or less.
> 
As you wish.

> > +	linkmode_copy(edata->lp_advertised, edata->supported);
> > +
> >  	/* Get current configuration */
> >  	status = i40e_aq_get_phy_capabilities(hw, false, false,
> &phy_cfg, NULL);
> >  	if (status)
> >  		return -EAGAIN;
> >
> > +	linkmode_zero(edata->advertised);
> > +	if (phy_cfg.eee_capability)
> > +		linkmode_copy(edata->advertised, edata->supported);
> >  	edata->eee_enabled = !!phy_cfg.eee_capability;
> >  	edata->tx_lpi_enabled = pf->stats.tx_lpi_status;
> >
> >  	edata->eee_active = pf->stats.tx_lpi_status &&
> > pf->stats.rx_lpi_status;
> >
> >  	return 0;
> >  }
> >
> >  static int i40e_is_eee_param_supported(struct net_device *netdev,
> >  				       struct ethtool_keee *edata)  {
> >  	struct i40e_netdev_priv *np = netdev_priv(netdev);
> >  	struct i40e_vsi *vsi = np->vsi;
> >  	struct i40e_pf *pf = vsi->back;
> >  	struct i40e_ethtool_not_used {
> > -		u32 value;
> > +		int value;
> 
> It is unclear to me that this type change is really related to the
> subject of this patch. If not, please drop it. But if so, it seems to
> me that bool would be the appropriate type.
> 
> >  		const char *name;
> >  	} param[] = {
> > -		{edata->tx_lpi_timer, "tx-timer"},
> > +		{!!(edata->advertised[0] & ~edata->supported[0]),
> "advertise"},
> > +		{!!edata->tx_lpi_timer, "tx-timer"},
> >  		{edata->tx_lpi_enabled != pf->stats.tx_lpi_status, "tx-
> lpi"}
> >  	};
> >  	int i;
> > @@ -5710,7 +5737,7 @@ static int i40e_set_eee(struct net_device
> *netdev, struct ethtool_keee *edata)
> >  	struct i40e_pf *pf = vsi->back;
> >  	struct i40e_hw *hw = &pf->hw;
> >  	__le16 eee_capability;
> > -	int status = 0;
> > +	int status;
> 
> This change seems unrelated to the subject of this patch.
> If so, please remove.
> 
But it fixes kernel coding style which checkpatch.pl may complain about.

> >
> >  	/* Deny parameters we don't support */
> >  	if (i40e_is_eee_param_supported(netdev, edata)) @@ -5754,7
> +5781,7
> > @@ static int i40e_set_eee(struct net_device *netdev, struct
> ethtool_keee *edata)
> >  		config.eeer |=
> cpu_to_le32(I40E_PRTPM_EEER_TX_LPI_EN_MASK);
> >  	} else {
> >  		config.eee_capability = 0;
> > -		config.eeer &=
> cpu_to_le32(~I40E_PRTPM_EEER_TX_LPI_EN_MASK);
> > +		config.eeer &=
> ~cpu_to_le32(I40E_PRTPM_EEER_TX_LPI_EN_MASK);
> 
> Ditto.
> 
> >  	}
> >
> >  	/* Apply modified PHY configuration */ diff --git
> > a/drivers/net/ethernet/intel/i40e/i40e_main.c
> > b/drivers/net/ethernet/intel/i40e/i40e_main.c
> > index cbcfada..55bbf0f 100644
> > --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
> > +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
> > @@ -7263,6 +7263,22 @@ static int i40e_init_pf_dcb(struct i40e_pf
> *pf)
> >  	return err;
> >  }
> >  #endif /* CONFIG_I40E_DCB */
> > +static void i40e_print_link_message_eee(struct i40e_vsi *vsi,
> struct ethtool_keee *kedata,
> > +			    const char *speed, const char *fc) {
> > +	if (vsi->netdev->ethtool_ops->get_eee)
> > +		vsi->netdev->ethtool_ops->get_eee(vsi->netdev, kedata);
> > +
> > +	if (!linkmode_empty(kedata->supported))
> > +		netdev_info(vsi->netdev,
> > +			    "NIC Link is Up, %sbps Full Duplex, Flow
> Control: %s, EEE: %s\n",
> > +			    speed, fc,
> > +			    kedata->eee_enabled ? "Enabled" : "Disabled");
> > +	else
> > +		netdev_info(vsi->netdev,
> > +			    "NIC Link is Up, %sbps Full Duplex, Flow
> Control: %s\n",
> > +			    speed, fc);
> > +}
> >
> >  /**
> >   * i40e_print_link_message - print link up or down @@ -7395,9
> > +7411,12 @@ void i40e_print_link_message(struct i40e_vsi *vsi, bool
> isup)
> >  			    "NIC Link is Up, %sbps Full Duplex, Requested
> FEC: %s, Negotiated FEC: %s, Autoneg: %s, Flow Control: %s\n",
> >  			    speed, req_fec, fec, an, fc);
> >  	} else {
> > -		netdev_info(vsi->netdev,
> > -			    "NIC Link is Up, %sbps Full Duplex, Flow
> Control: %s\n",
> > -			    speed, fc);
> > +		struct ethtool_keee kedata;
> > +
> > +		linkmode_zero(kedata.supported);
> > +		kedata.eee_enabled = false;
> 
> Can the declaration of ethtool_keee be moved into
> i40e_print_link_message_eee()? I suspect that would lead to a cleaner
> implementation.
> 
Ok

> > +
> > +		i40e_print_link_message_eee(vsi, &kedata, speed, fc);
> >  	}
> >
> >  }

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ