@@ -325,6 +325,29 @@ static void dbg_result(const char *err, unsigned int n, unsigned int src_off,
325
325
current -> comm , n , err , src_off , dst_off , len , data );
326
326
}
327
327
328
+ static unsigned long long dmatest_persec (s64 runtime , unsigned int val )
329
+ {
330
+ unsigned long long per_sec = 1000000 ;
331
+
332
+ if (runtime <= 0 )
333
+ return 0 ;
334
+
335
+ /* drop precision until runtime is 32-bits */
336
+ while (runtime > UINT_MAX ) {
337
+ runtime >>= 1 ;
338
+ per_sec <<= 1 ;
339
+ }
340
+
341
+ per_sec *= val ;
342
+ do_div (per_sec , runtime );
343
+ return per_sec ;
344
+ }
345
+
346
+ static unsigned long long dmatest_KBs (s64 runtime , unsigned long long len )
347
+ {
348
+ return dmatest_persec (runtime , len >> 10 );
349
+ }
350
+
328
351
/*
329
352
* This function repeatedly tests DMA transfers of various lengths and
330
353
* offsets for a given operation type until it is told to exit by
@@ -360,6 +383,9 @@ static int dmatest_func(void *data)
360
383
int src_cnt ;
361
384
int dst_cnt ;
362
385
int i ;
386
+ ktime_t ktime ;
387
+ s64 runtime = 0 ;
388
+ unsigned long long total_len = 0 ;
363
389
364
390
set_freezable ();
365
391
@@ -417,6 +443,7 @@ static int dmatest_func(void *data)
417
443
*/
418
444
flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT ;
419
445
446
+ ktime = ktime_get ();
420
447
while (!kthread_should_stop ()
421
448
&& !(params -> iterations && total_tests >= params -> iterations )) {
422
449
struct dma_async_tx_descriptor * tx = NULL ;
@@ -464,6 +491,7 @@ static int dmatest_func(void *data)
464
491
len = (len >> align ) << align ;
465
492
if (!len )
466
493
len = 1 << align ;
494
+ total_len += len ;
467
495
468
496
for (i = 0 ; i < src_cnt ; i ++ ) {
469
497
u8 * buf = thread -> srcs [i ] + src_off ;
@@ -607,6 +635,7 @@ static int dmatest_func(void *data)
607
635
len , 0 );
608
636
}
609
637
}
638
+ runtime = ktime_us_delta (ktime_get (), ktime );
610
639
611
640
ret = 0 ;
612
641
for (i = 0 ; thread -> dsts [i ]; i ++ )
@@ -621,8 +650,10 @@ static int dmatest_func(void *data)
621
650
err_srcs :
622
651
kfree (pq_coefs );
623
652
err_thread_type :
624
- pr_info ("%s: terminating after %u tests, %u failures (status %d)\n" ,
625
- current -> comm , total_tests , failed_tests , ret );
653
+ pr_info ("%s: summary %u tests, %u failures %llu iops %llu KB/s (%d)\n" ,
654
+ current -> comm , total_tests , failed_tests ,
655
+ dmatest_persec (runtime , total_tests ),
656
+ dmatest_KBs (runtime , total_len ), ret );
626
657
627
658
/* terminate all transfers on specified channels */
628
659
if (ret )
0 commit comments