dmaengine: mv_xor: optimize performance by using a subset of the XOR channels
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Wed, 8 Jul 2015 14:28:19 +0000 (16:28 +0200)
committerVinod Koul <vinod.koul@intel.com>
Wed, 19 Aug 2015 17:02:14 +0000 (22:32 +0530)
commit777572911a732c0d3e6dbc514f9a1206606ffd0b
tree816a6957ab3eff8929166f4889879ed43538bba2
parent6d8f7abd235c1a38629cdada49cc53992f4ad42e
dmaengine: mv_xor: optimize performance by using a subset of the XOR channels

Due to how async_tx behaves internally, having more XOR channels than
CPUs is actually hurting performance more than it improves it, because
memcpy requests get scheduled on a different channel than the XOR
requests, but async_tx will still wait for the completion of the
memcpy requests before scheduling the XOR requests.

It is in fact more efficient to have at most one channel per CPU,
which this patch implements by limiting the number of channels per
engine, and the number of engines registered depending on the number
of availables CPUs.

Marvell platforms are currently available in one CPU, two CPUs and
four CPUs configurations:

 - in the configurations with one CPU, only one channel from one
   engine is used.

 - in the configurations with two CPUs, only one channel from each
   engine is used (they are two XOR engines)

 - in the configurations with four CPUs, both channels of both engines
   are used.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/mv_xor.c