diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2013-03-04 11:09:28 +0200 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2013-04-15 09:51:17 +0530 |
commit | 838cc704ce5c8ab2a6d64d1324e37e040fcae3d8 (patch) | |
tree | 0bf417659f9fb40c574cda87c2d1000494acaee4 /drivers/dma/dmatest.c | |
parent | e03e93a976d0f0da63f02fd3384c4b99cac8d715 (diff) | |
download | linux-838cc704ce5c8ab2a6d64d1324e37e040fcae3d8.tar.bz2 |
dmatest: move dmatest_channels and nr_channels to dmatest_info
We don't need to have them global and later we would like to protect access to
them as well.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma/dmatest.c')
-rw-r--r-- | drivers/dma/dmatest.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c index 7f9e3cc9361b..475a21ad6657 100644 --- a/drivers/dma/dmatest.c +++ b/drivers/dma/dmatest.c @@ -109,6 +109,7 @@ struct dmatest_chan { * @timeout: transfer timeout in msec, -1 for infinite timeout */ struct dmatest_info { + /* Test parameters */ unsigned int buf_size; char channel[20]; char device[20]; @@ -118,17 +119,14 @@ struct dmatest_info { unsigned int xor_sources; unsigned int pq_sources; int timeout; + + /* Internal state */ + struct list_head channels; + unsigned int nr_channels; }; static struct dmatest_info test_info; -/* - * These are protected by dma_list_mutex since they're only used by - * the DMA filter function callback - */ -static LIST_HEAD(dmatest_channels); -static unsigned int nr_channels; - static bool dmatest_match_channel(struct dmatest_info *info, struct dma_chan *chan) { @@ -690,8 +688,8 @@ static int dmatest_add_channel(struct dmatest_info *info, pr_info("dmatest: Started %u threads using %s\n", thread_count, dma_chan_name(chan)); - list_add_tail(&dtc->node, &dmatest_channels); - nr_channels++; + list_add_tail(&dtc->node, &info->channels); + info->nr_channels++; return 0; } @@ -725,7 +723,8 @@ static int run_threaded_test(struct dmatest_info *info) } } else break; /* no more channels available */ - if (info->max_channels && nr_channels >= info->max_channels) + if (info->max_channels && + info->nr_channels >= info->max_channels) break; /* we have all we need */ } return err; @@ -736,14 +735,15 @@ static void stop_threaded_test(struct dmatest_info *info) struct dmatest_chan *dtc, *_dtc; struct dma_chan *chan; - list_for_each_entry_safe(dtc, _dtc, &dmatest_channels, node) { + list_for_each_entry_safe(dtc, _dtc, &info->channels, node) { list_del(&dtc->node); chan = dtc->chan; dmatest_cleanup_channel(dtc); - pr_debug("dmatest: dropped channel %s\n", - dma_chan_name(chan)); + pr_debug("dmatest: dropped channel %s\n", dma_chan_name(chan)); dma_release_channel(chan); } + + info->nr_channels = 0; } static int __init dmatest_init(void) @@ -752,6 +752,9 @@ static int __init dmatest_init(void) memset(info, 0, sizeof(*info)); + INIT_LIST_HEAD(&info->channels); + + /* Set default parameters */ info->buf_size = test_buf_size; strlcpy(info->channel, test_channel, sizeof(info->channel)); strlcpy(info->device, test_device, sizeof(info->device)); |