@@ -337,6 +337,52 @@ ZTEST_USER_F(dmm, test_check_dev_nocache_out_preallocate)
337337 user_data , sizeof (user_data ), true, false, true);
338338}
339339
340+ ZTEST_USER_F (dmm , test_check_multiple_alloc_and_free )
341+ {
342+ int retval ;
343+ uint8_t buf [256 ];
344+ uint8_t buf2 [32 ];
345+ void * dmm_buf ;
346+ void * dmm_buf2 ;
347+ void * mem_reg = fixture -> regions [DMM_TEST_REGION_NOCACHE ].mem_reg ;
348+ uintptr_t start_address ;
349+ uint32_t curr_use , max_use ;
350+
351+ if (IS_ENABLED (CONFIG_DMM_STATS )) {
352+ retval = dmm_stats_get (mem_reg , & start_address , & curr_use , & max_use );
353+ zassert_ok (retval );
354+ }
355+
356+ memset (buf , 0 , sizeof (buf ));
357+ memset (buf2 , 0 , sizeof (buf2 ));
358+
359+ retval = dmm_buffer_out_prepare (mem_reg , (void * )buf , sizeof (buf ), & dmm_buf );
360+ zassert_ok (retval );
361+ zassert_true (dmm_buf != NULL );
362+
363+ retval = dmm_buffer_out_prepare (mem_reg , (void * )buf2 , sizeof (buf2 ), & dmm_buf2 );
364+ zassert_ok (retval );
365+ zassert_true (dmm_buf2 != NULL );
366+
367+ retval = dmm_buffer_out_release (mem_reg , dmm_buf2 );
368+ zassert_ok (retval );
369+ zassert_true (dmm_buf != NULL );
370+
371+ retval = dmm_buffer_out_release (mem_reg , dmm_buf );
372+ zassert_ok (retval );
373+ zassert_true (dmm_buf != NULL );
374+
375+ if (IS_ENABLED (CONFIG_DMM_STATS )) {
376+ uint32_t curr_use2 ;
377+
378+ retval = dmm_stats_get (mem_reg , & start_address , & curr_use2 , & max_use );
379+ zassert_ok (retval );
380+ zassert_equal (curr_use , curr_use2 );
381+ TC_PRINT ("Stats start_address:%p current use:%d%% max use:%d%%\n" ,
382+ (void * )start_address , curr_use2 , max_use );
383+ }
384+ }
385+
340386ZTEST_SUITE (dmm , NULL , test_setup , NULL , test_cleanup , NULL );
341387
342388int dmm_test_prepare (void )
0 commit comments