@@ -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 )
@@ -1944,24 +1980,28 @@ int testapp_stats_rx_dropped(struct test_spec *test)
19441980 return TEST_SKIP ;
19451981 }
19461982
1947- pkt_stream_replace_half (test , MIN_PKT_SIZE * 4 , 0 );
1983+ if (pkt_stream_replace_half (test , MIN_PKT_SIZE * 4 , 0 ))
1984+ return TEST_FAILURE ;
19481985 test -> ifobj_rx -> umem -> frame_headroom = test -> ifobj_rx -> umem -> frame_size -
19491986 XDP_PACKET_HEADROOM - MIN_PKT_SIZE * 3 ;
1950- pkt_stream_receive_half (test );
1987+ if (pkt_stream_receive_half (test ))
1988+ return TEST_FAILURE ;
19511989 test -> ifobj_rx -> validation_func = validate_rx_dropped ;
19521990 return testapp_validate_traffic (test );
19531991}
19541992
19551993int testapp_stats_tx_invalid_descs (struct test_spec * test )
19561994{
1957- pkt_stream_replace_half (test , XSK_UMEM__INVALID_FRAME_SIZE , 0 );
1995+ if (pkt_stream_replace_half (test , XSK_UMEM__INVALID_FRAME_SIZE , 0 ))
1996+ return TEST_FAILURE ;
19581997 test -> ifobj_tx -> validation_func = validate_tx_invalid_descs ;
19591998 return testapp_validate_traffic (test );
19601999}
19612000
19622001int testapp_stats_rx_full (struct test_spec * test )
19632002{
1964- pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE );
2003+ if (pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE ))
2004+ return TEST_FAILURE ;
19652005 test -> ifobj_rx -> xsk -> pkt_stream = pkt_stream_generate (DEFAULT_UMEM_BUFFERS , MIN_PKT_SIZE );
19662006
19672007 test -> ifobj_rx -> xsk -> rxqsize = DEFAULT_UMEM_BUFFERS ;
@@ -1972,7 +2012,8 @@ int testapp_stats_rx_full(struct test_spec *test)
19722012
19732013int testapp_stats_fill_empty (struct test_spec * test )
19742014{
1975- pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE );
2015+ if (pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE ))
2016+ return TEST_FAILURE ;
19762017 test -> ifobj_rx -> xsk -> pkt_stream = pkt_stream_generate (DEFAULT_UMEM_BUFFERS , MIN_PKT_SIZE );
19772018
19782019 test -> ifobj_rx -> use_fill_ring = false;
@@ -1985,7 +2026,8 @@ int testapp_send_receive_unaligned(struct test_spec *test)
19852026 test -> ifobj_tx -> umem -> unaligned_mode = true;
19862027 test -> ifobj_rx -> umem -> unaligned_mode = true;
19872028 /* Let half of the packets straddle a 4K buffer boundary */
1988- pkt_stream_replace_half (test , MIN_PKT_SIZE , - MIN_PKT_SIZE / 2 );
2029+ if (pkt_stream_replace_half (test , MIN_PKT_SIZE , - MIN_PKT_SIZE / 2 ))
2030+ return TEST_FAILURE ;
19892031
19902032 return testapp_validate_traffic (test );
19912033}
@@ -1995,22 +2037,25 @@ int testapp_send_receive_unaligned_mb(struct test_spec *test)
19952037 test -> mtu = MAX_ETH_JUMBO_SIZE ;
19962038 test -> ifobj_tx -> umem -> unaligned_mode = true;
19972039 test -> ifobj_rx -> umem -> unaligned_mode = true;
1998- pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE );
2040+ if (pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE ))
2041+ return TEST_FAILURE ;
19992042 return testapp_validate_traffic (test );
20002043}
20012044
20022045int testapp_single_pkt (struct test_spec * test )
20032046{
20042047 struct pkt pkts [] = {{0 , MIN_PKT_SIZE , 0 , true}};
20052048
2006- pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts ));
2049+ if (pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts )))
2050+ return TEST_FAILURE ;
20072051 return testapp_validate_traffic (test );
20082052}
20092053
20102054int testapp_send_receive_mb (struct test_spec * test )
20112055{
20122056 test -> mtu = MAX_ETH_JUMBO_SIZE ;
2013- pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE );
2057+ if (pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE ))
2058+ return TEST_FAILURE ;
20142059
20152060 return testapp_validate_traffic (test );
20162061}
@@ -2051,7 +2096,8 @@ int testapp_invalid_desc_mb(struct test_spec *test)
20512096 }
20522097
20532098 test -> mtu = MAX_ETH_JUMBO_SIZE ;
2054- pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts ));
2099+ if (pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts )))
2100+ return TEST_FAILURE ;
20552101 return testapp_validate_traffic (test );
20562102}
20572103
@@ -2096,7 +2142,8 @@ int testapp_invalid_desc(struct test_spec *test)
20962142 pkts [6 ].offset += umem_size ;
20972143 }
20982144
2099- pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts ));
2145+ if (pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts )))
2146+ return TEST_FAILURE ;
21002147 return testapp_validate_traffic (test );
21012148}
21022149
@@ -2108,7 +2155,8 @@ int testapp_xdp_drop(struct test_spec *test)
21082155 test_spec_set_xdp_prog (test , skel_rx -> progs .xsk_xdp_drop , skel_tx -> progs .xsk_xdp_drop ,
21092156 skel_rx -> maps .xsk , skel_tx -> maps .xsk );
21102157
2111- pkt_stream_receive_half (test );
2158+ if (pkt_stream_receive_half (test ))
2159+ return TEST_FAILURE ;
21122160 return testapp_validate_traffic (test );
21132161}
21142162
@@ -2140,7 +2188,8 @@ int testapp_xdp_shared_umem(struct test_spec *test)
21402188 skel_tx -> progs .xsk_xdp_shared_umem ,
21412189 skel_rx -> maps .xsk , skel_tx -> maps .xsk );
21422190
2143- pkt_stream_even_odd_sequence (test );
2191+ if (pkt_stream_even_odd_sequence (test ))
2192+ return TEST_FAILURE ;
21442193
21452194 ret = testapp_validate_traffic (test );
21462195
@@ -2154,7 +2203,8 @@ int testapp_poll_txq_tmout(struct test_spec *test)
21542203 test -> ifobj_tx -> use_poll = true;
21552204 /* create invalid frame by set umem frame_size and pkt length equal to 2048 */
21562205 test -> ifobj_tx -> umem -> frame_size = 2048 ;
2157- pkt_stream_replace (test , 2 * DEFAULT_PKT_CNT , 2048 );
2206+ if (pkt_stream_replace (test , 2 * DEFAULT_PKT_CNT , 2048 ))
2207+ return TEST_FAILURE ;
21582208 return testapp_validate_traffic_single_thread (test , test -> ifobj_tx );
21592209}
21602210
@@ -2168,7 +2218,7 @@ int testapp_too_many_frags(struct test_spec *test)
21682218{
21692219 struct pkt * pkts ;
21702220 u32 max_frags , i ;
2171- int ret ;
2221+ int ret = TEST_FAILURE ;
21722222
21732223 if (test -> mode == TEST_MODE_ZC ) {
21742224 max_frags = test -> ifobj_tx -> xdp_zc_max_segs ;
@@ -2212,9 +2262,12 @@ int testapp_too_many_frags(struct test_spec *test)
22122262 pkts [2 * max_frags + 1 ].len = MIN_PKT_SIZE ;
22132263 pkts [2 * max_frags + 1 ].valid = true;
22142264
2215- pkt_stream_generate_custom (test , pkts , 2 * max_frags + 2 );
2216- ret = testapp_validate_traffic (test );
2265+ if (pkt_stream_generate_custom (test , pkts , 2 * max_frags + 2 )) {
2266+ free (pkts );
2267+ return TEST_FAILURE ;
2268+ }
22172269
2270+ ret = testapp_validate_traffic (test );
22182271 free (pkts );
22192272 return ret ;
22202273}
@@ -2288,7 +2341,8 @@ int testapp_send_receive_2k_frame(struct test_spec *test)
22882341{
22892342 test -> ifobj_tx -> umem -> frame_size = 2048 ;
22902343 test -> ifobj_rx -> umem -> frame_size = 2048 ;
2291- pkt_stream_replace (test , DEFAULT_PKT_CNT , MIN_PKT_SIZE );
2344+ if (pkt_stream_replace (test , DEFAULT_PKT_CNT , MIN_PKT_SIZE ))
2345+ return TEST_FAILURE ;
22922346 return testapp_validate_traffic (test );
22932347}
22942348
@@ -2410,7 +2464,13 @@ int testapp_hw_sw_max_ring_size(struct test_spec *test)
24102464 */
24112465 test -> ifobj_tx -> xsk -> batch_size = test -> ifobj_tx -> ring .tx_max_pending - 8 ;
24122466 test -> ifobj_rx -> xsk -> batch_size = test -> ifobj_tx -> ring .tx_max_pending - 8 ;
2413- pkt_stream_replace (test , max_descs , MIN_PKT_SIZE );
2467+ if (pkt_stream_replace (test , max_descs , MIN_PKT_SIZE )) {
2468+ clean_sockets (test , test -> ifobj_tx );
2469+ clean_sockets (test , test -> ifobj_rx );
2470+ clean_umem (test , test -> ifobj_rx , test -> ifobj_tx );
2471+ return TEST_FAILURE ;
2472+ }
2473+
24142474 return testapp_validate_traffic (test );
24152475}
24162476
@@ -2436,8 +2496,13 @@ static int testapp_adjust_tail(struct test_spec *test, u32 value, u32 pkt_len)
24362496 test -> adjust_tail = true;
24372497 test -> total_steps = 1 ;
24382498
2439- pkt_stream_replace_ifobject (test -> ifobj_tx , DEFAULT_BATCH_SIZE , pkt_len );
2440- pkt_stream_replace_ifobject (test -> ifobj_rx , DEFAULT_BATCH_SIZE , pkt_len + value );
2499+ ret = pkt_stream_replace_ifobject (test -> ifobj_tx , DEFAULT_BATCH_SIZE , pkt_len );
2500+ if (ret )
2501+ return TEST_FAILURE ;
2502+
2503+ ret = pkt_stream_replace_ifobject (test -> ifobj_rx , DEFAULT_BATCH_SIZE , pkt_len + value );
2504+ if (ret )
2505+ return TEST_FAILURE ;
24412506
24422507 ret = testapp_xdp_adjust_tail (test , value );
24432508 if (ret )
@@ -2489,7 +2554,8 @@ int testapp_tx_queue_consumer(struct test_spec *test)
24892554 }
24902555
24912556 nr_packets = MAX_TX_BUDGET_DEFAULT + 1 ;
2492- pkt_stream_replace (test , nr_packets , MIN_PKT_SIZE );
2557+ if (pkt_stream_replace (test , nr_packets , MIN_PKT_SIZE ))
2558+ return TEST_FAILURE ;
24932559 test -> ifobj_tx -> xsk -> batch_size = nr_packets ;
24942560 test -> ifobj_tx -> xsk -> check_consumer = true;
24952561
0 commit comments