Hi Seraj, On 2018-08-31 16:41, Seraj Mohammed wrote: > Hello, > > On 31/08/18 12:17, Peter Ujfalusi wrote: >> Hi, >> >> On 2018-08-31 14:03, Seraj Alijan wrote: >>> Modify documentation to add multi channel testing support. >>> >>> Signed-off-by: Seraj Alijan <seraj.alijan@xxxxxxxxxxx> >>> --- >>> Documentation/driver-api/dmaengine/dmatest.rst | 27 ++++++++++++++++++++------ >>> 1 file changed, 21 insertions(+), 6 deletions(-) >>> >>> diff --git a/Documentation/driver-api/dmaengine/dmatest.rst b/Documentation/driver-api/dmaengine/dmatest.rst >>> index 7ce5e71..0a7e4c3 100644 >>> --- a/Documentation/driver-api/dmaengine/dmatest.rst >>> +++ b/Documentation/driver-api/dmaengine/dmatest.rst >>> @@ -26,28 +26,43 @@ Part 2 - When dmatest is built as a module >>> >>> Example of usage:: >>> >>> - % modprobe dmatest channel=dma0chan0 timeout=2000 iterations=1 run=1 >>> + % modprobe dmatest timeout=2000 iterations=1 channel=dma0chan0 run=1 >>> >>> ...or:: >>> >>> % modprobe dmatest >>> - % echo dma0chan0 > /sys/module/dmatest/parameters/channel >>> % echo 2000 > /sys/module/dmatest/parameters/timeout >>> % echo 1 > /sys/module/dmatest/parameters/iterations >>> + % echo dma0chan0 > /sys/module/dmatest/parameters/channel >>> % echo 1 > /sys/module/dmatest/parameters/run >>> >>> ...or on the kernel command line:: >>> >>> - dmatest.channel=dma0chan0 dmatest.timeout=2000 dmatest.iterations=1 dmatest.run=1 >>> + dmatest.timeout=2000 dmatest.iterations=1 dmatest.channel=dma0chan0 dmatest.run=1 >>> + >>> +Example of multi-channel test usage: >>> + % modprobe dmatest >>> + % echo 2000 > /sys/module/dmatest/parameters/timeout >>> + % echo 1 > /sys/module/dmatest/parameters/iterations >>> + % echo dma0chan0 > /sys/module/dmatest/parameters/channel >>> + % echo dma0chan1 > /sys/module/dmatest/parameters/channel >>> + % echo dma0chan2 > /sys/module/dmatest/parameters/channel >> >> Can I still use: >> echo "" > /sys/module/dmatest/parameters/channel >> >> to stop dmatest to run on the specific channel(s) or do I need to reboot >> the machine to do so? > > is this behavior documented somewhere? or did you discover this from your > experience with using the module? > The short answer to your question is no, with this change you cannot stop > a test by echoing an empty string to the channel parameter, you will either > have to run the test, or reboot the machine. > > Setting the channel parameter to an empty string will request all > channels up to "max_channels" parameter value. This is because with this > change, editing the channel parameter will invoke the process of allocating > a thread for the specified channel and storing that thread in a thread > list, after that, setting run to 1 will simply iterate through the thread > list and start all pending threads. > >> I normally test multi channel memcpy with: >> echo 8000000 > /sys/module/dmatest/parameters/test_buf_size >> echo 2000 > /sys/module/dmatest/parameters/timeout >> echo 20 > /sys/module/dmatest/parameters/iterations >> echo 20 > /sys/module/dmatest/parameters/max_channels >> echo 1 > /sys/module/dmatest/parameters/run >> >> So it will start running memtest on 20 channels. >> >> If I do a test on specific channel (different DMA controller) I set the >> channel run the test and then with "" I can revert back to normal >> torture test. > > Yes, but the problem is that you either run a test on all channels, or > a single channel. This change makes it possible to specify a list of > channels to test, for example we can now launch a test on channels 0,3,5,6 > by doing > > echo dma0chan0 > /sys/module/dmatest/parameters/channel > echo dma0chan3 > /sys/module/dmatest/parameters/channel > echo dma0chan5 > /sys/module/dmatest/parameters/channel > echo dma0chan6 > /sys/module/dmatest/parameters/channel > echo 1 > /sys/module/dmatest/parameters/run > > as far as I'm aware this functionality was not possible before. True and it is something which would be nice to have. I could construct single test run for channels on different DMA controller. That is pretty cool. However, if I got it right I need to reboot the machine if I want to change any of the parameters for a re-run. Let's say I want to run tests on 6 channel with 50K buffers, 100K 1M, 10M. I can not do this without rebooting, right? Would not be possible to: echo "dma0chan0 dma0chan3 dma0chan5 dma0chan6" > /sys/module/dmatest/parameters/channel and use the same logic already existing for max_channels to start off the tests on different channels? > You can still run your torture test with a simple modification: > > echo 8000000 > /sys/module/dmatest/parameters/test_buf_size > echo 2000 > /sys/module/dmatest/parameters/timeout > echo 20 > /sys/module/dmatest/parameters/iterations > echo 20 > /sys/module/dmatest/parameters/max_channels > echo "" > /sys/module/dmatest/parameters/channel << allocates 20 channels > echo 1 > /sys/module/dmatest/parameters/run Sure, but if I test something on a specific channels I need to reboot. Or if I want to change parameters for a next run... > >>> + % echo 1 > /sys/module/dmatest/parameters/run >>> >>> +Note: the channel parameter should always be the last parameter set prior to >>> +running the test (setting run=1), this is because upon setting the channel >>> +parameter, that specific channel is requested using the dmaengine and a thread >>> +is created with the existing parameters. This thread is set as pending >>> +and will be executed once run is set to 1. Any parameters set after the thread >>> +is created are not applied. >>> .. hint:: >>> available channel list could be extracted by running the following command:: >>> >>> % ls -1 /sys/class/dma/ >>> >>> -Once started a message like "dmatest: Started 1 threads using dma0chan0" is >>> -emitted. After that only test failure messages are reported until the test >>> -stops. >>> +Once started a message like " dmatest: Added 1 threads using dma0chan0" is >>> +emitted. A thread for that specific channel is created and is now pending, the >>> +pending thread is started once run is to 1. >>> >>> Note that running a new test will not stop any in progress test. >>> >>> >> >> - Péter >> >> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. >> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki >> > > - Seraj > - Péter Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki