@@ -160,7 +160,6 @@ int network_init(unsigned n_threads)
160160 goto error_exit ;
161161 }
162162
163-
164163 /* workaround for mlx5. */
165164 if (config .fp_autoscale ) {
166165 if (reta_mlx5_resize () != 0 ) {
@@ -270,11 +269,9 @@ int network_thread_init(struct dataplane_context *ctx)
270269 }
271270
272271 /* setting up RETA failed */
273- if (config .fp_autoscale ) {
274- if (reta_setup () != 0 ) {
275- fprintf (stderr , "RETA setup failed\n" );
276- goto error_tx_queue ;
277- }
272+ if (reta_setup () != 0 ) {
273+ fprintf (stderr , "RETA setup failed\n" );
274+ goto error_tx_queue ;
278275 }
279276 start_done = 1 ;
280277 }
@@ -438,6 +435,20 @@ static int reta_setup()
438435
439436 /* allocate RSS redirection table and core-bucket count table */
440437 rss_reta_size = eth_devinfo .reta_size ;
438+ if (rss_reta_size == 0 ) {
439+ fprintf (stderr , "Warning: NIC does not expose reta size\n" );
440+ rss_reta_size = rte_align32pow2 (fp_cores_cur ); /* map groups to fp cores in this case */
441+ }
442+ if (rss_reta_size > FLEXNIC_PL_MAX_FLOWGROUPS ) {
443+ fprintf (stderr , "reta_setup: reta size (%u) greater than maximum supported"
444+ " (%u)\n" , rss_reta_size , FLEXNIC_PL_MAX_FLOWGROUPS );
445+ abort ();
446+ }
447+ if (!rte_is_power_of_2 (rss_reta_size )) {
448+ fprintf (stderr , "reta_setup: reta size (%u) is not a power of 2\n" , rss_reta_size );
449+ abort ();
450+ }
451+
441452 rss_reta = rte_calloc ("rss reta" , ((rss_reta_size + RTE_RETA_GROUP_SIZE - 1 ) /
442453 RTE_RETA_GROUP_SIZE ), sizeof (* rss_reta ), 0 );
443454 rss_core_buckets = rte_calloc ("rss core buckets" , fp_cores_max ,
@@ -448,12 +459,6 @@ static int reta_setup()
448459 goto error_exit ;
449460 }
450461
451- if (rss_reta_size > FLEXNIC_PL_MAX_FLOWGROUPS ) {
452- fprintf (stderr , "reta_setup: reta size (%u) greater than maximum supported"
453- " (%u)\n" , rss_reta_size , FLEXNIC_PL_MAX_FLOWGROUPS );
454- abort ();
455- }
456-
457462 /* initialize reta */
458463 for (i = 0 , c = 0 ; i < rss_reta_size ; i ++ ) {
459464 rss_core_buckets [c ]++ ;
@@ -463,9 +468,9 @@ static int reta_setup()
463468 c = (c + 1 ) % fp_cores_cur ;
464469 }
465470
466- if (rte_eth_dev_rss_reta_update (net_port_id , rss_reta , rss_reta_size ) != 0 ) {
471+ if (rte_eth_dev_rss_reta_update (net_port_id , rss_reta , rss_reta_size ) != 0 && config . fp_autoscale ) {
467472 fprintf (stderr , "reta_setup: rte_eth_dev_rss_reta_update failed\n" );
468- return -1 ;
473+ goto error_exit ;
469474 }
470475
471476 return 0 ;
0 commit comments