On Mon, Mar 04, 2013 at 11:09:30AM +0200, Andy Shevchenko wrote: > @@ -0,0 +1,48 @@ > + DMA Test Guide > + ============== > + > + Andy Shevchenko <andriy.shevche...@linux.intel.com> > + > +This small document introduces how to test DMA drivers using dmatest module. > + > + Part 1 - How to build the test module > + > +The menuconfig contains an option that could be found by following path: > + Device Drivers -> DMA Engine support -> DMA Test client > + > +In the configuration file the option called CONFIG_DMATEST. The dmatest could > +be built as module or inside kernel. Let's consider those cases. > + > + Part 2 - When dmatest is built as a module... > + > +After mounting debugfs and loading the module, the /sys/kernel/debug/dmatest > +folder with nodes will be created. They are the same as module parameters > with > +addition of the 'run' node that controls run and stop phases of the test. > + > +Note that in this case test will not run on load automatically. > + > +Example of usage: > + % echo dma0chan0 > /sys/kernel/debug/dmatest/channel > + % echo 2000 > /sys/kernel/debug/dmatest/timeout > + % echo 1 > /sys/kernel/debug/dmatest/iterations > + % echo 1 > /sys/kernel/debug/dmatest/run How do you terminate a test? Esp if you have started bunch of concurent tests and want to terminate one of them...
> > static struct dmatest_info test_info; > @@ -718,7 +729,7 @@ static bool filter(struct dma_chan *chan, void *param) > return true; > } > > -static int run_threaded_test(struct dmatest_info *info) > +static int __run_threaded_test(struct dmatest_info *info) > { > dma_cap_mask_t mask; > struct dma_chan *chan; > @@ -744,7 +755,19 @@ static int run_threaded_test(struct dmatest_info *info) > return err; > } > > -static void stop_threaded_test(struct dmatest_info *info) > +#ifndef MODULE > +static int run_threaded_test(struct dmatest_info *info) > +{ > + int ret; > + > + mutex_lock(&info->lock); > + ret = __run_threaded_test(info); > + mutex_unlock(&info->lock); > + return ret; > +} > +#endif > + > +static void __stop_threaded_test(struct dmatest_info *info) > { > struct dmatest_chan *dtc, *_dtc; > struct dma_chan *chan; > @@ -760,13 +783,234 @@ static void stop_threaded_test(struct dmatest_info > *info) > info->nr_channels = 0; > } > > +static void stop_threaded_test(struct dmatest_info *info) > +{ > + mutex_lock(&info->lock); > + __stop_threaded_test(info); > + mutex_unlock(&info->lock); > +} > + > +static int __restart_threaded_test(struct dmatest_info *info, bool run) > +{ > + struct dmatest_params *params = &info->params; > + int ret; > + > + /* Stop any running test first */ > + __stop_threaded_test(info); > + > + if (run == false) > + return 0; > + > + /* Copy test parameters */ > + memcpy(params, &info->dbgfs_params, sizeof(*params)); what if the params are not yet filled by user... for module case? -- ~Vinod -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/