@@ -3846,16 +3846,20 @@ static void ixgbe_store_vfreta(struct ixgbe_adapter *adapter)
3846
3846
u32 i , reta_entries = ixgbe_rss_indir_tbl_entries (adapter );
3847
3847
struct ixgbe_hw * hw = & adapter -> hw ;
3848
3848
u32 vfreta = 0 ;
3849
- unsigned int pf_pool = adapter -> num_vfs ;
3850
3849
3851
3850
/* Write redirection table to HW */
3852
3851
for (i = 0 ; i < reta_entries ; i ++ ) {
3852
+ u16 pool = adapter -> num_rx_pools ;
3853
+
3853
3854
vfreta |= (u32 )adapter -> rss_indir_tbl [i ] << (i & 0x3 ) * 8 ;
3854
- if ((i & 3 ) == 3 ) {
3855
- IXGBE_WRITE_REG (hw , IXGBE_PFVFRETA (i >> 2 , pf_pool ),
3855
+ if ((i & 3 ) != 3 )
3856
+ continue ;
3857
+
3858
+ while (pool -- )
3859
+ IXGBE_WRITE_REG (hw ,
3860
+ IXGBE_PFVFRETA (i >> 2 , VMDQ_P (pool )),
3856
3861
vfreta );
3857
- vfreta = 0 ;
3858
- }
3862
+ vfreta = 0 ;
3859
3863
}
3860
3864
}
3861
3865
@@ -3892,13 +3896,17 @@ static void ixgbe_setup_vfreta(struct ixgbe_adapter *adapter)
3892
3896
{
3893
3897
struct ixgbe_hw * hw = & adapter -> hw ;
3894
3898
u16 rss_i = adapter -> ring_feature [RING_F_RSS ].indices ;
3895
- unsigned int pf_pool = adapter -> num_vfs ;
3896
3899
int i , j ;
3897
3900
3898
3901
/* Fill out hash function seeds */
3899
- for (i = 0 ; i < 10 ; i ++ )
3900
- IXGBE_WRITE_REG (hw , IXGBE_PFVFRSSRK (i , pf_pool ),
3901
- * (adapter -> rss_key + i ));
3902
+ for (i = 0 ; i < 10 ; i ++ ) {
3903
+ u16 pool = adapter -> num_rx_pools ;
3904
+
3905
+ while (pool -- )
3906
+ IXGBE_WRITE_REG (hw ,
3907
+ IXGBE_PFVFRSSRK (i , VMDQ_P (pool )),
3908
+ * (adapter -> rss_key + i ));
3909
+ }
3902
3910
3903
3911
/* Fill out the redirection table */
3904
3912
for (i = 0 , j = 0 ; i < 64 ; i ++ , j ++ ) {
@@ -3964,7 +3972,7 @@ static void ixgbe_setup_mrqc(struct ixgbe_adapter *adapter)
3964
3972
3965
3973
if ((hw -> mac .type >= ixgbe_mac_X550 ) &&
3966
3974
(adapter -> flags & IXGBE_FLAG_SRIOV_ENABLED )) {
3967
- unsigned int pf_pool = adapter -> num_vfs ;
3975
+ u16 pool = adapter -> num_rx_pools ;
3968
3976
3969
3977
/* Enable VF RSS mode */
3970
3978
mrqc |= IXGBE_MRQC_MULTIPLE_RSS ;
@@ -3974,7 +3982,11 @@ static void ixgbe_setup_mrqc(struct ixgbe_adapter *adapter)
3974
3982
ixgbe_setup_vfreta (adapter );
3975
3983
vfmrqc = IXGBE_MRQC_RSSEN ;
3976
3984
vfmrqc |= rss_field ;
3977
- IXGBE_WRITE_REG (hw , IXGBE_PFVFMRQC (pf_pool ), vfmrqc );
3985
+
3986
+ while (pool -- )
3987
+ IXGBE_WRITE_REG (hw ,
3988
+ IXGBE_PFVFMRQC (VMDQ_P (pool )),
3989
+ vfmrqc );
3978
3990
} else {
3979
3991
ixgbe_setup_reta (adapter );
3980
3992
mrqc |= rss_field ;
@@ -4137,7 +4149,7 @@ static void ixgbe_setup_psrtype(struct ixgbe_adapter *adapter)
4137
4149
{
4138
4150
struct ixgbe_hw * hw = & adapter -> hw ;
4139
4151
int rss_i = adapter -> ring_feature [RING_F_RSS ].indices ;
4140
- u16 pool ;
4152
+ u16 pool = adapter -> num_rx_pools ;
4141
4153
4142
4154
/* PSRTYPE must be initialized in non 82598 adapters */
4143
4155
u32 psrtype = IXGBE_PSRTYPE_TCPHDR |
@@ -4154,7 +4166,7 @@ static void ixgbe_setup_psrtype(struct ixgbe_adapter *adapter)
4154
4166
else if (rss_i > 1 )
4155
4167
psrtype |= 1u << 29 ;
4156
4168
4157
- for_each_set_bit (pool , & adapter -> fwd_bitmask , 32 )
4169
+ while (pool -- )
4158
4170
IXGBE_WRITE_REG (hw , IXGBE_PSRTYPE (VMDQ_P (pool )), psrtype );
4159
4171
}
4160
4172
@@ -5270,29 +5282,6 @@ static void ixgbe_macvlan_set_rx_mode(struct net_device *dev, unsigned int pool,
5270
5282
IXGBE_WRITE_REG (hw , IXGBE_VMOLR (pool ), vmolr );
5271
5283
}
5272
5284
5273
- static void ixgbe_fwd_psrtype (struct ixgbe_fwd_adapter * vadapter )
5274
- {
5275
- struct ixgbe_adapter * adapter = vadapter -> real_adapter ;
5276
- int rss_i = adapter -> num_rx_queues_per_pool ;
5277
- struct ixgbe_hw * hw = & adapter -> hw ;
5278
- u16 pool = vadapter -> pool ;
5279
- u32 psrtype = IXGBE_PSRTYPE_TCPHDR |
5280
- IXGBE_PSRTYPE_UDPHDR |
5281
- IXGBE_PSRTYPE_IPV4HDR |
5282
- IXGBE_PSRTYPE_L2HDR |
5283
- IXGBE_PSRTYPE_IPV6HDR ;
5284
-
5285
- if (hw -> mac .type == ixgbe_mac_82598EB )
5286
- return ;
5287
-
5288
- if (rss_i > 3 )
5289
- psrtype |= 2u << 29 ;
5290
- else if (rss_i > 1 )
5291
- psrtype |= 1u << 29 ;
5292
-
5293
- IXGBE_WRITE_REG (hw , IXGBE_PSRTYPE (VMDQ_P (pool )), psrtype );
5294
- }
5295
-
5296
5285
/**
5297
5286
* ixgbe_clean_rx_ring - Free Rx Buffers per Queue
5298
5287
* @rx_ring: ring to free buffers from
@@ -5431,7 +5420,6 @@ static int ixgbe_fwd_ring_up(struct net_device *vdev,
5431
5420
ixgbe_add_mac_filter (adapter , vdev -> dev_addr ,
5432
5421
VMDQ_P (accel -> pool ));
5433
5422
5434
- ixgbe_fwd_psrtype (accel );
5435
5423
ixgbe_macvlan_set_rx_mode (vdev , VMDQ_P (accel -> pool ), adapter );
5436
5424
return err ;
5437
5425
fwd_queue_err :
0 commit comments