netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net 0/2][pull request] igc: Enhance the tx-usecs coalesce setting implementation
@ 2023-07-28 17:09 Tony Nguyen
  2023-07-28 17:09 ` [PATCH net 1/2] igc: Expose tx-usecs coalesce setting to user Tony Nguyen
  2023-07-28 17:09 ` [PATCH net 2/2] igc: Modify the tx-usecs coalesce setting Tony Nguyen
  0 siblings, 2 replies; 5+ messages in thread
From: Tony Nguyen @ 2023-07-28 17:09 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet, netdev
  Cc: Tony Nguyen, muhammad.husaini.zulkifli, sasha.neftin

Muhammad Husaini Zulkifli says:

The current tx-usecs coalesce setting implementation in the driver code is
improved by this patch series. The implementation of the current driver code
may have previously been a copy of the legacy code i210.

Patch 1:
Allow the user to see the tx-usecs colease setting's current value when using
the ethtool command. The previous value was 0.

Patch 2:
Give the user the ability to modify the tx-usecs colease setting's value.
Previously, it was restricted to rx-usecs.

The following are changes since commit 5416d7925e6ee72bf1d35cad1957c9a194554da4:
  dt-bindings: net: rockchip-dwmac: fix {tx|rx}-delay defaults/range in schema
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue 1GbE

Muhammad Husaini Zulkifli (2):
  igc: Expose tx-usecs coalesce setting to user
  igc: Modify the tx-usecs coalesce setting

 drivers/net/ethernet/intel/igc/igc_ethtool.c | 46 +++++++++++++++-----
 1 file changed, 34 insertions(+), 12 deletions(-)

-- 
2.38.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH net 1/2] igc: Expose tx-usecs coalesce setting to user
  2023-07-28 17:09 [PATCH net 0/2][pull request] igc: Enhance the tx-usecs coalesce setting implementation Tony Nguyen
@ 2023-07-28 17:09 ` Tony Nguyen
  2023-07-28 17:09 ` [PATCH net 2/2] igc: Modify the tx-usecs coalesce setting Tony Nguyen
  1 sibling, 0 replies; 5+ messages in thread
From: Tony Nguyen @ 2023-07-28 17:09 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet, netdev
  Cc: Muhammad Husaini Zulkifli, anthony.l.nguyen, sasha.neftin,
	Naama Meir

From: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>

When users attempt to obtain the coalesce setting using the
ethtool command, current code always returns 0 for tx-usecs.
This is because I225/6 always uses a queue pair setting, hence
tx_coalesce_usecs does not return a value during the
igc_ethtool_get_coalesce() callback process. The pair queue
condition checking in igc_ethtool_get_coalesce() is removed by
this patch so that the user gets information of the value of tx-usecs.

Even if i225/6 is using queue pair setting, there is no harm in
notifying the user of the tx-usecs. The implementation of the current
code may have previously been a copy of the legacy code i210.

How to test:
User can get the coalesce value using ethtool command.

Example command:
Get: ethtool -c <interface>

Previous output:

rx-usecs: 3
rx-frames: n/a
rx-usecs-irq: n/a
rx-frames-irq: n/a

tx-usecs: 0
tx-frames: n/a
tx-usecs-irq: n/a
tx-frames-irq: n/a

New output:

rx-usecs: 3
rx-frames: n/a
rx-usecs-irq: n/a
rx-frames-irq: n/a

tx-usecs: 3
tx-frames: n/a
tx-usecs-irq: n/a
tx-frames-irq: n/a

Fixes: 8c5ad0dae93c ("igc: Add ethtool support")
Signed-off-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
Tested-by: Naama Meir <naamax.meir@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/igc/igc_ethtool.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
index 93bce729be76..62d925b26f2c 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -880,12 +880,10 @@ static int igc_ethtool_get_coalesce(struct net_device *netdev,
 	else
 		ec->rx_coalesce_usecs = adapter->rx_itr_setting >> 2;
 
-	if (!(adapter->flags & IGC_FLAG_QUEUE_PAIRS)) {
-		if (adapter->tx_itr_setting <= 3)
-			ec->tx_coalesce_usecs = adapter->tx_itr_setting;
-		else
-			ec->tx_coalesce_usecs = adapter->tx_itr_setting >> 2;
-	}
+	if (adapter->tx_itr_setting <= 3)
+		ec->tx_coalesce_usecs = adapter->tx_itr_setting;
+	else
+		ec->tx_coalesce_usecs = adapter->tx_itr_setting >> 2;
 
 	return 0;
 }
@@ -910,9 +908,6 @@ static int igc_ethtool_set_coalesce(struct net_device *netdev,
 	    ec->tx_coalesce_usecs == 2)
 		return -EINVAL;
 
-	if ((adapter->flags & IGC_FLAG_QUEUE_PAIRS) && ec->tx_coalesce_usecs)
-		return -EINVAL;
-
 	/* If ITR is disabled, disable DMAC */
 	if (ec->rx_coalesce_usecs == 0) {
 		if (adapter->flags & IGC_FLAG_DMAC)
-- 
2.38.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH net 2/2] igc: Modify the tx-usecs coalesce setting
  2023-07-28 17:09 [PATCH net 0/2][pull request] igc: Enhance the tx-usecs coalesce setting implementation Tony Nguyen
  2023-07-28 17:09 ` [PATCH net 1/2] igc: Expose tx-usecs coalesce setting to user Tony Nguyen
@ 2023-07-28 17:09 ` Tony Nguyen
  2023-07-30 15:54   ` Simon Horman
  1 sibling, 1 reply; 5+ messages in thread
From: Tony Nguyen @ 2023-07-28 17:09 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet, netdev
  Cc: Muhammad Husaini Zulkifli, anthony.l.nguyen, sasha.neftin,
	Naama Meir

From: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>

This patch enables users to modify the tx-usecs parameter.
The rx-usecs value will adhere to the same value as tx-usecs
if the queue pair setting is enabled.

How to test:
User can set the coalesce value using ethtool command.

Example command:
Set: ethtool -C <interface>

Previous output:

root@P12DYHUSAINI:~# ethtool -C enp170s0 tx-usecs 10
netlink error: Invalid argument

New output:

root@P12DYHUSAINI:~# ethtool -C enp170s0 tx-usecs 10
rx-usecs: 10
rx-frames: n/a
rx-usecs-irq: n/a
rx-frames-irq: n/a

tx-usecs: 10
tx-frames: n/a
tx-usecs-irq: n/a
tx-frames-irq: n/a

Fixes: 8c5ad0dae93c ("igc: Add ethtool support")
Signed-off-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
Tested-by: Naama Meir <naamax.meir@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/igc/igc_ethtool.c | 33 ++++++++++++++++++--
 1 file changed, 30 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
index 62d925b26f2c..1cf7131a82c5 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -914,6 +914,34 @@ static int igc_ethtool_set_coalesce(struct net_device *netdev,
 			adapter->flags &= ~IGC_FLAG_DMAC;
 	}
 
+	if (adapter->flags & IGC_FLAG_QUEUE_PAIRS) {
+		u32 old_tx_itr, old_rx_itr;
+
+		/* This is to get back the original value before byte shifting */
+		old_tx_itr = (adapter->tx_itr_setting <= 3) ?
+			      adapter->tx_itr_setting : adapter->tx_itr_setting >> 2;
+
+		old_rx_itr = (adapter->rx_itr_setting <= 3) ?
+			      adapter->rx_itr_setting : adapter->rx_itr_setting >> 2;
+
+		if (old_tx_itr != ec->tx_coalesce_usecs) {
+			if (ec->tx_coalesce_usecs && ec->tx_coalesce_usecs <= 3)
+				adapter->tx_itr_setting = ec->tx_coalesce_usecs;
+			else
+				adapter->tx_itr_setting = ec->tx_coalesce_usecs << 2;
+
+			adapter->rx_itr_setting = adapter->tx_itr_setting;
+		} else if (old_rx_itr != ec->rx_coalesce_usecs) {
+			if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <= 3)
+				adapter->rx_itr_setting = ec->rx_coalesce_usecs;
+			else
+				adapter->rx_itr_setting = ec->rx_coalesce_usecs << 2;
+
+			adapter->tx_itr_setting = adapter->rx_itr_setting;
+		}
+		goto program_itr;
+	}
+
 	/* convert to rate of irq's per second */
 	if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <= 3)
 		adapter->rx_itr_setting = ec->rx_coalesce_usecs;
@@ -921,13 +949,12 @@ static int igc_ethtool_set_coalesce(struct net_device *netdev,
 		adapter->rx_itr_setting = ec->rx_coalesce_usecs << 2;
 
 	/* convert to rate of irq's per second */
-	if (adapter->flags & IGC_FLAG_QUEUE_PAIRS)
-		adapter->tx_itr_setting = adapter->rx_itr_setting;
-	else if (ec->tx_coalesce_usecs && ec->tx_coalesce_usecs <= 3)
+	if (ec->tx_coalesce_usecs && ec->tx_coalesce_usecs <= 3)
 		adapter->tx_itr_setting = ec->tx_coalesce_usecs;
 	else
 		adapter->tx_itr_setting = ec->tx_coalesce_usecs << 2;
 
+program_itr:
 	for (i = 0; i < adapter->num_q_vectors; i++) {
 		struct igc_q_vector *q_vector = adapter->q_vector[i];
 
-- 
2.38.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH net 2/2] igc: Modify the tx-usecs coalesce setting
  2023-07-28 17:09 ` [PATCH net 2/2] igc: Modify the tx-usecs coalesce setting Tony Nguyen
@ 2023-07-30 15:54   ` Simon Horman
  2023-07-31  3:53     ` Zulkifli, Muhammad Husaini
  0 siblings, 1 reply; 5+ messages in thread
From: Simon Horman @ 2023-07-30 15:54 UTC (permalink / raw)
  To: Tony Nguyen
  Cc: davem, kuba, pabeni, edumazet, netdev, Muhammad Husaini Zulkifli,
	sasha.neftin, Naama Meir

On Fri, Jul 28, 2023 at 10:09:54AM -0700, Tony Nguyen wrote:
> From: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
> 
> This patch enables users to modify the tx-usecs parameter.
> The rx-usecs value will adhere to the same value as tx-usecs
> if the queue pair setting is enabled.
> 
> How to test:
> User can set the coalesce value using ethtool command.
> 
> Example command:
> Set: ethtool -C <interface>
> 
> Previous output:
> 
> root@P12DYHUSAINI:~# ethtool -C enp170s0 tx-usecs 10
> netlink error: Invalid argument
> 
> New output:
> 
> root@P12DYHUSAINI:~# ethtool -C enp170s0 tx-usecs 10
> rx-usecs: 10
> rx-frames: n/a
> rx-usecs-irq: n/a
> rx-frames-irq: n/a
> 
> tx-usecs: 10
> tx-frames: n/a
> tx-usecs-irq: n/a
> tx-frames-irq: n/a
> 
> Fixes: 8c5ad0dae93c ("igc: Add ethtool support")
> Signed-off-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
> Tested-by: Naama Meir <naamax.meir@linux.intel.com>
> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
> ---
>  drivers/net/ethernet/intel/igc/igc_ethtool.c | 33 ++++++++++++++++++--
>  1 file changed, 30 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
> index 62d925b26f2c..1cf7131a82c5 100644
> --- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
> +++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
> @@ -914,6 +914,34 @@ static int igc_ethtool_set_coalesce(struct net_device *netdev,
>  			adapter->flags &= ~IGC_FLAG_DMAC;
>  	}
>  
> +	if (adapter->flags & IGC_FLAG_QUEUE_PAIRS) {
> +		u32 old_tx_itr, old_rx_itr;
> +
> +		/* This is to get back the original value before byte shifting */
> +		old_tx_itr = (adapter->tx_itr_setting <= 3) ?
> +			      adapter->tx_itr_setting : adapter->tx_itr_setting >> 2;
> +
> +		old_rx_itr = (adapter->rx_itr_setting <= 3) ?
> +			      adapter->rx_itr_setting : adapter->rx_itr_setting >> 2;
> +
> +		if (old_tx_itr != ec->tx_coalesce_usecs) {
> +			if (ec->tx_coalesce_usecs && ec->tx_coalesce_usecs <= 3)
> +				adapter->tx_itr_setting = ec->tx_coalesce_usecs;
> +			else
> +				adapter->tx_itr_setting = ec->tx_coalesce_usecs << 2;
> +
> +			adapter->rx_itr_setting = adapter->tx_itr_setting;
> +		} else if (old_rx_itr != ec->rx_coalesce_usecs) {
> +			if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <= 3)
> +				adapter->rx_itr_setting = ec->rx_coalesce_usecs;
> +			else
> +				adapter->rx_itr_setting = ec->rx_coalesce_usecs << 2;
> +
> +			adapter->tx_itr_setting = adapter->rx_itr_setting;
> +		}
> +		goto program_itr;

This goto seems fairly gratuitous to me.
Couldn't the code be refactored to avoid it,
f.e. by moving ~10 lines below into an else clause?

My main objection here is readability,
I have no objections about correctness.

> +	}
> +
>  	/* convert to rate of irq's per second */
>  	if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <= 3)
>  		adapter->rx_itr_setting = ec->rx_coalesce_usecs;
> @@ -921,13 +949,12 @@ static int igc_ethtool_set_coalesce(struct net_device *netdev,
>  		adapter->rx_itr_setting = ec->rx_coalesce_usecs << 2;
>  
>  	/* convert to rate of irq's per second */
> -	if (adapter->flags & IGC_FLAG_QUEUE_PAIRS)
> -		adapter->tx_itr_setting = adapter->rx_itr_setting;
> -	else if (ec->tx_coalesce_usecs && ec->tx_coalesce_usecs <= 3)
> +	if (ec->tx_coalesce_usecs && ec->tx_coalesce_usecs <= 3)
>  		adapter->tx_itr_setting = ec->tx_coalesce_usecs;
>  	else
>  		adapter->tx_itr_setting = ec->tx_coalesce_usecs << 2;
>  
> +program_itr:
>  	for (i = 0; i < adapter->num_q_vectors; i++) {
>  		struct igc_q_vector *q_vector = adapter->q_vector[i];
>  
> -- 
> 2.38.1
> 
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH net 2/2] igc: Modify the tx-usecs coalesce setting
  2023-07-30 15:54   ` Simon Horman
@ 2023-07-31  3:53     ` Zulkifli, Muhammad Husaini
  0 siblings, 0 replies; 5+ messages in thread
From: Zulkifli, Muhammad Husaini @ 2023-07-31  3:53 UTC (permalink / raw)
  To: Simon Horman, Nguyen, Anthony L
  Cc: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com,
	edumazet@google.com, netdev@vger.kernel.org, Neftin, Sasha,
	Naama Meir

Dear Simon,

Thanks for the review.

> -----Original Message-----
> From: Simon Horman <horms@kernel.org>
> Sent: Sunday, 30 July, 2023 11:54 PM
> To: Nguyen, Anthony L <anthony.l.nguyen@intel.com>
> Cc: davem@davemloft.net; kuba@kernel.org; pabeni@redhat.com;
> edumazet@google.com; netdev@vger.kernel.org; Zulkifli, Muhammad Husaini
> <muhammad.husaini.zulkifli@intel.com>; Neftin, Sasha
> <sasha.neftin@intel.com>; Naama Meir <naamax.meir@linux.intel.com>
> Subject: Re: [PATCH net 2/2] igc: Modify the tx-usecs coalesce setting
> 
> On Fri, Jul 28, 2023 at 10:09:54AM -0700, Tony Nguyen wrote:
> > From: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
> >
> > This patch enables users to modify the tx-usecs parameter.
> > The rx-usecs value will adhere to the same value as tx-usecs if the
> > queue pair setting is enabled.
> >
> > How to test:
> > User can set the coalesce value using ethtool command.
> >
> > Example command:
> > Set: ethtool -C <interface>
> >
> > Previous output:
> >
> > root@P12DYHUSAINI:~# ethtool -C enp170s0 tx-usecs 10 netlink error:
> > Invalid argument
> >
> > New output:
> >
> > root@P12DYHUSAINI:~# ethtool -C enp170s0 tx-usecs 10
> > rx-usecs: 10
> > rx-frames: n/a
> > rx-usecs-irq: n/a
> > rx-frames-irq: n/a
> >
> > tx-usecs: 10
> > tx-frames: n/a
> > tx-usecs-irq: n/a
> > tx-frames-irq: n/a
> >
> > Fixes: 8c5ad0dae93c ("igc: Add ethtool support")
> > Signed-off-by: Muhammad Husaini Zulkifli
> > <muhammad.husaini.zulkifli@intel.com>
> > Tested-by: Naama Meir <naamax.meir@linux.intel.com>
> > Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
> > ---
> >  drivers/net/ethernet/intel/igc/igc_ethtool.c | 33
> > ++++++++++++++++++--
> >  1 file changed, 30 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c
> > b/drivers/net/ethernet/intel/igc/igc_ethtool.c
> > index 62d925b26f2c..1cf7131a82c5 100644
> > --- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
> > +++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
> > @@ -914,6 +914,34 @@ static int igc_ethtool_set_coalesce(struct net_device
> *netdev,
> >  			adapter->flags &= ~IGC_FLAG_DMAC;
> >  	}
> >
> > +	if (adapter->flags & IGC_FLAG_QUEUE_PAIRS) {
> > +		u32 old_tx_itr, old_rx_itr;
> > +
> > +		/* This is to get back the original value before byte shifting */
> > +		old_tx_itr = (adapter->tx_itr_setting <= 3) ?
> > +			      adapter->tx_itr_setting : adapter->tx_itr_setting >>
> 2;
> > +
> > +		old_rx_itr = (adapter->rx_itr_setting <= 3) ?
> > +			      adapter->rx_itr_setting : adapter->rx_itr_setting >>
> 2;
> > +
> > +		if (old_tx_itr != ec->tx_coalesce_usecs) {
> > +			if (ec->tx_coalesce_usecs && ec->tx_coalesce_usecs
> <= 3)
> > +				adapter->tx_itr_setting = ec-
> >tx_coalesce_usecs;
> > +			else
> > +				adapter->tx_itr_setting = ec-
> >tx_coalesce_usecs << 2;
> > +
> > +			adapter->rx_itr_setting = adapter->tx_itr_setting;
> > +		} else if (old_rx_itr != ec->rx_coalesce_usecs) {
> > +			if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs
> <= 3)
> > +				adapter->rx_itr_setting = ec-
> >rx_coalesce_usecs;
> > +			else
> > +				adapter->rx_itr_setting = ec-
> >rx_coalesce_usecs << 2;
> > +
> > +			adapter->tx_itr_setting = adapter->rx_itr_setting;
> > +		}
> > +		goto program_itr;
> 
> This goto seems fairly gratuitous to me.
> Couldn't the code be refactored to avoid it, f.e. by moving ~10 lines below into
> an else clause?
> 
> My main objection here is readability,
> I have no objections about correctness.

Good suggestion. I can refactor the code and remove the "goto" statement
as per suggested.

Ex:
if (adapter->flags & IGC_FLAG_QUEUE_PAIRS) {
   ....
} else {
  .....
}

for (i = 0; i < adapter->num_q_vectors; i++) { 
.....

Thanks,
Husaini

> 
> > +	}
> > +
> >  	/* convert to rate of irq's per second */
> >  	if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <= 3)
> >  		adapter->rx_itr_setting = ec->rx_coalesce_usecs; @@ -921,13
> +949,12
> > @@ static int igc_ethtool_set_coalesce(struct net_device *netdev,
> >  		adapter->rx_itr_setting = ec->rx_coalesce_usecs << 2;
> >
> >  	/* convert to rate of irq's per second */
> > -	if (adapter->flags & IGC_FLAG_QUEUE_PAIRS)
> > -		adapter->tx_itr_setting = adapter->rx_itr_setting;
> > -	else if (ec->tx_coalesce_usecs && ec->tx_coalesce_usecs <= 3)
> > +	if (ec->tx_coalesce_usecs && ec->tx_coalesce_usecs <= 3)
> >  		adapter->tx_itr_setting = ec->tx_coalesce_usecs;
> >  	else
> >  		adapter->tx_itr_setting = ec->tx_coalesce_usecs << 2;
> >
> > +program_itr:
> >  	for (i = 0; i < adapter->num_q_vectors; i++) {
> >  		struct igc_q_vector *q_vector = adapter->q_vector[i];
> >
> > --
> > 2.38.1
> >
> >

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-07-31  3:53 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-28 17:09 [PATCH net 0/2][pull request] igc: Enhance the tx-usecs coalesce setting implementation Tony Nguyen
2023-07-28 17:09 ` [PATCH net 1/2] igc: Expose tx-usecs coalesce setting to user Tony Nguyen
2023-07-28 17:09 ` [PATCH net 2/2] igc: Modify the tx-usecs coalesce setting Tony Nguyen
2023-07-30 15:54   ` Simon Horman
2023-07-31  3:53     ` Zulkifli, Muhammad Husaini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).