@@ -489,7 +489,7 @@ static struct pkt_stream *__pkt_stream_generate(u32 nb_pkts, u32 pkt_len, u32 nb
489489
490490 pkt_stream = __pkt_stream_alloc (nb_pkts );
491491 if (!pkt_stream )
492- exit_with_error ( ENOMEM ) ;
492+ return NULL ;
493493
494494 pkt_stream -> nb_pkts = nb_pkts ;
495495 pkt_stream -> max_pkt_len = pkt_len ;
@@ -513,37 +513,56 @@ static struct pkt_stream *pkt_stream_clone(struct pkt_stream *pkt_stream)
513513 return pkt_stream_generate (pkt_stream -> nb_pkts , pkt_stream -> pkts [0 ].len );
514514}
515515
516- static void pkt_stream_replace_ifobject (struct ifobject * ifobj , u32 nb_pkts , u32 pkt_len )
516+ static int pkt_stream_replace_ifobject (struct ifobject * ifobj , u32 nb_pkts , u32 pkt_len )
517517{
518518 ifobj -> xsk -> pkt_stream = pkt_stream_generate (nb_pkts , pkt_len );
519+
520+ if (!ifobj -> xsk -> pkt_stream )
521+ return - ENOMEM ;
522+
523+ return 0 ;
519524}
520525
521- static void pkt_stream_replace (struct test_spec * test , u32 nb_pkts , u32 pkt_len )
526+ static int pkt_stream_replace (struct test_spec * test , u32 nb_pkts , u32 pkt_len )
522527{
523- pkt_stream_replace_ifobject (test -> ifobj_tx , nb_pkts , pkt_len );
524- pkt_stream_replace_ifobject (test -> ifobj_rx , nb_pkts , pkt_len );
528+ int ret ;
529+
530+ ret = pkt_stream_replace_ifobject (test -> ifobj_tx , nb_pkts , pkt_len );
531+ if (ret )
532+ return ret ;
533+
534+ return pkt_stream_replace_ifobject (test -> ifobj_rx , nb_pkts , pkt_len );
525535}
526536
527- static void __pkt_stream_replace_half (struct ifobject * ifobj , u32 pkt_len ,
537+ static int __pkt_stream_replace_half (struct ifobject * ifobj , u32 pkt_len ,
528538 int offset )
529539{
530540 struct pkt_stream * pkt_stream ;
531541 u32 i ;
532542
533543 pkt_stream = pkt_stream_clone (ifobj -> xsk -> pkt_stream );
544+ if (!pkt_stream )
545+ return - ENOMEM ;
546+
534547 for (i = 1 ; i < ifobj -> xsk -> pkt_stream -> nb_pkts ; i += 2 )
535548 pkt_stream_pkt_set (pkt_stream , & pkt_stream -> pkts [i ], offset , pkt_len );
536549
537550 ifobj -> xsk -> pkt_stream = pkt_stream ;
551+
552+ return 0 ;
538553}
539554
540- static void pkt_stream_replace_half (struct test_spec * test , u32 pkt_len , int offset )
555+ static int pkt_stream_replace_half (struct test_spec * test , u32 pkt_len , int offset )
541556{
542- __pkt_stream_replace_half (test -> ifobj_tx , pkt_len , offset );
543- __pkt_stream_replace_half (test -> ifobj_rx , pkt_len , offset );
557+ int ret = __pkt_stream_replace_half (test -> ifobj_tx , pkt_len , offset );
558+
559+ if (ret )
560+ return ret ;
561+
562+ return __pkt_stream_replace_half (test -> ifobj_rx , pkt_len , offset );
544563}
545564
546- static void pkt_stream_receive_half (struct test_spec * test )
565+ static int pkt_stream_receive_half (struct test_spec * test )
547566{
548567 struct pkt_stream * pkt_stream = test -> ifobj_tx -> xsk -> pkt_stream ;
549568 u32 i ;
@@ -557,14 +576,19 @@ static void pkt_stream_receive_half(struct test_spec *test)
557576
558577 test -> ifobj_rx -> xsk -> pkt_stream = pkt_stream_generate (pkt_stream -> nb_pkts ,
559578 pkt_stream -> pkts [0 ].len );
579+ if (!test -> ifobj_rx -> xsk -> pkt_stream )
580+ return - ENOMEM ;
581+
560582 pkt_stream = test -> ifobj_rx -> xsk -> pkt_stream ;
561583 for (i = 1 ; i < pkt_stream -> nb_pkts ; i += 2 )
562584 pkt_stream -> pkts [i ].valid = false;
563585
564586 pkt_stream -> nb_valid_entries /= 2 ;
587+
588+ return 0 ;
565589}
566590
567- static void pkt_stream_even_odd_sequence (struct test_spec * test )
591+ static int pkt_stream_even_odd_sequence (struct test_spec * test )
568592{
569593 struct pkt_stream * pkt_stream ;
570594 u32 i ;
@@ -573,13 +597,19 @@ static void pkt_stream_even_odd_sequence(struct test_spec *test)
573597 pkt_stream = test -> ifobj_tx -> xsk_arr [i ].pkt_stream ;
574598 pkt_stream = __pkt_stream_generate (pkt_stream -> nb_pkts / 2 ,
575599 pkt_stream -> pkts [0 ].len , i , 2 );
600+ if (!pkt_stream )
601+ return - ENOMEM ;
576602 test -> ifobj_tx -> xsk_arr [i ].pkt_stream = pkt_stream ;
577603
578604 pkt_stream = test -> ifobj_rx -> xsk_arr [i ].pkt_stream ;
579605 pkt_stream = __pkt_stream_generate (pkt_stream -> nb_pkts / 2 ,
580606 pkt_stream -> pkts [0 ].len , i , 2 );
607+ if (!pkt_stream )
608+ return - ENOMEM ;
581609 test -> ifobj_rx -> xsk_arr [i ].pkt_stream = pkt_stream ;
582610 }
611+
612+ return 0 ;
583613}
584614
585615static void release_even_odd_sequence (struct test_spec * test )
@@ -638,7 +668,7 @@ static struct pkt_stream *__pkt_stream_generate_custom(struct ifobject *ifobj, s
638668
639669 pkt_stream = __pkt_stream_alloc (nb_frames );
640670 if (!pkt_stream )
641- exit_with_error ( ENOMEM ) ;
671+ return NULL ;
642672
643673 for (i = 0 ; i < nb_frames ; i ++ ) {
644674 struct pkt * pkt = & pkt_stream -> pkts [pkt_nb ];
@@ -681,15 +711,21 @@ static struct pkt_stream *__pkt_stream_generate_custom(struct ifobject *ifobj, s
681711 return pkt_stream ;
682712}
683713
684- static void pkt_stream_generate_custom (struct test_spec * test , struct pkt * pkts , u32 nb_pkts )
714+ static int pkt_stream_generate_custom (struct test_spec * test , struct pkt * pkts , u32 nb_pkts )
685715{
686716 struct pkt_stream * pkt_stream ;
687717
688718 pkt_stream = __pkt_stream_generate_custom (test -> ifobj_tx , pkts , nb_pkts , true);
719+ if (!pkt_stream )
720+ return - ENOMEM ;
689721 test -> ifobj_tx -> xsk -> pkt_stream = pkt_stream ;
690722
691723 pkt_stream = __pkt_stream_generate_custom (test -> ifobj_rx , pkts , nb_pkts , false);
724+ if (!pkt_stream )
725+ return - ENOMEM ;
692726 test -> ifobj_rx -> xsk -> pkt_stream = pkt_stream ;
727+
728+ return 0 ;
693729}
694730
695731static void pkt_print_data (u32 * data , u32 cnt )
@@ -1951,24 +1987,28 @@ int testapp_stats_rx_dropped(struct test_spec *test)
19511987 return TEST_SKIP ;
19521988 }
19531989
1954- pkt_stream_replace_half (test , MIN_PKT_SIZE * 4 , 0 );
1990+ if (pkt_stream_replace_half (test , MIN_PKT_SIZE * 4 , 0 ))
1991+ return TEST_FAILURE ;
19551992 test -> ifobj_rx -> umem -> frame_headroom = test -> ifobj_rx -> umem -> frame_size -
19561993 XDP_PACKET_HEADROOM - MIN_PKT_SIZE * 3 ;
1957- pkt_stream_receive_half (test );
1994+ if (pkt_stream_receive_half (test ))
1995+ return TEST_FAILURE ;
19581996 test -> ifobj_rx -> validation_func = validate_rx_dropped ;
19591997 return testapp_validate_traffic (test );
19601998}
19611999
19622000int testapp_stats_tx_invalid_descs (struct test_spec * test )
19632001{
1964- pkt_stream_replace_half (test , XSK_UMEM__INVALID_FRAME_SIZE , 0 );
2002+ if (pkt_stream_replace_half (test , XSK_UMEM__INVALID_FRAME_SIZE , 0 ))
2003+ return TEST_FAILURE ;
19652004 test -> ifobj_tx -> validation_func = validate_tx_invalid_descs ;
19662005 return testapp_validate_traffic (test );
19672006}
19682007
19692008int testapp_stats_rx_full (struct test_spec * test )
19702009{
1971- pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE );
2010+ if (pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE ))
2011+ return TEST_FAILURE ;
19722012 pkt_stream_delete (test -> ifobj_rx -> xsk -> pkt_stream );
19732013 test -> ifobj_rx -> xsk -> pkt_stream = pkt_stream_generate (DEFAULT_UMEM_BUFFERS , MIN_PKT_SIZE );
19742014
@@ -1980,7 +2020,8 @@ int testapp_stats_rx_full(struct test_spec *test)
19802020
19812021int testapp_stats_fill_empty (struct test_spec * test )
19822022{
1983- pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE );
2023+ if (pkt_stream_replace (test , DEFAULT_UMEM_BUFFERS + DEFAULT_UMEM_BUFFERS / 2 , MIN_PKT_SIZE ))
2024+ return TEST_FAILURE ;
19842025 pkt_stream_delete (test -> ifobj_rx -> xsk -> pkt_stream );
19852026 test -> ifobj_rx -> xsk -> pkt_stream = pkt_stream_generate (DEFAULT_UMEM_BUFFERS , MIN_PKT_SIZE );
19862027
@@ -1994,7 +2035,8 @@ int testapp_send_receive_unaligned(struct test_spec *test)
19942035 test -> ifobj_tx -> umem -> unaligned_mode = true;
19952036 test -> ifobj_rx -> umem -> unaligned_mode = true;
19962037 /* Let half of the packets straddle a 4K buffer boundary */
1997- pkt_stream_replace_half (test , MIN_PKT_SIZE , - MIN_PKT_SIZE / 2 );
2038+ if (pkt_stream_replace_half (test , MIN_PKT_SIZE , - MIN_PKT_SIZE / 2 ))
2039+ return TEST_FAILURE ;
19982040
19992041 return testapp_validate_traffic (test );
20002042}
@@ -2004,22 +2046,25 @@ int testapp_send_receive_unaligned_mb(struct test_spec *test)
20042046 test -> mtu = MAX_ETH_JUMBO_SIZE ;
20052047 test -> ifobj_tx -> umem -> unaligned_mode = true;
20062048 test -> ifobj_rx -> umem -> unaligned_mode = true;
2007- pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE );
2049+ if (pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE ))
2050+ return TEST_FAILURE ;
20082051 return testapp_validate_traffic (test );
20092052}
20102053
20112054int testapp_single_pkt (struct test_spec * test )
20122055{
20132056 struct pkt pkts [] = {{0 , MIN_PKT_SIZE , 0 , true}};
20142057
2015- pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts ));
2058+ if (pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts )))
2059+ return TEST_FAILURE ;
20162060 return testapp_validate_traffic (test );
20172061}
20182062
20192063int testapp_send_receive_mb (struct test_spec * test )
20202064{
20212065 test -> mtu = MAX_ETH_JUMBO_SIZE ;
2022- pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE );
2066+ if (pkt_stream_replace (test , DEFAULT_PKT_CNT , MAX_ETH_JUMBO_SIZE ))
2067+ return TEST_FAILURE ;
20232068
20242069 return testapp_validate_traffic (test );
20252070}
@@ -2060,7 +2105,8 @@ int testapp_invalid_desc_mb(struct test_spec *test)
20602105 }
20612106
20622107 test -> mtu = MAX_ETH_JUMBO_SIZE ;
2063- pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts ));
2108+ if (pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts )))
2109+ return TEST_FAILURE ;
20642110 return testapp_validate_traffic (test );
20652111}
20662112
@@ -2105,7 +2151,8 @@ int testapp_invalid_desc(struct test_spec *test)
21052151 pkts [6 ].offset += umem_size ;
21062152 }
21072153
2108- pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts ));
2154+ if (pkt_stream_generate_custom (test , pkts , ARRAY_SIZE (pkts )))
2155+ return TEST_FAILURE ;
21092156 return testapp_validate_traffic (test );
21102157}
21112158
@@ -2117,7 +2164,8 @@ int testapp_xdp_drop(struct test_spec *test)
21172164 test_spec_set_xdp_prog (test , skel_rx -> progs .xsk_xdp_drop , skel_tx -> progs .xsk_xdp_drop ,
21182165 skel_rx -> maps .xsk , skel_tx -> maps .xsk );
21192166
2120- pkt_stream_receive_half (test );
2167+ if (pkt_stream_receive_half (test ))
2168+ return TEST_FAILURE ;
21212169 return testapp_validate_traffic (test );
21222170}
21232171
@@ -2161,7 +2209,8 @@ int testapp_xdp_shared_umem(struct test_spec *test)
21612209 skel_tx -> progs .xsk_xdp_shared_umem ,
21622210 skel_rx -> maps .xsk , skel_tx -> maps .xsk );
21632211
2164- pkt_stream_even_odd_sequence (test );
2212+ if (pkt_stream_even_odd_sequence (test ))
2213+ return TEST_FAILURE ;
21652214
21662215 ret = testapp_validate_traffic (test );
21672216
@@ -2175,7 +2224,8 @@ int testapp_poll_txq_tmout(struct test_spec *test)
21752224 test -> ifobj_tx -> use_poll = true;
21762225 /* create invalid frame by set umem frame_size and pkt length equal to 2048 */
21772226 test -> ifobj_tx -> umem -> frame_size = 2048 ;
2178- pkt_stream_replace (test , 2 * DEFAULT_PKT_CNT , 2048 );
2227+ if (pkt_stream_replace (test , 2 * DEFAULT_PKT_CNT , 2048 ))
2228+ return TEST_FAILURE ;
21792229 return testapp_validate_traffic_single_thread (test , test -> ifobj_tx );
21802230}
21812231
@@ -2189,7 +2239,7 @@ int testapp_too_many_frags(struct test_spec *test)
21892239{
21902240 struct pkt * pkts ;
21912241 u32 max_frags , i ;
2192- int ret ;
2242+ int ret = TEST_FAILURE ;
21932243
21942244 if (test -> mode == TEST_MODE_ZC ) {
21952245 max_frags = test -> ifobj_tx -> xdp_zc_max_segs ;
@@ -2233,9 +2283,12 @@ int testapp_too_many_frags(struct test_spec *test)
22332283 pkts [2 * max_frags + 1 ].len = MIN_PKT_SIZE ;
22342284 pkts [2 * max_frags + 1 ].valid = true;
22352285
2236- pkt_stream_generate_custom (test , pkts , 2 * max_frags + 2 );
2237- ret = testapp_validate_traffic (test );
2286+ if (pkt_stream_generate_custom (test , pkts , 2 * max_frags + 2 )) {
2287+ free (pkts );
2288+ return TEST_FAILURE ;
2289+ }
22382290
2291+ ret = testapp_validate_traffic (test );
22392292 free (pkts );
22402293 return ret ;
22412294}
@@ -2309,7 +2362,8 @@ int testapp_send_receive_2k_frame(struct test_spec *test)
23092362{
23102363 test -> ifobj_tx -> umem -> frame_size = 2048 ;
23112364 test -> ifobj_rx -> umem -> frame_size = 2048 ;
2312- pkt_stream_replace (test , DEFAULT_PKT_CNT , MIN_PKT_SIZE );
2365+ if (pkt_stream_replace (test , DEFAULT_PKT_CNT , MIN_PKT_SIZE ))
2366+ return TEST_FAILURE ;
23132367 return testapp_validate_traffic (test );
23142368}
23152369
@@ -2431,7 +2485,13 @@ int testapp_hw_sw_max_ring_size(struct test_spec *test)
24312485 */
24322486 test -> ifobj_tx -> xsk -> batch_size = test -> ifobj_tx -> ring .tx_max_pending - 8 ;
24332487 test -> ifobj_rx -> xsk -> batch_size = test -> ifobj_tx -> ring .tx_max_pending - 8 ;
2434- pkt_stream_replace (test , max_descs , MIN_PKT_SIZE );
2488+ if (pkt_stream_replace (test , max_descs , MIN_PKT_SIZE )) {
2489+ clean_sockets (test , test -> ifobj_tx );
2490+ clean_sockets (test , test -> ifobj_rx );
2491+ clean_umem (test , test -> ifobj_rx , test -> ifobj_tx );
2492+ return TEST_FAILURE ;
2493+ }
2494+
24352495 return testapp_validate_traffic (test );
24362496}
24372497
@@ -2457,8 +2517,13 @@ static int testapp_adjust_tail(struct test_spec *test, u32 value, u32 pkt_len)
24572517 test -> adjust_tail = true;
24582518 test -> total_steps = 1 ;
24592519
2460- pkt_stream_replace_ifobject (test -> ifobj_tx , DEFAULT_BATCH_SIZE , pkt_len );
2461- pkt_stream_replace_ifobject (test -> ifobj_rx , DEFAULT_BATCH_SIZE , pkt_len + value );
2520+ ret = pkt_stream_replace_ifobject (test -> ifobj_tx , DEFAULT_BATCH_SIZE , pkt_len );
2521+ if (ret )
2522+ return TEST_FAILURE ;
2523+
2524+ ret = pkt_stream_replace_ifobject (test -> ifobj_rx , DEFAULT_BATCH_SIZE , pkt_len + value );
2525+ if (ret )
2526+ return TEST_FAILURE ;
24622527
24632528 ret = testapp_xdp_adjust_tail (test , value );
24642529 if (ret )
@@ -2510,7 +2575,8 @@ int testapp_tx_queue_consumer(struct test_spec *test)
25102575 }
25112576
25122577 nr_packets = MAX_TX_BUDGET_DEFAULT + 1 ;
2513- pkt_stream_replace (test , nr_packets , MIN_PKT_SIZE );
2578+ if (pkt_stream_replace (test , nr_packets , MIN_PKT_SIZE ))
2579+ return TEST_FAILURE ;
25142580 test -> ifobj_tx -> xsk -> batch_size = nr_packets ;
25152581 test -> ifobj_tx -> xsk -> check_consumer = true;
25162582
0 commit comments