Hi Laura,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v4.16 next-20180409]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Laura-Abbott/dmaengine-dmatest-Remove-use-of-VLAs/20180410-094633
config: i386-randconfig-x076-201814 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All warnings (new ones prefixed by >>):

   Cyclomatic Complexity 1 include/linux/kasan-checks.h:kasan_check_write
   Cyclomatic Complexity 2 arch/x86/include/asm/bitops.h:set_bit
   Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:constant_test_bit
   Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:variable_test_bit
   Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:fls
   Cyclomatic Complexity 1 include/linux/log2.h:__ilog2_u32
   Cyclomatic Complexity 3 include/linux/log2.h:is_power_of_2
   Cyclomatic Complexity 1 include/linux/list.h:INIT_LIST_HEAD
   Cyclomatic Complexity 1 include/linux/list.h:__list_add_valid
   Cyclomatic Complexity 1 include/linux/list.h:__list_del_entry_valid
   Cyclomatic Complexity 2 include/linux/list.h:__list_add
   Cyclomatic Complexity 1 include/linux/list.h:list_add_tail
   Cyclomatic Complexity 1 include/linux/list.h:__list_del
   Cyclomatic Complexity 2 include/linux/list.h:__list_del_entry
   Cyclomatic Complexity 1 include/linux/list.h:list_del
   Cyclomatic Complexity 1 include/linux/err.h:IS_ERR
   Cyclomatic Complexity 1 arch/x86/include/asm/current.h:get_current
   Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:arch_atomic_read
   Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:arch_atomic_inc
   Cyclomatic Complexity 1 
arch/x86/include/asm/atomic.h:arch_atomic_dec_and_test
   Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic_read
   Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic_inc
   Cyclomatic Complexity 1 
include/asm-generic/atomic-instrumented.h:atomic_dec_and_test
   Cyclomatic Complexity 1 include/asm-generic/getorder.h:__get_order
   Cyclomatic Complexity 3 include/linux/bitmap.h:bitmap_zero
   Cyclomatic Complexity 1 include/linux/jiffies.h:_msecs_to_jiffies
   Cyclomatic Complexity 3 include/linux/jiffies.h:msecs_to_jiffies
   Cyclomatic Complexity 70 include/linux/ktime.h:ktime_divns
   Cyclomatic Complexity 1 include/linux/ktime.h:ktime_to_us
   Cyclomatic Complexity 1 include/linux/mmzone.h:pfn_to_section_nr
   Cyclomatic Complexity 2 include/linux/mmzone.h:__nr_to_section
   Cyclomatic Complexity 1 include/linux/mmzone.h:__section_mem_map_addr
   Cyclomatic Complexity 1 include/linux/mmzone.h:__pfn_to_section
   Cyclomatic Complexity 1 include/linux/kobject.h:kobject_name
   Cyclomatic Complexity 2 include/linux/device.h:dev_name
   Cyclomatic Complexity 1 include/linux/dma-debug.h:debug_dma_map_page
   Cyclomatic Complexity 1 include/linux/dma-debug.h:debug_dma_mapping_error
   Cyclomatic Complexity 1 include/linux/dma-mapping.h:valid_dma_direction
   Cyclomatic Complexity 1 arch/x86/include/asm/dma-mapping.h:get_arch_dma_ops
   Cyclomatic Complexity 4 include/linux/dma-mapping.h:get_dma_ops
   Cyclomatic Complexity 1 include/linux/dma-mapping.h:dma_map_page_attrs
   Cyclomatic Complexity 2 include/linux/dma-mapping.h:dma_mapping_error
   Cyclomatic Complexity 1 include/linux/dmaengine.h:dma_submit_error
   Cyclomatic Complexity 1 include/linux/dmaengine.h:dma_chan_name
   Cyclomatic Complexity 2 include/linux/dmaengine.h:dmaengine_terminate_all
   Cyclomatic Complexity 1 include/linux/dmaengine.h:dmaf_continue
   Cyclomatic Complexity 1 include/linux/dmaengine.h:dmaf_p_disabled_continue
   Cyclomatic Complexity 1 include/linux/dmaengine.h:dma_dev_has_pq_continue
   Cyclomatic Complexity 1 include/linux/dmaengine.h:dma_dev_to_maxpq
   Cyclomatic Complexity 4 include/linux/dmaengine.h:dma_maxpq
   Cyclomatic Complexity 1 include/linux/dmaengine.h:__dma_cap_set
   Cyclomatic Complexity 1 include/linux/dmaengine.h:__dma_cap_zero
   Cyclomatic Complexity 2 include/linux/dmaengine.h:__dma_has_cap
   Cyclomatic Complexity 1 include/linux/dmaengine.h:dma_async_issue_pending
   Cyclomatic Complexity 3 include/linux/dmaengine.h:dma_async_is_tx_complete
   Cyclomatic Complexity 2 include/linux/freezer.h:freezing
   Cyclomatic Complexity 2 include/linux/freezer.h:try_to_freeze_unsafe
   Cyclomatic Complexity 2 include/linux/freezer.h:try_to_freeze
   Cyclomatic Complexity 1 include/linux/kasan.h:kasan_kmalloc
   Cyclomatic Complexity 28 include/linux/slab.h:kmalloc_index
   Cyclomatic Complexity 1 include/linux/slab.h:kmem_cache_alloc_trace
   Cyclomatic Complexity 1 include/linux/slab.h:kmalloc_order_trace
   Cyclomatic Complexity 67 include/linux/slab.h:kmalloc_large
   Cyclomatic Complexity 5 include/linux/slab.h:kmalloc
   Cyclomatic Complexity 5 include/linux/slab.h:kmalloc_array
   Cyclomatic Complexity 1 include/linux/slab.h:kcalloc
   Cyclomatic Complexity 1 include/linux/slab.h:kzalloc
   Cyclomatic Complexity 2 include/linux/sched/task.h:put_task_struct
   Cyclomatic Complexity 2 drivers/dma/dmatest.c:gen_inv_idx
   Cyclomatic Complexity 1 drivers/dma/dmatest.c:gen_src_value
   Cyclomatic Complexity 1 drivers/dma/dmatest.c:gen_dst_value
   Cyclomatic Complexity 5 drivers/dma/dmatest.c:dmatest_init_srcs
   Cyclomatic Complexity 5 drivers/dma/dmatest.c:dmatest_init_dsts
   Cyclomatic Complexity 2 drivers/dma/dmatest.c:min_odd
   Cyclomatic Complexity 8 drivers/dma/dmatest.c:is_threaded_test_run
   Cyclomatic Complexity 5 drivers/dma/dmatest.c:dmatest_mismatch
   Cyclomatic Complexity 6 drivers/dma/dmatest.c:dmatest_verify
   Cyclomatic Complexity 1 drivers/dma/dmatest.c:result
   Cyclomatic Complexity 1 drivers/dma/dmatest.c:dbg_result
   Cyclomatic Complexity 5 drivers/dma/dmatest.c:dmatest_cleanup_channel
   Cyclomatic Complexity 5 drivers/dma/dmatest.c:stop_threaded_test
   Cyclomatic Complexity 2 drivers/dma/dmatest.c:dmatest_run_get
   Cyclomatic Complexity 1 drivers/dma/dmatest.c:dmatest_exit
   Cyclomatic Complexity 2 drivers/dma/dmatest.c:dmatest_match_channel
   Cyclomatic Complexity 2 drivers/dma/dmatest.c:dmatest_match_device
   Cyclomatic Complexity 3 drivers/dma/dmatest.c:filter
   Cyclomatic Complexity 69 drivers/dma/dmatest.c:dmatest_persec
   Cyclomatic Complexity 1 drivers/dma/dmatest.c:dmatest_KBs
   Cyclomatic Complexity 8 drivers/dma/dmatest.c:dmatest_add_threads
   Cyclomatic Complexity 8 drivers/dma/dmatest.c:dmatest_add_channel
   Cyclomatic Complexity 5 drivers/dma/dmatest.c:request_channels
   Cyclomatic Complexity 1 drivers/dma/dmatest.c:run_threaded_test
   Cyclomatic Complexity 2 drivers/dma/dmatest.c:restart_threaded_test
   Cyclomatic Complexity 4 drivers/dma/dmatest.c:dmatest_run_set
   Cyclomatic Complexity 4 drivers/dma/dmatest.c:dmatest_callback
   Cyclomatic Complexity 1 drivers/dma/dmatest.c:dmatest_random
   Cyclomatic Complexity 52 drivers/dma/dmatest.c:dmatest_func
   Cyclomatic Complexity 4 drivers/dma/dmatest.c:dmatest_wait_get
   Cyclomatic Complexity 6 drivers/dma/dmatest.c:dmatest_init
   drivers/dma/dmatest.c: In function 'dmatest_func':
>> drivers/dma/dmatest.c:806:1: warning: the frame size of 4264 bytes is larger 
>> than 2048 bytes [-Wframe-larger-than=]
    }
    ^

vim +806 drivers/dma/dmatest.c

95019c8c5 Andy Shevchenko           2013-03-04  425  
4a776f0aa Haavard Skinnemoen        2008-07-08  426  /*
4a776f0aa Haavard Skinnemoen        2008-07-08  427   * This function 
repeatedly tests DMA transfers of various lengths and
b54d5cb91 Dan Williams              2009-03-25  428   * offsets for a given 
operation type until it is told to exit by
b54d5cb91 Dan Williams              2009-03-25  429   * kthread_stop(). There 
may be multiple threads running this function
b54d5cb91 Dan Williams              2009-03-25  430   * in parallel for a 
single channel, and there may be multiple channels
b54d5cb91 Dan Williams              2009-03-25  431   * being tested in 
parallel.
4a776f0aa Haavard Skinnemoen        2008-07-08  432   *
4a776f0aa Haavard Skinnemoen        2008-07-08  433   * Before each test, the 
source and destination buffer is initialized
4a776f0aa Haavard Skinnemoen        2008-07-08  434   * with a known pattern. 
This pattern is different depending on
4a776f0aa Haavard Skinnemoen        2008-07-08  435   * whether it's in an area 
which is supposed to be copied or
4a776f0aa Haavard Skinnemoen        2008-07-08  436   * overwritten, and 
different in the source and destination buffers.
4a776f0aa Haavard Skinnemoen        2008-07-08  437   * So if the DMA engine 
doesn't copy exactly what we tell it to copy,
4a776f0aa Haavard Skinnemoen        2008-07-08  438   * we'll notice.
4a776f0aa Haavard Skinnemoen        2008-07-08  439   */
4a776f0aa Haavard Skinnemoen        2008-07-08  440  static int 
dmatest_func(void *data)
4a776f0aa Haavard Skinnemoen        2008-07-08  441  {
4a776f0aa Haavard Skinnemoen        2008-07-08  442     struct dmatest_thread   
*thread = data;
6f6a23a21 Adam Wallis               2017-11-27  443     struct dmatest_done     
*done = &thread->test_done;
e03e93a97 Andy Shevchenko           2013-03-04  444     struct dmatest_info     
*info;
15b8a8ea1 Andy Shevchenko           2013-03-04  445     struct dmatest_params   
*params;
4a776f0aa Haavard Skinnemoen        2008-07-08  446     struct dma_chan         
*chan;
8be9e32b3 Akinobu Mita              2012-10-28  447     struct dma_device       
*dev;
4a776f0aa Haavard Skinnemoen        2008-07-08  448     unsigned int            
error_count;
4a776f0aa Haavard Skinnemoen        2008-07-08  449     unsigned int            
failed_tests = 0;
4a776f0aa Haavard Skinnemoen        2008-07-08  450     unsigned int            
total_tests = 0;
4a776f0aa Haavard Skinnemoen        2008-07-08  451     dma_cookie_t            
cookie;
4a776f0aa Haavard Skinnemoen        2008-07-08  452     enum dma_status         
status;
b54d5cb91 Dan Williams              2009-03-25  453     enum dma_ctrl_flags     
flags;
945b5af3c Andy Shevchenko           2013-03-04  454     u8                      
*pq_coefs = NULL;
4a776f0aa Haavard Skinnemoen        2008-07-08  455     int                     
ret;
b54d5cb91 Dan Williams              2009-03-25  456     int                     
src_cnt;
b54d5cb91 Dan Williams              2009-03-25  457     int                     
dst_cnt;
b54d5cb91 Dan Williams              2009-03-25  458     int                     
i;
e9405ef08 Sinan Kaya                2016-09-01  459     ktime_t                 
ktime, start, diff;
8b0e19531 Thomas Gleixner           2016-12-25  460     ktime_t                 
filltime = 0;
8b0e19531 Thomas Gleixner           2016-12-25  461     ktime_t                 
comparetime = 0;
86727443a Dan Williams              2013-11-06  462     s64                     
runtime = 0;
86727443a Dan Williams              2013-11-06  463     unsigned long long      
total_len = 0;
d64816086 Dave Jiang                2016-11-29  464     u8                      
align = 0;
61b5f54d8 Sinan Kaya                2017-06-29  465     bool                    
is_memset = false;
4a776f0aa Haavard Skinnemoen        2008-07-08  466  
adfa543e7 Tejun Heo                 2011-11-23  467     set_freezable();
4a776f0aa Haavard Skinnemoen        2008-07-08  468  
4a776f0aa Haavard Skinnemoen        2008-07-08  469     ret = -ENOMEM;
4a776f0aa Haavard Skinnemoen        2008-07-08  470  
4a776f0aa Haavard Skinnemoen        2008-07-08  471     smp_rmb();
e03e93a97 Andy Shevchenko           2013-03-04  472     info = thread->info;
15b8a8ea1 Andy Shevchenko           2013-03-04  473     params = &info->params;
4a776f0aa Haavard Skinnemoen        2008-07-08  474     chan = thread->chan;
8be9e32b3 Akinobu Mita              2012-10-28  475     dev = chan->device;
d64816086 Dave Jiang                2016-11-29  476     if (thread->type == 
DMA_MEMCPY) {
d64816086 Dave Jiang                2016-11-29  477             align = 
dev->copy_align;
b54d5cb91 Dan Williams              2009-03-25  478             src_cnt = 
dst_cnt = 1;
61b5f54d8 Sinan Kaya                2017-06-29  479     } else if (thread->type 
== DMA_MEMSET) {
61b5f54d8 Sinan Kaya                2017-06-29  480             align = 
dev->fill_align;
61b5f54d8 Sinan Kaya                2017-06-29  481             src_cnt = 
dst_cnt = 1;
61b5f54d8 Sinan Kaya                2017-06-29  482             is_memset = 
true;
d64816086 Dave Jiang                2016-11-29  483     } else if (thread->type 
== DMA_XOR) {
8be9e32b3 Akinobu Mita              2012-10-28  484             /* force odd to 
ensure dst = src */
15b8a8ea1 Andy Shevchenko           2013-03-04  485             src_cnt = 
min_odd(params->xor_sources | 1, dev->max_xor);
b54d5cb91 Dan Williams              2009-03-25  486             dst_cnt = 1;
d64816086 Dave Jiang                2016-11-29  487             align = 
dev->xor_align;
58691d64c Dan Williams              2009-08-29  488     } else if (thread->type 
== DMA_PQ) {
8be9e32b3 Akinobu Mita              2012-10-28  489             /* force odd to 
ensure dst = src */
15b8a8ea1 Andy Shevchenko           2013-03-04  490             src_cnt = 
min_odd(params->pq_sources | 1, dma_maxpq(dev, 0));
58691d64c Dan Williams              2009-08-29  491             dst_cnt = 2;
d64816086 Dave Jiang                2016-11-29  492             align = 
dev->pq_align;
945b5af3c Andy Shevchenko           2013-03-04  493  
15b8a8ea1 Andy Shevchenko           2013-03-04  494             pq_coefs = 
kmalloc(params->pq_sources + 1, GFP_KERNEL);
945b5af3c Andy Shevchenko           2013-03-04  495             if (!pq_coefs)
945b5af3c Andy Shevchenko           2013-03-04  496                     goto 
err_thread_type;
945b5af3c Andy Shevchenko           2013-03-04  497  
94de648d7 Anatolij Gustschin        2010-02-15  498             for (i = 0; i < 
src_cnt; i++)
58691d64c Dan Williams              2009-08-29  499                     
pq_coefs[i] = 1;
b54d5cb91 Dan Williams              2009-03-25  500     } else
945b5af3c Andy Shevchenko           2013-03-04  501             goto 
err_thread_type;
b54d5cb91 Dan Williams              2009-03-25  502  
b54d5cb91 Dan Williams              2009-03-25  503     thread->srcs = 
kcalloc(src_cnt + 1, sizeof(u8 *), GFP_KERNEL);
b54d5cb91 Dan Williams              2009-03-25  504     if (!thread->srcs)
b54d5cb91 Dan Williams              2009-03-25  505             goto err_srcs;
d64816086 Dave Jiang                2016-11-29  506  
d64816086 Dave Jiang                2016-11-29  507     thread->usrcs = 
kcalloc(src_cnt + 1, sizeof(u8 *), GFP_KERNEL);
d64816086 Dave Jiang                2016-11-29  508     if (!thread->usrcs)
d64816086 Dave Jiang                2016-11-29  509             goto err_usrcs;
d64816086 Dave Jiang                2016-11-29  510  
b54d5cb91 Dan Williams              2009-03-25  511     for (i = 0; i < 
src_cnt; i++) {
d64816086 Dave Jiang                2016-11-29  512             
thread->usrcs[i] = kmalloc(params->buf_size + align,
d64816086 Dave Jiang                2016-11-29  513                             
           GFP_KERNEL);
d64816086 Dave Jiang                2016-11-29  514             if 
(!thread->usrcs[i])
b54d5cb91 Dan Williams              2009-03-25  515                     goto 
err_srcbuf;
d64816086 Dave Jiang                2016-11-29  516  
d64816086 Dave Jiang                2016-11-29  517             /* align srcs 
to alignment restriction */
d64816086 Dave Jiang                2016-11-29  518             if (align)
d64816086 Dave Jiang                2016-11-29  519                     
thread->srcs[i] = PTR_ALIGN(thread->usrcs[i], align);
d64816086 Dave Jiang                2016-11-29  520             else
d64816086 Dave Jiang                2016-11-29  521                     
thread->srcs[i] = thread->usrcs[i];
b54d5cb91 Dan Williams              2009-03-25  522     }
b54d5cb91 Dan Williams              2009-03-25  523     thread->srcs[i] = NULL;
b54d5cb91 Dan Williams              2009-03-25  524  
b54d5cb91 Dan Williams              2009-03-25  525     thread->dsts = 
kcalloc(dst_cnt + 1, sizeof(u8 *), GFP_KERNEL);
b54d5cb91 Dan Williams              2009-03-25  526     if (!thread->dsts)
b54d5cb91 Dan Williams              2009-03-25  527             goto err_dsts;
d64816086 Dave Jiang                2016-11-29  528  
d64816086 Dave Jiang                2016-11-29  529     thread->udsts = 
kcalloc(dst_cnt + 1, sizeof(u8 *), GFP_KERNEL);
d64816086 Dave Jiang                2016-11-29  530     if (!thread->udsts)
d64816086 Dave Jiang                2016-11-29  531             goto err_udsts;
d64816086 Dave Jiang                2016-11-29  532  
b54d5cb91 Dan Williams              2009-03-25  533     for (i = 0; i < 
dst_cnt; i++) {
d64816086 Dave Jiang                2016-11-29  534             
thread->udsts[i] = kmalloc(params->buf_size + align,
d64816086 Dave Jiang                2016-11-29  535                             
           GFP_KERNEL);
d64816086 Dave Jiang                2016-11-29  536             if 
(!thread->udsts[i])
b54d5cb91 Dan Williams              2009-03-25  537                     goto 
err_dstbuf;
d64816086 Dave Jiang                2016-11-29  538  
d64816086 Dave Jiang                2016-11-29  539             /* align dsts 
to alignment restriction */
d64816086 Dave Jiang                2016-11-29  540             if (align)
d64816086 Dave Jiang                2016-11-29  541                     
thread->dsts[i] = PTR_ALIGN(thread->udsts[i], align);
d64816086 Dave Jiang                2016-11-29  542             else
d64816086 Dave Jiang                2016-11-29  543                     
thread->dsts[i] = thread->udsts[i];
b54d5cb91 Dan Williams              2009-03-25  544     }
b54d5cb91 Dan Williams              2009-03-25  545     thread->dsts[i] = NULL;
b54d5cb91 Dan Williams              2009-03-25  546  
e44e0aa3c Dan Williams              2009-03-25  547     set_user_nice(current, 
10);
e44e0aa3c Dan Williams              2009-03-25  548  
b203bd3f6 Ira Snyder                2011-03-03  549     /*
d1cab34c0 Bartlomiej Zolnierkiewicz 2013-10-18  550      * src and dst buffers 
are freed by ourselves below
b203bd3f6 Ira Snyder                2011-03-03  551      */
0776ae7b8 Bartlomiej Zolnierkiewicz 2013-10-18  552     flags = DMA_CTRL_ACK | 
DMA_PREP_INTERRUPT;
4a776f0aa Haavard Skinnemoen        2008-07-08  553  
86727443a Dan Williams              2013-11-06  554     ktime = ktime_get();
0a2ff57d6 Nicolas Ferre             2009-07-03  555     while 
(!kthread_should_stop()
15b8a8ea1 Andy Shevchenko           2013-03-04  556            && 
!(params->iterations && total_tests >= params->iterations)) {
b54d5cb91 Dan Williams              2009-03-25  557             struct 
dma_async_tx_descriptor *tx = NULL;
4076e755d Dan Williams              2013-11-06  558             struct 
dmaengine_unmap_data *um;
e9fe1e34b Laura Abbott              2018-04-09  559             /* total buffer 
count must fit into u8 */
e9fe1e34b Laura Abbott              2018-04-09  560             dma_addr_t 
srcs[255];
4076e755d Dan Williams              2013-11-06  561             dma_addr_t 
*dsts;
ede23a586 Andy Shevchenko           2014-10-22  562             unsigned int 
src_off, dst_off, len;
d86be86e9 Atsushi Nemoto            2009-01-13  563  
4a776f0aa Haavard Skinnemoen        2008-07-08  564             total_tests++;
4a776f0aa Haavard Skinnemoen        2008-07-08  565  
fbfb8e1dc Stefan Roese              2017-04-27  566             /* Check if 
buffer count fits into map count variable (u8) */
fbfb8e1dc Stefan Roese              2017-04-27  567             if ((src_cnt + 
dst_cnt) >= 255) {
fbfb8e1dc Stefan Roese              2017-04-27  568                     
pr_err("too many buffers (%d of 255 supported)\n",
fbfb8e1dc Stefan Roese              2017-04-27  569                            
src_cnt + dst_cnt);
fbfb8e1dc Stefan Roese              2017-04-27  570                     break;
fbfb8e1dc Stefan Roese              2017-04-27  571             }
fbfb8e1dc Stefan Roese              2017-04-27  572  
15b8a8ea1 Andy Shevchenko           2013-03-04  573             if (1 << align 
> params->buf_size) {
cfe4f2751 Guennadi Liakhovetski     2009-12-04  574                     
pr_err("%u-byte buffer too small for %d-byte alignment\n",
15b8a8ea1 Andy Shevchenko           2013-03-04  575                            
params->buf_size, 1 << align);
cfe4f2751 Guennadi Liakhovetski     2009-12-04  576                     break;
cfe4f2751 Guennadi Liakhovetski     2009-12-04  577             }
cfe4f2751 Guennadi Liakhovetski     2009-12-04  578  
ede23a586 Andy Shevchenko           2014-10-22  579             if 
(params->noverify)
e3b9c3473 Dan Williams              2013-11-06  580                     len = 
params->buf_size;
ede23a586 Andy Shevchenko           2014-10-22  581             else
15b8a8ea1 Andy Shevchenko           2013-03-04  582                     len = 
dmatest_random() % params->buf_size + 1;
ede23a586 Andy Shevchenko           2014-10-22  583  
83544ae9f Dan Williams              2009-09-08  584             len = (len >> 
align) << align;
cfe4f2751 Guennadi Liakhovetski     2009-12-04  585             if (!len)
cfe4f2751 Guennadi Liakhovetski     2009-12-04  586                     len = 1 
<< align;
ede23a586 Andy Shevchenko           2014-10-22  587  
ede23a586 Andy Shevchenko           2014-10-22  588             total_len += 
len;
ede23a586 Andy Shevchenko           2014-10-22  589  
ede23a586 Andy Shevchenko           2014-10-22  590             if 
(params->noverify) {
ede23a586 Andy Shevchenko           2014-10-22  591                     src_off 
= 0;
ede23a586 Andy Shevchenko           2014-10-22  592                     dst_off 
= 0;
ede23a586 Andy Shevchenko           2014-10-22  593             } else {
e9405ef08 Sinan Kaya                2016-09-01  594                     start = 
ktime_get();
15b8a8ea1 Andy Shevchenko           2013-03-04  595                     src_off 
= dmatest_random() % (params->buf_size - len + 1);
15b8a8ea1 Andy Shevchenko           2013-03-04  596                     dst_off 
= dmatest_random() % (params->buf_size - len + 1);
cfe4f2751 Guennadi Liakhovetski     2009-12-04  597  
83544ae9f Dan Williams              2009-09-08  598                     src_off 
= (src_off >> align) << align;
83544ae9f Dan Williams              2009-09-08  599                     dst_off 
= (dst_off >> align) << align;
83544ae9f Dan Williams              2009-09-08  600  
e3b9c3473 Dan Williams              2013-11-06  601                     
dmatest_init_srcs(thread->srcs, src_off, len,
61b5f54d8 Sinan Kaya                2017-06-29  602                             
          params->buf_size, is_memset);
e3b9c3473 Dan Williams              2013-11-06  603                     
dmatest_init_dsts(thread->dsts, dst_off, len,
61b5f54d8 Sinan Kaya                2017-06-29  604                             
          params->buf_size, is_memset);
e9405ef08 Sinan Kaya                2016-09-01  605  
e9405ef08 Sinan Kaya                2016-09-01  606                     diff = 
ktime_sub(ktime_get(), start);
e9405ef08 Sinan Kaya                2016-09-01  607                     
filltime = ktime_add(filltime, diff);
e3b9c3473 Dan Williams              2013-11-06  608             }
b54d5cb91 Dan Williams              2009-03-25  609  
4076e755d Dan Williams              2013-11-06  610             um = 
dmaengine_get_unmap_data(dev->dev, src_cnt + dst_cnt,
4076e755d Dan Williams              2013-11-06  611                             
              GFP_KERNEL);
4076e755d Dan Williams              2013-11-06  612             if (!um) {
4076e755d Dan Williams              2013-11-06  613                     
failed_tests++;
4076e755d Dan Williams              2013-11-06  614                     
result("unmap data NULL", total_tests,
4076e755d Dan Williams              2013-11-06  615                            
src_off, dst_off, len, ret);
4076e755d Dan Williams              2013-11-06  616                     
continue;
4076e755d Dan Williams              2013-11-06  617             }
4a776f0aa Haavard Skinnemoen        2008-07-08  618  
4076e755d Dan Williams              2013-11-06  619             um->len = 
params->buf_size;
4076e755d Dan Williams              2013-11-06  620             for (i = 0; i < 
src_cnt; i++) {
745c00daf Dan Williams              2013-12-09  621                     void 
*buf = thread->srcs[i];
4076e755d Dan Williams              2013-11-06  622                     struct 
page *pg = virt_to_page(buf);
f62e5f613 Geliang Tang              2017-04-22  623                     
unsigned long pg_off = offset_in_page(buf);
4076e755d Dan Williams              2013-11-06  624  
4076e755d Dan Williams              2013-11-06  625                     
um->addr[i] = dma_map_page(dev->dev, pg, pg_off,
4076e755d Dan Williams              2013-11-06  626                             
                   um->len, DMA_TO_DEVICE);
4076e755d Dan Williams              2013-11-06  627                     srcs[i] 
= um->addr[i] + src_off;
4076e755d Dan Williams              2013-11-06  628                     ret = 
dma_mapping_error(dev->dev, um->addr[i]);
afde3be12 Andy Shevchenko           2012-12-17  629                     if 
(ret) {
4076e755d Dan Williams              2013-11-06  630                             
dmaengine_unmap_put(um);
872f05c6e Dan Williams              2013-11-06  631                             
result("src mapping error", total_tests,
872f05c6e Dan Williams              2013-11-06  632                             
       src_off, dst_off, len, ret);
afde3be12 Andy Shevchenko           2012-12-17  633                             
failed_tests++;
afde3be12 Andy Shevchenko           2012-12-17  634                             
continue;
afde3be12 Andy Shevchenko           2012-12-17  635                     }
4076e755d Dan Williams              2013-11-06  636                     
um->to_cnt++;
b54d5cb91 Dan Williams              2009-03-25  637             }
d86be86e9 Atsushi Nemoto            2009-01-13  638             /* map with 
DMA_BIDIRECTIONAL to force writeback/invalidate */
4076e755d Dan Williams              2013-11-06  639             dsts = 
&um->addr[src_cnt];
b54d5cb91 Dan Williams              2009-03-25  640             for (i = 0; i < 
dst_cnt; i++) {
745c00daf Dan Williams              2013-12-09  641                     void 
*buf = thread->dsts[i];
4076e755d Dan Williams              2013-11-06  642                     struct 
page *pg = virt_to_page(buf);
f62e5f613 Geliang Tang              2017-04-22  643                     
unsigned long pg_off = offset_in_page(buf);
4076e755d Dan Williams              2013-11-06  644  
4076e755d Dan Williams              2013-11-06  645                     dsts[i] 
= dma_map_page(dev->dev, pg, pg_off, um->len,
b54d5cb91 Dan Williams              2009-03-25  646                             
               DMA_BIDIRECTIONAL);
4076e755d Dan Williams              2013-11-06  647                     ret = 
dma_mapping_error(dev->dev, dsts[i]);
afde3be12 Andy Shevchenko           2012-12-17  648                     if 
(ret) {
4076e755d Dan Williams              2013-11-06  649                             
dmaengine_unmap_put(um);
872f05c6e Dan Williams              2013-11-06  650                             
result("dst mapping error", total_tests,
872f05c6e Dan Williams              2013-11-06  651                             
       src_off, dst_off, len, ret);
afde3be12 Andy Shevchenko           2012-12-17  652                             
failed_tests++;
afde3be12 Andy Shevchenko           2012-12-17  653                             
continue;
afde3be12 Andy Shevchenko           2012-12-17  654                     }
4076e755d Dan Williams              2013-11-06  655                     
um->bidi_cnt++;
b54d5cb91 Dan Williams              2009-03-25  656             }
83544ae9f Dan Williams              2009-09-08  657  
b54d5cb91 Dan Williams              2009-03-25  658             if 
(thread->type == DMA_MEMCPY)
b54d5cb91 Dan Williams              2009-03-25  659                     tx = 
dev->device_prep_dma_memcpy(chan,
4076e755d Dan Williams              2013-11-06  660                             
                         dsts[0] + dst_off,
4076e755d Dan Williams              2013-11-06  661                             
                         srcs[0], len, flags);
61b5f54d8 Sinan Kaya                2017-06-29  662             else if 
(thread->type == DMA_MEMSET)
61b5f54d8 Sinan Kaya                2017-06-29  663                     tx = 
dev->device_prep_dma_memset(chan,
61b5f54d8 Sinan Kaya                2017-06-29  664                             
                dsts[0] + dst_off,
61b5f54d8 Sinan Kaya                2017-06-29  665                             
                *(thread->srcs[0] + src_off),
61b5f54d8 Sinan Kaya                2017-06-29  666                             
                len, flags);
b54d5cb91 Dan Williams              2009-03-25  667             else if 
(thread->type == DMA_XOR)
b54d5cb91 Dan Williams              2009-03-25  668                     tx = 
dev->device_prep_dma_xor(chan,
4076e755d Dan Williams              2013-11-06  669                             
                      dsts[0] + dst_off,
4076e755d Dan Williams              2013-11-06  670                             
                      srcs, src_cnt,
b54d5cb91 Dan Williams              2009-03-25  671                             
                      len, flags);
58691d64c Dan Williams              2009-08-29  672             else if 
(thread->type == DMA_PQ) {
e9fe1e34b Laura Abbott              2018-04-09  673                     /* 
dst_cnt can't be more than u8 */
e9fe1e34b Laura Abbott              2018-04-09  674                     
dma_addr_t dma_pq[255];
58691d64c Dan Williams              2009-08-29  675  
58691d64c Dan Williams              2009-08-29  676                     for (i 
= 0; i < dst_cnt; i++)
4076e755d Dan Williams              2013-11-06  677                             
dma_pq[i] = dsts[i] + dst_off;
4076e755d Dan Williams              2013-11-06  678                     tx = 
dev->device_prep_dma_pq(chan, dma_pq, srcs,
94de648d7 Anatolij Gustschin        2010-02-15  679                             
                     src_cnt, pq_coefs,
58691d64c Dan Williams              2009-08-29  680                             
                     len, flags);
58691d64c Dan Williams              2009-08-29  681             }
d86be86e9 Atsushi Nemoto            2009-01-13  682  
d86be86e9 Atsushi Nemoto            2009-01-13  683             if (!tx) {
4076e755d Dan Williams              2013-11-06  684                     
dmaengine_unmap_put(um);
872f05c6e Dan Williams              2013-11-06  685                     
result("prep error", total_tests, src_off,
872f05c6e Dan Williams              2013-11-06  686                            
dst_off, len, ret);
d86be86e9 Atsushi Nemoto            2009-01-13  687                     
msleep(100);
d86be86e9 Atsushi Nemoto            2009-01-13  688                     
failed_tests++;
d86be86e9 Atsushi Nemoto            2009-01-13  689                     
continue;
d86be86e9 Atsushi Nemoto            2009-01-13  690             }
e44e0aa3c Dan Williams              2009-03-25  691  
6f6a23a21 Adam Wallis               2017-11-27  692             done->done = 
false;
e44e0aa3c Dan Williams              2009-03-25  693             tx->callback = 
dmatest_callback;
6f6a23a21 Adam Wallis               2017-11-27  694             
tx->callback_param = done;
d86be86e9 Atsushi Nemoto            2009-01-13  695             cookie = 
tx->tx_submit(tx);
d86be86e9 Atsushi Nemoto            2009-01-13  696  
4a776f0aa Haavard Skinnemoen        2008-07-08  697             if 
(dma_submit_error(cookie)) {
4076e755d Dan Williams              2013-11-06  698                     
dmaengine_unmap_put(um);
872f05c6e Dan Williams              2013-11-06  699                     
result("submit error", total_tests, src_off,
872f05c6e Dan Williams              2013-11-06  700                            
dst_off, len, ret);
4a776f0aa Haavard Skinnemoen        2008-07-08  701                     
msleep(100);
4a776f0aa Haavard Skinnemoen        2008-07-08  702                     
failed_tests++;
4a776f0aa Haavard Skinnemoen        2008-07-08  703                     
continue;
4a776f0aa Haavard Skinnemoen        2008-07-08  704             }
b54d5cb91 Dan Williams              2009-03-25  705             
dma_async_issue_pending(chan);
4a776f0aa Haavard Skinnemoen        2008-07-08  706  
6f6a23a21 Adam Wallis               2017-11-27  707             
wait_event_freezable_timeout(thread->done_wait, done->done,
15b8a8ea1 Andy Shevchenko           2013-03-04  708                             
             msecs_to_jiffies(params->timeout));
981ed70d8 Guennadi Liakhovetski     2011-08-18  709  
e44e0aa3c Dan Williams              2009-03-25  710             status = 
dma_async_is_tx_complete(chan, cookie, NULL, NULL);
4a776f0aa Haavard Skinnemoen        2008-07-08  711  
6f6a23a21 Adam Wallis               2017-11-27  712             if 
(!done->done) {
4076e755d Dan Williams              2013-11-06  713                     
dmaengine_unmap_put(um);
872f05c6e Dan Williams              2013-11-06  714                     
result("test timed out", total_tests, src_off, dst_off,
95019c8c5 Andy Shevchenko           2013-03-04  715                            
len, 0);
4a776f0aa Haavard Skinnemoen        2008-07-08  716                     
failed_tests++;
4a776f0aa Haavard Skinnemoen        2008-07-08  717                     
continue;
19e9f99f2 Vinod Koul                2013-10-16  718             } else if 
(status != DMA_COMPLETE) {
4076e755d Dan Williams              2013-11-06  719                     
dmaengine_unmap_put(um);
872f05c6e Dan Williams              2013-11-06  720                     
result(status == DMA_ERROR ?
872f05c6e Dan Williams              2013-11-06  721                            
"completion error status" :
872f05c6e Dan Williams              2013-11-06  722                            
"completion busy status", total_tests, src_off,
872f05c6e Dan Williams              2013-11-06  723                            
dst_off, len, ret);
e44e0aa3c Dan Williams              2009-03-25  724                     
failed_tests++;
e44e0aa3c Dan Williams              2009-03-25  725                     
continue;
4a776f0aa Haavard Skinnemoen        2008-07-08  726             }
e44e0aa3c Dan Williams              2009-03-25  727  
4076e755d Dan Williams              2013-11-06  728             
dmaengine_unmap_put(um);
4a776f0aa Haavard Skinnemoen        2008-07-08  729  
e3b9c3473 Dan Williams              2013-11-06  730             if 
(params->noverify) {
50137a7df Dan Williams              2013-11-08  731                     
verbose_result("test passed", total_tests, src_off,
50137a7df Dan Williams              2013-11-08  732                             
       dst_off, len, 0);
e3b9c3473 Dan Williams              2013-11-06  733                     
continue;
e3b9c3473 Dan Williams              2013-11-06  734             }
4a776f0aa Haavard Skinnemoen        2008-07-08  735  
e9405ef08 Sinan Kaya                2016-09-01  736             start = 
ktime_get();
872f05c6e Dan Williams              2013-11-06  737             pr_debug("%s: 
verifying source buffer...\n", current->comm);
e3b9c3473 Dan Williams              2013-11-06  738             error_count = 
dmatest_verify(thread->srcs, 0, src_off,
61b5f54d8 Sinan Kaya                2017-06-29  739                             
0, PATTERN_SRC, true, is_memset);
7b6101782 Dan Williams              2013-11-06  740             error_count += 
dmatest_verify(thread->srcs, src_off,
7b6101782 Dan Williams              2013-11-06  741                             
src_off + len, src_off,
61b5f54d8 Sinan Kaya                2017-06-29  742                             
PATTERN_SRC | PATTERN_COPY, true, is_memset);
7b6101782 Dan Williams              2013-11-06  743             error_count += 
dmatest_verify(thread->srcs, src_off + len,
7b6101782 Dan Williams              2013-11-06  744                             
params->buf_size, src_off + len,
61b5f54d8 Sinan Kaya                2017-06-29  745                             
PATTERN_SRC, true, is_memset);
7b6101782 Dan Williams              2013-11-06  746  
872f05c6e Dan Williams              2013-11-06  747             pr_debug("%s: 
verifying dest buffer...\n", current->comm);
7b6101782 Dan Williams              2013-11-06  748             error_count += 
dmatest_verify(thread->dsts, 0, dst_off,
61b5f54d8 Sinan Kaya                2017-06-29  749                             
0, PATTERN_DST, false, is_memset);
61b5f54d8 Sinan Kaya                2017-06-29  750  
7b6101782 Dan Williams              2013-11-06  751             error_count += 
dmatest_verify(thread->dsts, dst_off,
7b6101782 Dan Williams              2013-11-06  752                             
dst_off + len, src_off,
61b5f54d8 Sinan Kaya                2017-06-29  753                             
PATTERN_SRC | PATTERN_COPY, false, is_memset);
61b5f54d8 Sinan Kaya                2017-06-29  754  
7b6101782 Dan Williams              2013-11-06  755             error_count += 
dmatest_verify(thread->dsts, dst_off + len,
7b6101782 Dan Williams              2013-11-06  756                             
params->buf_size, dst_off + len,
61b5f54d8 Sinan Kaya                2017-06-29  757                             
PATTERN_DST, false, is_memset);
4a776f0aa Haavard Skinnemoen        2008-07-08  758  
e9405ef08 Sinan Kaya                2016-09-01  759             diff = 
ktime_sub(ktime_get(), start);
e9405ef08 Sinan Kaya                2016-09-01  760             comparetime = 
ktime_add(comparetime, diff);
e9405ef08 Sinan Kaya                2016-09-01  761  
4a776f0aa Haavard Skinnemoen        2008-07-08  762             if 
(error_count) {
872f05c6e Dan Williams              2013-11-06  763                     
result("data error", total_tests, src_off, dst_off,
95019c8c5 Andy Shevchenko           2013-03-04  764                            
len, error_count);
4a776f0aa Haavard Skinnemoen        2008-07-08  765                     
failed_tests++;
4a776f0aa Haavard Skinnemoen        2008-07-08  766             } else {
50137a7df Dan Williams              2013-11-08  767                     
verbose_result("test passed", total_tests, src_off,
50137a7df Dan Williams              2013-11-08  768                             
       dst_off, len, 0);
4a776f0aa Haavard Skinnemoen        2008-07-08  769             }
4a776f0aa Haavard Skinnemoen        2008-07-08  770     }
e9405ef08 Sinan Kaya                2016-09-01  771     ktime = 
ktime_sub(ktime_get(), ktime);
e9405ef08 Sinan Kaya                2016-09-01  772     ktime = 
ktime_sub(ktime, comparetime);
e9405ef08 Sinan Kaya                2016-09-01  773     ktime = 
ktime_sub(ktime, filltime);
e9405ef08 Sinan Kaya                2016-09-01  774     runtime = 
ktime_to_us(ktime);
4a776f0aa Haavard Skinnemoen        2008-07-08  775  
4a776f0aa Haavard Skinnemoen        2008-07-08  776     ret = 0;
8e1f50d74 Andy Shevchenko           2014-08-22  777  err_dstbuf:
d64816086 Dave Jiang                2016-11-29  778     for (i = 0; 
thread->udsts[i]; i++)
d64816086 Dave Jiang                2016-11-29  779             
kfree(thread->udsts[i]);
d64816086 Dave Jiang                2016-11-29  780     kfree(thread->udsts);
d64816086 Dave Jiang                2016-11-29  781  err_udsts:
b54d5cb91 Dan Williams              2009-03-25  782     kfree(thread->dsts);
b54d5cb91 Dan Williams              2009-03-25  783  err_dsts:
8e1f50d74 Andy Shevchenko           2014-08-22  784  err_srcbuf:
d64816086 Dave Jiang                2016-11-29  785     for (i = 0; 
thread->usrcs[i]; i++)
d64816086 Dave Jiang                2016-11-29  786             
kfree(thread->usrcs[i]);
d64816086 Dave Jiang                2016-11-29  787     kfree(thread->usrcs);
d64816086 Dave Jiang                2016-11-29  788  err_usrcs:
b54d5cb91 Dan Williams              2009-03-25  789     kfree(thread->srcs);
b54d5cb91 Dan Williams              2009-03-25  790  err_srcs:
945b5af3c Andy Shevchenko           2013-03-04  791     kfree(pq_coefs);
945b5af3c Andy Shevchenko           2013-03-04  792  err_thread_type:
86727443a Dan Williams              2013-11-06  793     pr_info("%s: summary %u 
tests, %u failures %llu iops %llu KB/s (%d)\n",
86727443a Dan Williams              2013-11-06  794             current->comm, 
total_tests, failed_tests,
86727443a Dan Williams              2013-11-06  795             
dmatest_persec(runtime, total_tests),
86727443a Dan Williams              2013-11-06  796             
dmatest_KBs(runtime, total_len), ret);
0a2ff57d6 Nicolas Ferre             2009-07-03  797  
9704efaa5 Viresh Kumar              2011-07-29  798     /* terminate all 
transfers on specified channels */
6f6a23a21 Adam Wallis               2017-11-27  799     if (ret || failed_tests)
944ea4dd3 Jon Mason                 2012-11-11  800             
dmaengine_terminate_all(chan);
5e034f7b6 Shiraz Hashim             2012-11-09  801  
3e5ccd866 Andy Shevchenko           2013-03-04  802     thread->done = true;
2d88ce76e Dan Williams              2013-11-06  803     wake_up(&thread_wait);
0a2ff57d6 Nicolas Ferre             2009-07-03  804  
4a776f0aa Haavard Skinnemoen        2008-07-08  805     return ret;
4a776f0aa Haavard Skinnemoen        2008-07-08 @806  }
4a776f0aa Haavard Skinnemoen        2008-07-08  807  

:::::: The code at line 806 was first introduced by commit
:::::: 4a776f0aa922a552460192c07b56f4fe9cd82632 dmatest: Simple DMA memcpy test 
client

:::::: TO: Haavard Skinnemoen <hskinnem...@atmel.com>
:::::: CC: Dan Williams <dan.j.willi...@intel.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to