Bug in processing dependencies by async_tx_submit() ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 Hello Dan,

 I've run into a problem with the h/w accelerated RAID-5 driver (on the 
ppc440spe-based board). After some investigations I've come to conclusion 
that the issue is with the async_tx_submit() implementation in ASYNC_TX.

 Let's we have the following 3 dependent operations: OP1, OP2, OP3. The OP1 
operation has to be run on one, DMA0, channel, OP2 and OP3 operations have to 
be run on another, DMA1, channel. OP2 has to be run after completion of OP1, 
OP3 - after completion of OP2. I. e. :

 OP1 (DMA0) <--- OP2 (DMA1) <--- OP3 (DMA1).

 With the current implementation of async_tx_submit() we have the following 
picture when we sequentially call async_tx_submit() to submit these 3 
operations:

- the OP2 operation will *not be* submitted to the h/w channel, but, because 
of the (OP1->chan != OP2->chan) condition, will be put to depend_list of OP1; 
and it's RIGHT;

- the OP3 operation will *be* submitted to the h/w channel, because OP2 & OP3 
do not conform the (OP2->chan != OP3->chan) condition. Thus OP3 will be put 
to the h/w channel *before* its parent, OP2; and it's WRONG.

 It looks more logical for me to check in async_tx_submit() - does the dep_tx 
operation (on which the current tx operation is dependent on) depend on some 
other operation itself. If dep_tx depends on some other operation then, 
regardless of the channel on which tx has to be run, we should not put tx to 
the h/w but bind it to depend_list of dep_tx instead. Why there are no such 
algorithms in async_tx_submit() ?

 As far as the RAID-5 h/w accelerated driver is concerned this means that with 
the current implementation of async_tx_submit(), for example, the (PREXOR + 
BIODRAIN) combination works incorrectly for the cases when BIODRAIN is split 
into a sequence of MEMCPY operations and there are two different channels for 
XOR and COPY operations: only one, the first, MEMCPY will wait until 
completion of PREXOR, but all the others MEMCPYs of this BIODRAIN will be put 
into the h/w channel right away. Is it correct ? I think - not.

 Regards, Yuri

-- 
Yuri Tikhonov, Senior Software Engineer
Emcraft Systems, www.emcraft.com
-
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux