linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ASYNC_TX: fix the bug in async_tx_run_dependencies
@ 2008-09-03 21:43 Ilya Yanok
  2008-09-04 21:19 ` Andrew Morton
  2008-09-05 13:06 ` Wolfgang Denk
  0 siblings, 2 replies; 8+ messages in thread
From: Ilya Yanok @ 2008-09-03 21:43 UTC (permalink / raw)
  To: linux-raid; +Cc: linux-kernel, wd, Yuri Tikhonov

From: Yuri Tikhonov <yur@emcraft.com>

Should clear the next pointer of the TX if we are sure that the
next TX (say NXT) will be submitted to the channel too. Overwise,
we break the chain of descriptors, because we lose the information
about the next descriptor to run. So next time, when invoke
async_tx_run_dependencies() with TX, it's TX->next will be NULL, and
NXT will be never submitted.

Signed-off-by: Yuri Tikhonov <yur@emcraft.com>
---
 crypto/async_tx/async_tx.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/crypto/async_tx/async_tx.c b/crypto/async_tx/async_tx.c
index 85eaf7b..e8362c1 100644
--- a/crypto/async_tx/async_tx.c
+++ b/crypto/async_tx/async_tx.c
@@ -137,7 +137,8 @@ async_tx_run_dependencies(struct dma_async_tx_descriptor *tx)
 		spin_lock_bh(&next->lock);
 		next->parent = NULL;
 		_next = next->next;
-		next->next = NULL;
+		if (_next && _next->chan == chan)
+			next->next = NULL;
 		spin_unlock_bh(&next->lock);
 
 		next->tx_submit(next);
-- 
1.5.6.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] ASYNC_TX: fix the bug in async_tx_run_dependencies
  2008-09-03 21:43 [PATCH] ASYNC_TX: fix the bug in async_tx_run_dependencies Ilya Yanok
@ 2008-09-04 21:19 ` Andrew Morton
  2008-09-04 23:24   ` Dan Williams
  2008-09-05  9:15   ` Ilya Yanok
  2008-09-05 13:06 ` Wolfgang Denk
  1 sibling, 2 replies; 8+ messages in thread
From: Andrew Morton @ 2008-09-04 21:19 UTC (permalink / raw)
  To: Ilya Yanok; +Cc: linux-raid, linux-kernel, wd, yur, Dan Williams

On Thu,  4 Sep 2008 01:43:51 +0400
Ilya Yanok <yanok@emcraft.com> wrote:

> From: Yuri Tikhonov <yur@emcraft.com>
> 
> Should clear the next pointer of the TX if we are sure that the
> next TX (say NXT) will be submitted to the channel too. Overwise,
> we break the chain of descriptors, because we lose the information
> about the next descriptor to run. So next time, when invoke
> async_tx_run_dependencies() with TX, it's TX->next will be NULL, and
> NXT will be never submitted.
> 
> Signed-off-by: Yuri Tikhonov <yur@emcraft.com>

This patch should include your signed-off-by: as well.  Because you
were on the delivery path, as described in
Documentation/SubmittingPatches, section 12.  

> 
> diff --git a/crypto/async_tx/async_tx.c b/crypto/async_tx/async_tx.c
> index 85eaf7b..e8362c1 100644
> --- a/crypto/async_tx/async_tx.c
> +++ b/crypto/async_tx/async_tx.c
> @@ -137,7 +137,8 @@ async_tx_run_dependencies(struct dma_async_tx_descriptor *tx)
>  		spin_lock_bh(&next->lock);
>  		next->parent = NULL;
>  		_next = next->next;
> -		next->next = NULL;
> +		if (_next && _next->chan == chan)
> +			next->next = NULL;
>  		spin_unlock_bh(&next->lock);
>  
>  		next->tx_submit(next);

Dan, please review asap?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ASYNC_TX: fix the bug in async_tx_run_dependencies
  2008-09-04 21:19 ` Andrew Morton
@ 2008-09-04 23:24   ` Dan Williams
  2008-09-05  0:03     ` Dan Williams
  2008-09-05  9:15   ` Ilya Yanok
  1 sibling, 1 reply; 8+ messages in thread
From: Dan Williams @ 2008-09-04 23:24 UTC (permalink / raw)
  To: Ilya Yanok; +Cc: Andrew Morton, linux-raid, linux-kernel, wd, yur

On Thu, Sep 4, 2008 at 2:19 PM, Andrew Morton <akpm@linux-foundation.org> wrote:
> On Thu,  4 Sep 2008 01:43:51 +0400
> Ilya Yanok <yanok@emcraft.com> wrote:
>
>> From: Yuri Tikhonov <yur@emcraft.com>
>>
>> Should clear the next pointer of the TX if we are sure that the
>> next TX (say NXT) will be submitted to the channel too. Overwise,
>> we break the chain of descriptors, because we lose the information
>> about the next descriptor to run. So next time, when invoke
>> async_tx_run_dependencies() with TX, it's TX->next will be NULL, and
>> NXT will be never submitted.
>>
>> Signed-off-by: Yuri Tikhonov <yur@emcraft.com>
>
> This patch should include your signed-off-by: as well.  Because you
> were on the delivery path, as described in
> Documentation/SubmittingPatches, section 12.
>

Yes, Ilya once I have your signed-off-by I will push this to Linus and
-stable.  As far as impact for in-tree drivers: iop13xx by is immune,
iop3xx can hit this, and it looks like the orion5x implementation is
immune since copy and xor are available on the same channel.

--
Dan

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ASYNC_TX: fix the bug in async_tx_run_dependencies
  2008-09-04 23:24   ` Dan Williams
@ 2008-09-05  0:03     ` Dan Williams
  2008-09-05 10:17       ` Ilya Yanok
  0 siblings, 1 reply; 8+ messages in thread
From: Dan Williams @ 2008-09-05  0:03 UTC (permalink / raw)
  To: Ilya Yanok; +Cc: Andrew Morton, linux-raid, linux-kernel, wd, yur

On Thu, Sep 4, 2008 at 4:24 PM, Dan Williams <dan.j.williams@intel.com> wrote:
> On Thu, Sep 4, 2008 at 2:19 PM, Andrew Morton <akpm@linux-foundation.org> wrote:
>> On Thu,  4 Sep 2008 01:43:51 +0400
>> Ilya Yanok <yanok@emcraft.com> wrote:
>>
>>> From: Yuri Tikhonov <yur@emcraft.com>
>>>
>>> Should clear the next pointer of the TX if we are sure that the
>>> next TX (say NXT) will be submitted to the channel too. Overwise,
>>> we break the chain of descriptors, because we lose the information
>>> about the next descriptor to run. So next time, when invoke
>>> async_tx_run_dependencies() with TX, it's TX->next will be NULL, and
>>> NXT will be never submitted.
>>>
>>> Signed-off-by: Yuri Tikhonov <yur@emcraft.com>
>>
>> This patch should include your signed-off-by: as well.  Because you
>> were on the delivery path, as described in
>> Documentation/SubmittingPatches, section 12.
>>
>
> Yes, Ilya once I have your signed-off-by I will push this to Linus and
> -stable.  As far as impact for in-tree drivers: iop13xx by is immune,
> iop3xx can hit this, and it looks like the orion5x implementation is
> immune since copy and xor are available on the same channel.
>

Please also take a look at this cleanup patch that I will queue for
.28.  I think it makes things easier to read let me know if you
disagree.

---gmail mangled patch follows--->
async_tx: make async_tx_run_dependencies() easier to read

From: Dan Williams <dan.j.williams@intel.com>

* Rename 'next' to 'dep'
* Move the channel switch check inside the loop to simplify
  termination

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---

 crypto/async_tx/async_tx.c |   36 +++++++++++++++++-------------------
 1 files changed, 17 insertions(+), 19 deletions(-)


diff --git a/crypto/async_tx/async_tx.c b/crypto/async_tx/async_tx.c
index e8362c1..b833cca 100644
--- a/crypto/async_tx/async_tx.c
+++ b/crypto/async_tx/async_tx.c
@@ -115,34 +115,32 @@ EXPORT_SYMBOL_GPL(dma_wait_for_async_tx);
  *	(start) dependent operations on their target channel
  * @tx: transaction with dependencies
  */
-void
-async_tx_run_dependencies(struct dma_async_tx_descriptor *tx)
+void async_tx_run_dependencies(struct dma_async_tx_descriptor *tx)
 {
-	struct dma_async_tx_descriptor *next = tx->next;
+	struct dma_async_tx_descriptor *dep = tx->next;
+	struct dma_async_tx_descriptor *dep_next;
 	struct dma_chan *chan;

-	if (!next)
+	if (dep)
+		chan = dep->chan;
+	else
 		return;

-	tx->next = NULL;
-	chan = next->chan;
-
 	/* keep submitting up until a channel switch is detected
 	 * in that case we will be called again as a result of
 	 * processing the interrupt from async_tx_channel_switch
 	 */
-	while (next && next->chan == chan) {
-		struct dma_async_tx_descriptor *_next;
-
-		spin_lock_bh(&next->lock);
-		next->parent = NULL;
-		_next = next->next;
-		if (_next && _next->chan == chan)
-			next->next = NULL;
-		spin_unlock_bh(&next->lock);
-
-		next->tx_submit(next);
-		next = _next;
+	for (; dep; dep = dep_next) {
+		spin_lock_bh(&dep->lock);
+		dep->parent = NULL;
+		dep_next = dep->next;
+		if (dep_next && dep_next->chan == chan)
+			dep->next = NULL; /* ->next will be submitted */
+		else
+			dep_next = NULL; /* submit current dep and terminate */
+		spin_unlock_bh(&dep->lock);
+
+		dep->tx_submit(dep);
 	}

 	chan->device->device_issue_pending(chan);

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] ASYNC_TX: fix the bug in async_tx_run_dependencies
  2008-09-04 21:19 ` Andrew Morton
  2008-09-04 23:24   ` Dan Williams
@ 2008-09-05  9:15   ` Ilya Yanok
  1 sibling, 0 replies; 8+ messages in thread
From: Ilya Yanok @ 2008-09-05  9:15 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-raid, linux-kernel, wd, yur, Dan Williams

Andrew Morton wrote:
>> From: Yuri Tikhonov <yur@emcraft.com>
>>
>> Should clear the next pointer of the TX if we are sure that the
>> next TX (say NXT) will be submitted to the channel too. Overwise,
>> we break the chain of descriptors, because we lose the information
>> about the next descriptor to run. So next time, when invoke
>> async_tx_run_dependencies() with TX, it's TX->next will be NULL, and
>> NXT will be never submitted.
>>
>> Signed-off-by: Yuri Tikhonov <yur@emcraft.com>
>>     
Signed-off-by: Ilya Yanok <yanok@emcraft.com>

> This patch should include your signed-off-by: as well.  Because you
> were on the delivery path, as described in
> Documentation/SubmittingPatches, section 12.  
>   

Excuse me for being inattentive.

Regards, Ilya.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ASYNC_TX: fix the bug in async_tx_run_dependencies
  2008-09-05  0:03     ` Dan Williams
@ 2008-09-05 10:17       ` Ilya Yanok
  0 siblings, 0 replies; 8+ messages in thread
From: Ilya Yanok @ 2008-09-05 10:17 UTC (permalink / raw)
  To: Dan Williams; +Cc: Andrew Morton, linux-raid, linux-kernel, wd, yur

Hello,

Dan Williams wrote:
> Please also take a look at this cleanup patch that I will queue for
> .28.  I think it makes things easier to read let me know if you
> disagree.
>   

Look good for me. Hmm, actually I don't think that current version is so
hard to read...

Just one comment:

> -	if (!next)
> +	if (dep)
> +		chan = dep->chan;
> +	else
>  		return;
>   

I don't like 'return' inside 'else'.

Regards, Ilya.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ASYNC_TX: fix the bug in async_tx_run_dependencies
  2008-09-03 21:43 [PATCH] ASYNC_TX: fix the bug in async_tx_run_dependencies Ilya Yanok
  2008-09-04 21:19 ` Andrew Morton
@ 2008-09-05 13:06 ` Wolfgang Denk
  2008-09-05 13:16   ` Ilya Yanok
  1 sibling, 1 reply; 8+ messages in thread
From: Wolfgang Denk @ 2008-09-05 13:06 UTC (permalink / raw)
  To: Ilya Yanok; +Cc: linux-raid, linux-kernel, Yuri Tikhonov

Dear Ilya &Yrui,

In message <1220478231-8725-1-git-send-email-yanok@emcraft.com> you wrote:
> 
> Should clear the next pointer of the TX if we are sure that the
> next TX (say NXT) will be submitted to the channel too. Overwise,
> we break the chain of descriptors, because we lose the information
> about the next descriptor to run. So next time, when invoke
> async_tx_run_dependencies() with TX, it's TX->next will be NULL, and
> NXT will be never submitted.
> 
> Signed-off-by: Yuri Tikhonov <yur@emcraft.com>
> ---
>  crypto/async_tx/async_tx.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)

What about this patch? SHould it be applied to our repository?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
The use of Microsoft crippleware systems is a sin that  carries  with
it its own punishment.
         -- Tom Christiansen in <6bo3fr$pj8$5@csnews.cs.colorado.edu>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ASYNC_TX: fix the bug in async_tx_run_dependencies
  2008-09-05 13:06 ` Wolfgang Denk
@ 2008-09-05 13:16   ` Ilya Yanok
  0 siblings, 0 replies; 8+ messages in thread
From: Ilya Yanok @ 2008-09-05 13:16 UTC (permalink / raw)
  To: Wolfgang Denk; +Cc: linux-raid, linux-kernel, Yuri Tikhonov

Dear Wolfgang,

this patch is already applied (d2029eba in linux-2.6-denx repo) I just
sent it upstream.

Regards, Ilya.

Wolfgang Denk wrote:
>> Should clear the next pointer of the TX if we are sure that the
>> next TX (say NXT) will be submitted to the channel too. Overwise,
>> we break the chain of descriptors, because we lose the information
>> about the next descriptor to run. So next time, when invoke
>> async_tx_run_dependencies() with TX, it's TX->next will be NULL, and
>> NXT will be never submitted.
>>
>> Signed-off-by: Yuri Tikhonov <yur@emcraft.com>
>> ---
>>  crypto/async_tx/async_tx.c |    3 ++-
>>  1 files changed, 2 insertions(+), 1 deletions(-)
>>     
>
> What about this patch? SHould it be applied to our repository?
>
> Best regards,
>
> Wolfgang Denk
>
>   


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2008-09-05 13:16 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-03 21:43 [PATCH] ASYNC_TX: fix the bug in async_tx_run_dependencies Ilya Yanok
2008-09-04 21:19 ` Andrew Morton
2008-09-04 23:24   ` Dan Williams
2008-09-05  0:03     ` Dan Williams
2008-09-05 10:17       ` Ilya Yanok
2008-09-05  9:15   ` Ilya Yanok
2008-09-05 13:06 ` Wolfgang Denk
2008-09-05 13:16   ` Ilya Yanok

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).