@@ -479,7 +479,7 @@ static struct pkt_stream *__pkt_stream_generate(u32 nb_pkts, u32 pkt_len, u32 nb
479479
480480 pkt_stream = __pkt_stream_alloc (nb_pkts );
481481 if (!pkt_stream )
482- exit_with_error ( ENOMEM ) ;
482+ return NULL ;
483483
484484 pkt_stream -> nb_pkts = nb_pkts ;
485485 pkt_stream -> max_pkt_len = pkt_len ;
@@ -503,37 +503,56 @@ static struct pkt_stream *pkt_stream_clone(struct pkt_stream *pkt_stream)
503503 return pkt_stream_generate (pkt_stream -> nb_pkts , pkt_stream -> pkts [0 ].len );
504504}
505505
506- static void pkt_stream_replace_ifobject (struct ifobject * ifobj , u32 nb_pkts , u32 pkt_len )
506+ static int pkt_stream_replace_ifobject (struct ifobject * ifobj , u32 nb_pkts , u32 pkt_len )
507507{
508508 ifobj -> xsk -> pkt_stream = pkt_stream_generate (nb_pkts , pkt_len );
509+
510+ if (!ifobj -> xsk -> pkt_stream )
511+ return - ENOMEM ;
512+
513+ return 0 ;
509514}
510515
511- static void pkt_stream_replace (struct test_spec * test , u32 nb_pkts , u32 pkt_len )
516+ static int pkt_stream_replace (struct test_spec * test , u32 nb_pkts , u32 pkt_len )
512517{
513- pkt_stream_replace_ifobject (test -> ifobj_tx , nb_pkts , pkt_len );
514- pkt_stream_replace_ifobject (test -> ifobj_rx , nb_pkts , pkt_len );
518+ int ret ;
519+
520+ ret = pkt_stream_replace_ifobject (test -> ifobj_tx , nb_pkts , pkt_len );
521+ if (ret )
522+ return ret ;
523+
524+ return pkt_stream_replace_ifobject (test -> ifobj_rx , nb_pkts , pkt_len );
515525}
516526
517- static void __pkt_stream_replace_half (struct ifobject * ifobj , u32 pkt_len ,
527+ static int __pkt_stream_replace_half (struct ifobject * ifobj , u32 pkt_len ,
518528 int offset )
519529{
520530 struct pkt_stream * pkt_stream ;
521531 u32 i ;
522532
523533 pkt_stream = pkt_stream_clone (ifobj -> xsk -> pkt_stream );
534+ if (!pkt_stream )
535+ return - ENOMEM ;
536+
524537 for (i = 1 ; i < ifobj -> xsk -> pkt_stream -> nb_pkts ; i += 2 )
525538 pkt_stream_pkt_set (pkt_stream , & pkt_stream -> pkts [i ], offset , pkt_len );
526539
527540 ifobj -> xsk -> pkt_stream = pkt_stream ;
541+
542+ return 0 ;
528543}
529544
530- static void pkt_stream_replace_half (struct test_spec * test , u32 pkt_len , int offset )
545+ static int pkt_stream_replace_half (struct test_spec * test , u32 pkt_len , int offset )
531546{
532- __pkt_stream_replace_half (test -> ifobj_tx , pkt_len , offset );
533- __pkt_stream_replace_half (test -> ifobj_rx , pkt_len , offset );
547+ int ret = __pkt_stream_replace_half (test -> ifobj_tx , pkt_len , offset );
548+
549+ if (ret )
550+ return ret ;
551+
552+ return __pkt_stream_replace_half (test -> ifobj_rx , pkt_len , offset );
534553}
535554
536- static void pkt_stream_receive_half (struct test_spec * test )
555+ static int pkt_stream_receive_half (struct test_spec * test )
537556{
538557 struct pkt_stream * pkt_stream = test -> ifobj_tx -> xsk -> pkt_stream ;
539558 u32 i ;
@@ -547,14 +566,19 @@ static void pkt_stream_receive_half(struct test_spec *test)
547566
548567 test -> ifobj_rx -> xsk -> pkt_stream = pkt_stream_generate (pkt_stream -> nb_pkts ,
549568 pkt_stream -> pkts [0 ].len );
569+ if (!test -> ifobj_rx -> xsk -> pkt_stream )
570+ return - ENOMEM ;
571+
550572 pkt_stream = test -> ifobj_rx -> xsk -> pkt_stream ;
551573 for (i = 1 ; i < pkt_stream -> nb_pkts ; i += 2 )
552574 pkt_stream -> pkts [i ].valid = false;
553575
554576 pkt_stream -> nb_valid_entries /= 2 ;
577+
578+ return 0 ;
555579}
556580
557- static void pkt_stream_even_odd_sequence (struct test_spec * test )
581+ static int pkt_stream_even_odd_sequence (struct test_spec * test )
558582{
559583 struct pkt_stream * pkt_stream ;
560584 u32 i ;
@@ -563,13 +587,19 @@ static void pkt_stream_even_odd_sequence(struct test_spec *test)
563587 pkt_stream = test -> ifobj_tx -> xsk_arr [i ].pkt_stream ;
564588 pkt_stream = __pkt_stream_generate (pkt_stream -> nb_pkts / 2 ,
565589 pkt_stream -> pkts [0 ].len , i , 2 );
590+ if (!pkt_stream )
591+ return - ENOMEM ;
566592 test -> ifobj_tx -> xsk_arr [i ].pkt_stream = pkt_stream ;
567593
568594 pkt_stream = test -> ifobj_rx -> xsk_arr [i ].pkt_stream ;
569595 pkt_stream = __pkt_stream_generate (pkt_stream -> nb_pkts / 2 ,
570596 pkt_stream -> pkts [0 ].len , i , 2 );
597+ if (!pkt_stream )
598+ return - ENOMEM ;
571599 test -> ifobj_rx -> xsk_arr [i ].pkt_stream = pkt_stream ;
572600 }
601+
602+ return 0 ;
573603}
574604
575605static void release_even_odd_sequence (struct test_spec * test )
@@ -628,7 +658,7 @@ static struct pkt_stream *__pkt_stream_generate_custom(struct ifobject *ifobj, s
628658
629659 pkt_stream = __pkt_stream_alloc (nb_frames );
630660 if (!pkt_stream )
631- exit_with_error ( ENOMEM ) ;
661+ return NULL ;
632662
633663 for (i = 0 ; i < nb_frames ; i ++ ) {
634664 struct pkt * pkt = & pkt_stream -> pkts [pkt_nb ];
@@ -671,15 +701,21 @@ static struct pkt_stream *__pkt_stream_generate_custom(struct ifobject *ifobj, s
671701 return pkt_stream ;
672702}
673703
674- static void pkt_stream_generate_custom (struct test_spec * test , struct pkt * pkts , u32 nb_pkts )
704+ static int pkt_stream_generate_custom (struct test_spec * test , struct pkt * pkts , u32 nb_pkts )
675705{
676706 struct pkt_stream * pkt_stream ;
677707
678708 pkt_stream = __pkt_stream_generate_custom (test -> ifobj_tx , pkts , nb_pkts , true);
709+ if (!pkt_stream )
710+ return - ENOMEM ;
679711 test -> ifobj_tx -> xsk -> pkt_stream = pkt_stream ;
680712
681713 pkt_stream = __pkt_stream_generate_custom (test -> ifobj_rx , pkts , nb_pkts , false);
714+ if (!pkt_stream )
715+ return - ENOMEM ;
682716 test -> ifobj_rx -> xsk -> pkt_stream = pkt_stream ;
717+
718+ return 0 ;
683719}
684720
685721static void pkt_print_data (u32 * data , u32 cnt )
@@ -1945,24 +1981,28 @@ int testapp_stats_rx_dropped(struct test_spec *test)
19451981 return TEST_SKIP ;
19461982 }
19471983
1948- pkt_stream_replace_half (test , MIN_PKT_SIZE * 4 , 0 );
1984+ if (pkt_stream_replace_half (test , MIN_PKT_SIZE * 4 , 0 ))
1985+ return TEST_FAILURE ;
19491986 test -> ifobj_rx -> umem -> frame_headroom = test -> ifobj_rx -> umem -> frame_size -
19501987 XDP_PACKET_HEADROOM - MIN_PKT_SIZE * 3 ;
1951- pkt_stream_receive_half (test );
1988+ if (pkt_stream_receive_half (test ))
1989+ return TEST_FAILURE ;
19521990 test -> ifobj_rx -> validation_func = validate_rx_dropped ;
19531991 return testapp_validate_traffic (test );
19541992}
19551993
19561994int testapp_stats_tx_invalid_descs (struct test_spec * test )
19571995{
1958- pkt_stream_replace_half (test , XSK_UMEM__INVALID_FRAME_SIZE , 0 );
1996+ if (pkt_stream_replace_half (test , XSK_UMEM__INVALID_FRAME_SIZE , 0 ))
1997+ return TEST_FAILURE ;
19591998 test -> ifobj_tx -> validation_func = validate_tx_invalid_descs ;
19601999 return testapp_validate_traffic (test );
19612000}
19622001
19632002int testapp_stats_rx_full (struct test_spec * test )
19642003{
1965- pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE );
2004+ if (pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE ))
2005+ return TEST_FAILURE ;
19662006 test -> ifobj_rx -> xsk -> pkt_stream = pkt_stream_generate (DEFAULT_UMEM_BUFFERS , MIN_PKT_SIZE );
19672007
19682008 test -> ifobj_rx -> xsk -> rxqsize = DEFAULT_UMEM_BUFFERS ;
@@ -1973,7 +2013,8 @@ int testapp_stats_rx_full(struct test_spec *test)
19732013
19742014int testapp_stats_fill_empty (struct test_spec * test )
19752015{
1976- pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE );
2016+ if (pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE ))
2017+ return TEST_FAILURE ;
19772018 test -> ifobj_rx -> xsk -> pkt_stream = pkt_stream_generate (DEFAULT_UMEM_BUFFERS , MIN_PKT_SIZE );
19782019
19792020 test -> ifobj_rx -> use_fill_ring = false;
@@ -1986,7 +2027,8 @@ int testapp_send_receive_unaligned(struct test_spec *test)
19862027 test -> ifobj_tx -> umem -> unaligned_mode = true;
19872028 test -> ifobj_rx -> umem -> unaligned_mode = true;
19882029 /* Let half of the packets straddle a 4K buffer boundary */
1989- pkt_stream_replace_half (test , MIN_PKT_SIZE , - MIN_PKT_SIZE / 2 );
2030+ if (pkt_stream_replace_half (test , MIN_PKT_SIZE , - MIN_PKT_SIZE / 2 ))
2031+ return TEST_FAILURE ;
19902032
19912033 return testapp_validate_traffic (test );
19922034}
@@ -1996,22 +2038,25 @@ int testapp_send_receive_unaligned_mb(struct test_spec *test)
19962038 test -> mtu = MAX_ETH_JUMBO_SIZE ;
19972039 test -> ifobj_tx -> umem -> unaligned_mode = true;
19982040 test -> ifobj_rx -> umem -> unaligned_mode = true;
1999- pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE );
2041+ if (pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE ))
2042+ return TEST_FAILURE ;
20002043 return testapp_validate_traffic (test );
20012044}
20022045
20032046int testapp_single_pkt (struct test_spec * test )
20042047{
20052048 struct pkt pkts [] = {{0 , MIN_PKT_SIZE , 0 , true}};
20062049
2007- pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts ));
2050+ if (pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts )))
2051+ return TEST_FAILURE ;
20082052 return testapp_validate_traffic (test );
20092053}
20102054
20112055int testapp_send_receive_mb (struct test_spec * test )
20122056{
20132057 test -> mtu = MAX_ETH_JUMBO_SIZE ;
2014- pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE );
2058+ if (pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE ))
2059+ return TEST_FAILURE ;
20152060
20162061 return testapp_validate_traffic (test );
20172062}
@@ -2052,7 +2097,8 @@ int testapp_invalid_desc_mb(struct test_spec *test)
20522097 }
20532098
20542099 test -> mtu = MAX_ETH_JUMBO_SIZE ;
2055- pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts ));
2100+ if (pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts )))
2101+ return TEST_FAILURE ;
20562102 return testapp_validate_traffic (test );
20572103}
20582104
@@ -2097,7 +2143,8 @@ int testapp_invalid_desc(struct test_spec *test)
20972143 pkts [6 ].offset += umem_size ;
20982144 }
20992145
2100- pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts ));
2146+ if (pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts )))
2147+ return TEST_FAILURE ;
21012148 return testapp_validate_traffic (test );
21022149}
21032150
@@ -2109,7 +2156,8 @@ int testapp_xdp_drop(struct test_spec *test)
21092156 test_spec_set_xdp_prog (test , skel_rx -> progs .xsk_xdp_drop , skel_tx -> progs .xsk_xdp_drop ,
21102157 skel_rx -> maps .xsk , skel_tx -> maps .xsk );
21112158
2112- pkt_stream_receive_half (test );
2159+ if (pkt_stream_receive_half (test ))
2160+ return TEST_FAILURE ;
21132161 return testapp_validate_traffic (test );
21142162}
21152163
@@ -2141,7 +2189,8 @@ int testapp_xdp_shared_umem(struct test_spec *test)
21412189 skel_tx -> progs .xsk_xdp_shared_umem ,
21422190 skel_rx -> maps .xsk , skel_tx -> maps .xsk );
21432191
2144- pkt_stream_even_odd_sequence (test );
2192+ if (pkt_stream_even_odd_sequence (test ))
2193+ return TEST_FAILURE ;
21452194
21462195 ret = testapp_validate_traffic (test );
21472196
@@ -2155,7 +2204,8 @@ int testapp_poll_txq_tmout(struct test_spec *test)
21552204 test -> ifobj_tx -> use_poll = true;
21562205 /* create invalid frame by set umem frame_size and pkt length equal to 2048 */
21572206 test -> ifobj_tx -> umem -> frame_size = 2048 ;
2158- pkt_stream_replace (test , 2 * DEFAULT_PKT_CNT , 2048 );
2207+ if (pkt_stream_replace (test , 2 * DEFAULT_PKT_CNT , 2048 ))
2208+ return TEST_FAILURE ;
21592209 return testapp_validate_traffic_single_thread (test , test -> ifobj_tx );
21602210}
21612211
@@ -2169,7 +2219,7 @@ int testapp_too_many_frags(struct test_spec *test)
21692219{
21702220 struct pkt * pkts ;
21712221 u32 max_frags , i ;
2172- int ret ;
2222+ int ret = TEST_FAILURE ;
21732223
21742224 if (test -> mode == TEST_MODE_ZC ) {
21752225 max_frags = test -> ifobj_tx -> xdp_zc_max_segs ;
@@ -2213,9 +2263,12 @@ int testapp_too_many_frags(struct test_spec *test)
22132263 pkts [2 * max_frags + 1 ].len = MIN_PKT_SIZE ;
22142264 pkts [2 * max_frags + 1 ].valid = true;
22152265
2216- pkt_stream_generate_custom (test , pkts , 2 * max_frags + 2 );
2217- ret = testapp_validate_traffic (test );
2266+ if (pkt_stream_generate_custom (test , pkts , 2 * max_frags + 2 )) {
2267+ free (pkts );
2268+ return TEST_FAILURE ;
2269+ }
22182270
2271+ ret = testapp_validate_traffic (test );
22192272 free (pkts );
22202273 return ret ;
22212274}
@@ -2289,7 +2342,8 @@ int testapp_send_receive_2k_frame(struct test_spec *test)
22892342{
22902343 test -> ifobj_tx -> umem -> frame_size = 2048 ;
22912344 test -> ifobj_rx -> umem -> frame_size = 2048 ;
2292- pkt_stream_replace (test , DEFAULT_PKT_CNT , MIN_PKT_SIZE );
2345+ if (pkt_stream_replace (test , DEFAULT_PKT_CNT , MIN_PKT_SIZE ))
2346+ return TEST_FAILURE ;
22932347 return testapp_validate_traffic (test );
22942348}
22952349
@@ -2411,7 +2465,13 @@ int testapp_hw_sw_max_ring_size(struct test_spec *test)
24112465 */
24122466 test -> ifobj_tx -> xsk -> batch_size = test -> ifobj_tx -> ring .tx_max_pending - 8 ;
24132467 test -> ifobj_rx -> xsk -> batch_size = test -> ifobj_tx -> ring .tx_max_pending - 8 ;
2414- pkt_stream_replace (test , max_descs , MIN_PKT_SIZE );
2468+ if (pkt_stream_replace (test , max_descs , MIN_PKT_SIZE )) {
2469+ clean_sockets (test , test -> ifobj_tx );
2470+ clean_sockets (test , test -> ifobj_rx );
2471+ clean_umem (test , test -> ifobj_rx , test -> ifobj_tx );
2472+ return TEST_FAILURE ;
2473+ }
2474+
24152475 return testapp_validate_traffic (test );
24162476}
24172477
@@ -2437,8 +2497,13 @@ static int testapp_adjust_tail(struct test_spec *test, u32 value, u32 pkt_len)
24372497 test -> adjust_tail = true;
24382498 test -> total_steps = 1 ;
24392499
2440- pkt_stream_replace_ifobject (test -> ifobj_tx , DEFAULT_BATCH_SIZE , pkt_len );
2441- pkt_stream_replace_ifobject (test -> ifobj_rx , DEFAULT_BATCH_SIZE , pkt_len + value );
2500+ ret = pkt_stream_replace_ifobject (test -> ifobj_tx , DEFAULT_BATCH_SIZE , pkt_len );
2501+ if (ret )
2502+ return TEST_FAILURE ;
2503+
2504+ ret = pkt_stream_replace_ifobject (test -> ifobj_rx , DEFAULT_BATCH_SIZE , pkt_len + value );
2505+ if (ret )
2506+ return TEST_FAILURE ;
24422507
24432508 ret = testapp_xdp_adjust_tail (test , value );
24442509 if (ret )
@@ -2490,7 +2555,8 @@ int testapp_tx_queue_consumer(struct test_spec *test)
24902555 }
24912556
24922557 nr_packets = MAX_TX_BUDGET_DEFAULT + 1 ;
2493- pkt_stream_replace (test , nr_packets , MIN_PKT_SIZE );
2558+ if (pkt_stream_replace (test , nr_packets , MIN_PKT_SIZE ))
2559+ return TEST_FAILURE ;
24942560 test -> ifobj_tx -> xsk -> batch_size = nr_packets ;
24952561 test -> ifobj_tx -> xsk -> check_consumer = true;
24962562
0 commit comments