netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] igb: Add macro for RETA indirection table
@ 2013-07-17  6:50 Laura Mihaela Vasilescu
  2013-07-17  6:50 ` [PATCH 2/2] igb: Expose RSS indirection table for ethtool Laura Mihaela Vasilescu
  2013-07-17  7:11 ` [PATCH 1/2] igb: Add macro for RETA indirection table Jeff Kirsher
  0 siblings, 2 replies; 6+ messages in thread
From: Laura Mihaela Vasilescu @ 2013-07-17  6:50 UTC (permalink / raw)
  To: netdev
  Cc: jeffrey.t.kirsher, carolyn.wyborny, anjali.singhai,
	Laura Mihaela Vasilescu

Signed-off-by: Laura Mihaela Vasilescu <laura.vasilescu@rosedu.org>
---
 drivers/net/ethernet/intel/igb/igb.h      |    2 ++
 drivers/net/ethernet/intel/igb/igb_main.c |    2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
index 15ea8dc..96fdfe2 100644
--- a/drivers/net/ethernet/intel/igb/igb.h
+++ b/drivers/net/ethernet/intel/igb/igb.h
@@ -456,6 +456,8 @@ struct igb_adapter {
 #define IGB_FLAG_RSS_FIELD_IPV6_UDP	(1 << 7)
 #define IGB_FLAG_WOL_SUPPORTED		(1 << 8)
 
+#define IGB_RETA_SIZE		32
+
 /* DMA Coalescing defines */
 #define IGB_MIN_TXPBSIZE	20408
 #define IGB_TX_BUF_4096		4096
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 6a0c1b6..09ea855a 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -3127,7 +3127,7 @@ static void igb_setup_mrqc(struct igb_adapter *adapter)
 	 * we are generating the results for n and n+2 and then interleaving
 	 * those with the results with n+1 and n+3.
 	 */
-	for (j = 0; j < 32; j++) {
+	for (j = 0; j < IGB_RETA_SIZE; j++) {
 		/* first pass generates n and n+2 */
 		u32 base = ((j * 0x00040004) + 0x00020000) * num_rx_queues;
 		u32 reta = (base & 0x07800780) >> (7 - shift);
-- 
1.7.10.4

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

* [PATCH 2/2] igb: Expose RSS indirection table for ethtool
  2013-07-17  6:50 [PATCH 1/2] igb: Add macro for RETA indirection table Laura Mihaela Vasilescu
@ 2013-07-17  6:50 ` Laura Mihaela Vasilescu
  2013-07-17  7:12   ` Jeff Kirsher
  2013-07-17 16:52   ` Ben Hutchings
  2013-07-17  7:11 ` [PATCH 1/2] igb: Add macro for RETA indirection table Jeff Kirsher
  1 sibling, 2 replies; 6+ messages in thread
From: Laura Mihaela Vasilescu @ 2013-07-17  6:50 UTC (permalink / raw)
  To: netdev
  Cc: jeffrey.t.kirsher, carolyn.wyborny, anjali.singhai,
	Laura Mihaela Vasilescu

Signed-off-by: Laura Mihaela Vasilescu <laura.vasilescu@rosedu.org>
---
 drivers/net/ethernet/intel/igb/igb_ethtool.c |   32 ++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
index 85fe7b5..7e18dfa 100644
--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
@@ -2771,6 +2771,35 @@ static void igb_ethtool_complete(struct net_device *netdev)
 	pm_runtime_put(&adapter->pdev->dev);
 }
 
+static u32 igb_get_rss_table_size(struct net_device *netdev)
+{
+	return IGB_RETA_SIZE;
+}
+
+static int igb_get_rss_table(struct net_device *netdev, u32 *rxfh_indir_tbl)
+{
+	struct igb_adapter *adapter = netdev_priv(netdev);
+	struct e1000_hw *hw = &adapter->hw;
+	int i;
+
+	for (i = 0; i < IGB_RETA_SIZE; i++)
+		rxfh_indir_tbl[i] = rd32(E1000_RETA(i));
+
+	return 0;
+}
+
+static int igb_set_rss_table(struct net_device *netdev, const u32 *rxfh_indir_tbl)
+{
+	struct igb_adapter *adapter = netdev_priv(netdev);
+	struct e1000_hw *hw = &adapter->hw;
+	int i;
+
+	for (i = 0; i < IGB_RETA_SIZE; i++)
+		wr32(E1000_RETA(i), rxfh_indir_tbl[i]);
+
+	return 0;
+}
+
 static const struct ethtool_ops igb_ethtool_ops = {
 	.get_settings		= igb_get_settings,
 	.set_settings		= igb_set_settings,
@@ -2804,6 +2833,9 @@ static const struct ethtool_ops igb_ethtool_ops = {
 	.set_eee		= igb_set_eee,
 	.get_module_info	= igb_get_module_info,
 	.get_module_eeprom	= igb_get_module_eeprom,
+	.get_rxfh_indir_size	= igb_get_rss_table_size,
+	.get_rxfh_indir		= igb_get_rss_table,
+	.set_rxfh_indir		= igb_set_rss_table,
 	.begin			= igb_ethtool_begin,
 	.complete		= igb_ethtool_complete,
 };
-- 
1.7.10.4

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

* Re: [PATCH 1/2] igb: Add macro for RETA indirection table
  2013-07-17  6:50 [PATCH 1/2] igb: Add macro for RETA indirection table Laura Mihaela Vasilescu
  2013-07-17  6:50 ` [PATCH 2/2] igb: Expose RSS indirection table for ethtool Laura Mihaela Vasilescu
@ 2013-07-17  7:11 ` Jeff Kirsher
  1 sibling, 0 replies; 6+ messages in thread
From: Jeff Kirsher @ 2013-07-17  7:11 UTC (permalink / raw)
  To: Laura Mihaela Vasilescu; +Cc: netdev, carolyn.wyborny, anjali.singhai

[-- Attachment #1: Type: text/plain, Size: 350 bytes --]

On Wed, 2013-07-17 at 09:50 +0300, Laura Mihaela Vasilescu wrote:
> Signed-off-by: Laura Mihaela Vasilescu <laura.vasilescu@rosedu.org>
> ---
>  drivers/net/ethernet/intel/igb/igb.h      |    2 ++
>  drivers/net/ethernet/intel/igb/igb_main.c |    2 +-
>  2 files changed, 3 insertions(+), 1 deletion(-) 

Thanks, I will add this to my queue.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

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

* Re: [PATCH 2/2] igb: Expose RSS indirection table for ethtool
  2013-07-17  6:50 ` [PATCH 2/2] igb: Expose RSS indirection table for ethtool Laura Mihaela Vasilescu
@ 2013-07-17  7:12   ` Jeff Kirsher
  2013-07-17 16:52   ` Ben Hutchings
  1 sibling, 0 replies; 6+ messages in thread
From: Jeff Kirsher @ 2013-07-17  7:12 UTC (permalink / raw)
  To: Laura Mihaela Vasilescu; +Cc: netdev, carolyn.wyborny, anjali.singhai

[-- Attachment #1: Type: text/plain, Size: 316 bytes --]

On Wed, 2013-07-17 at 09:50 +0300, Laura Mihaela Vasilescu wrote:
> Signed-off-by: Laura Mihaela Vasilescu <laura.vasilescu@rosedu.org>
> ---
>  drivers/net/ethernet/intel/igb/igb_ethtool.c |   32
> ++++++++++++++++++++++++++
>  1 file changed, 32 insertions(+) 

Added this one as well to my queue, thanks!

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

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

* Re: [PATCH 2/2] igb: Expose RSS indirection table for ethtool
  2013-07-17  6:50 ` [PATCH 2/2] igb: Expose RSS indirection table for ethtool Laura Mihaela Vasilescu
  2013-07-17  7:12   ` Jeff Kirsher
@ 2013-07-17 16:52   ` Ben Hutchings
  2013-07-17 17:03     ` Ben Hutchings
  1 sibling, 1 reply; 6+ messages in thread
From: Ben Hutchings @ 2013-07-17 16:52 UTC (permalink / raw)
  To: Laura Mihaela Vasilescu
  Cc: netdev, jeffrey.t.kirsher, carolyn.wyborny, anjali.singhai

This is wrong, as there are 4 entries packed into each register.

On Wed, 2013-07-17 at 09:50 +0300, Laura Mihaela Vasilescu wrote:
> Signed-off-by: Laura Mihaela Vasilescu <laura.vasilescu@rosedu.org>
> ---
>  drivers/net/ethernet/intel/igb/igb_ethtool.c |   32 ++++++++++++++++++++++++++
>  1 file changed, 32 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
> index 85fe7b5..7e18dfa 100644
> --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
> +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
> @@ -2771,6 +2771,35 @@ static void igb_ethtool_complete(struct net_device *netdev)
>  	pm_runtime_put(&adapter->pdev->dev);
>  }
>  
> +static u32 igb_get_rss_table_size(struct net_device *netdev)
> +{
> +	return IGB_RETA_SIZE;

* 4

> +}
> +
> +static int igb_get_rss_table(struct net_device *netdev, u32 *rxfh_indir_tbl)
> +{
> +	struct igb_adapter *adapter = netdev_priv(netdev);
> +	struct e1000_hw *hw = &adapter->hw;
> +	int i;
> +
> +	for (i = 0; i < IGB_RETA_SIZE; i++)
> +		rxfh_indir_tbl[i] = rd32(E1000_RETA(i));

Unpack each register into entries i*4, i*4+1, i*4+2, i*4+3.

> +
> +	return 0;
> +}
> +
> +static int igb_set_rss_table(struct net_device *netdev, const u32 *rxfh_indir_tbl)
> +{
> +	struct igb_adapter *adapter = netdev_priv(netdev);
> +	struct e1000_hw *hw = &adapter->hw;
> +	int i;
> +
> +	for (i = 0; i < IGB_RETA_SIZE; i++)
> +		wr32(E1000_RETA(i), rxfh_indir_tbl[i]);

Pack entries i*4, i*4+1, i*4+2, i*4+3 into each register (as in
igb_setup_mrqc()).

> +
> +	return 0;
> +}

Ben.

-- 
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.

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

* Re: [PATCH 2/2] igb: Expose RSS indirection table for ethtool
  2013-07-17 16:52   ` Ben Hutchings
@ 2013-07-17 17:03     ` Ben Hutchings
  0 siblings, 0 replies; 6+ messages in thread
From: Ben Hutchings @ 2013-07-17 17:03 UTC (permalink / raw)
  To: Laura Mihaela Vasilescu
  Cc: netdev, jeffrey.t.kirsher, carolyn.wyborny, anjali.singhai

On Wed, 2013-07-17 at 17:52 +0100, Ben Hutchings wrote:
[...]
> > +static int igb_get_rss_table(struct net_device *netdev, u32 *rxfh_indir_tbl)
> > +{
> > +	struct igb_adapter *adapter = netdev_priv(netdev);
> > +	struct e1000_hw *hw = &adapter->hw;
> > +	int i;
> > +
> > +	for (i = 0; i < IGB_RETA_SIZE; i++)
> > +		rxfh_indir_tbl[i] = rd32(E1000_RETA(i));
> 
> Unpack each register into entries i*4, i*4+1, i*4+2, i*4+3.
> 
> > +
> > +	return 0;
> > +}
> > +
> > +static int igb_set_rss_table(struct net_device *netdev, const u32 *rxfh_indir_tbl)
> > +{
> > +	struct igb_adapter *adapter = netdev_priv(netdev);
> > +	struct e1000_hw *hw = &adapter->hw;
> > +	int i;
> > +
> > +	for (i = 0; i < IGB_RETA_SIZE; i++)
> > +		wr32(E1000_RETA(i), rxfh_indir_tbl[i]);
> 
> Pack entries i*4, i*4+1, i*4+2, i*4+3 into each register (as in
> igb_setup_mrqc()).
[...]

Also, the indirection table should be preserved in the driver across
hardware resets, although it may need to be reset if the number of RX
queues changes.

Commit 90415477bf13 'tg3: Make the RSS indir tbl admin configurable' is
a good example of how to do this properly.

Ben.

-- 
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.

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

end of thread, other threads:[~2013-07-17 17:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-17  6:50 [PATCH 1/2] igb: Add macro for RETA indirection table Laura Mihaela Vasilescu
2013-07-17  6:50 ` [PATCH 2/2] igb: Expose RSS indirection table for ethtool Laura Mihaela Vasilescu
2013-07-17  7:12   ` Jeff Kirsher
2013-07-17 16:52   ` Ben Hutchings
2013-07-17 17:03     ` Ben Hutchings
2013-07-17  7:11 ` [PATCH 1/2] igb: Add macro for RETA indirection table Jeff Kirsher

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).