Skip to contentSkip to conversation

crypto: talitos - pass correct interrupt status to error handler

PATCH In review Lee Nipper 3 participants 5 messages Oct 6, 2008 – Oct 13, 2008 Crypto API

lore
Share & tools
lore

Lee Nipper

author
#0 lore raw

PATCH 1/3 crypto: talitos - pass correct interrupt status to error handler

From: Kim Phillips <[email protected]>

since we ack early, the re-read interrupt status in talitos_error may be already updated with a new value. Pass the error ISR value directly in order to report and handle the error based on the correct error status.

Also remove unused error tasklet.

---
In this series, patches 1 and 3 authored by Kim, patch 2 by Lee.

 drivers/crypto/talitos.c |   12 +++---------
 1 files changed, 3 insertions(+), 9 deletions(-)
drivers/crypto/talitos.c +3 -9
index 4c47fe5..b6705a3 100644
@@ -127,7 +127,6 @@ struct talitos_private {
 
 	/* request callback tasklet */
 	struct tasklet_struct done_task;
-	struct tasklet_struct error_task;
 
 	/* list of registered algorithms */
 	struct list_head alg_list;
@@ -469,16 +468,13 @@ static void report_eu_error(struct device *dev, int ch, struct talitos_desc *des
 /*
  * recover from error interrupts
  */
-static void talitos_error(unsigned long data)
+static void talitos_error(unsigned long data, u32 isr, u32 isr_lo)
 {
 	struct device *dev = (struct device *)data;
 	struct talitos_private *priv = dev_get_drvdata(dev);
 	unsigned int timeout = TALITOS_TIMEOUT;
 	int ch, error, reset_dev = 0, reset_ch = 0;
-	u32 isr, isr_lo, v, v_lo;
-
-	isr = in_be32(priv->reg + TALITOS_ISR);
-	isr_lo = in_be32(priv->reg + TALITOS_ISR_LO);
+	u32 v, v_lo;
 
 	for (ch = 0; ch < priv->num_channels; ch++) {
 		/* skip channels without errors */
@@ -566,7 +562,7 @@ static irqreturn_t talitos_interrupt(int irq, void *data)
 	out_be32(priv->reg + TALITOS_ICR_LO, isr_lo);
 
 	if (unlikely((isr & ~TALITOS_ISR_CHDONE) || isr_lo))
-		talitos_error((unsigned long)data);
+		talitos_error((unsigned long)data, isr, isr_lo);
 	else
 		if (likely(isr & TALITOS_ISR_CHDONE))
 			tasklet_schedule(&priv->done_task);
@@ -1391,7 +1387,6 @@ static int __devexit talitos_remove(struct of_device *ofdev)
 	}
 
 	tasklet_kill(&priv->done_task);
-	tasklet_kill(&priv->error_task);
 
 	iounmap(priv->reg);
 
@@ -1452,7 +1447,6 @@ static int talitos_probe(struct of_device *ofdev,
 	priv->ofdev = ofdev;
 
 	tasklet_init(&priv->done_task, talitos_done, (unsigned long)dev);
-	tasklet_init(&priv->error_task, talitos_error, (unsigned long)dev);
 
 	priv->irq = irq_of_parse_and_map(np, 0);
 
Signature · 1 line
1.5.6.2
#1 lore raw
Quoted 7 lines · On Mon, 06 Oct 2008 15:09:00 -0500 Lee Nipper <[email protected]> wrote:

From: Kim Phillips <[email protected]>

since we ack early, the re-read interrupt status in talitos_error may be already updated with a new value. Pass the error ISR value directly in order to report and handle the error based on the correct error status.

Quoted 5 lines

Also remove unused error tasklet.

---

Herbert, I noticed your crypto update pull request was missing this patch series (and the off-by-one fix from Suresh). I realize they were posted a bit late, but are they under consideration for 2.6.28?

Kim

maintainer
#2 lore raw
Quoted 4 lines · Kim Phillips

Herbert, I noticed your crypto update pull request was missing this patch series (and the off-by-one fix from Suresh). I realize they were posted a bit late, but are they under consideration for 2.6.28?

I'm going to run them through cryptodev-2.6 before pushing upstream if the schedule works out.

Cheers,

Signature · 4 lines
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
maintainer
#3 lore raw
In reply to Lee Nipper
Quoted 11 lines · Lee Nipper

From: Kim Phillips <[email protected]>

since we ack early, the re-read interrupt status in talitos_error may be already updated with a new value. Pass the error ISR value directly in order to report and handle the error based on the correct error status.

Also remove unused error tasklet.

I've applied all three patches. However, I had to fix up the bits around INIT_LIST_HEAD in 1 and 3. So please check the cryptodev-2.6 tree and let me know if it's wrong.

Thanks,

Signature · 4 lines
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
author
#4 lore raw
Quoted 4 lines · Herbert Xu

I've applied all three patches. However, I had to fix up the bits around INIT_LIST_HEAD in 1 and 3. So please check the cryptodev-2.6 tree and let me know if it's wrong.

I checked cryptodev-2.6 and it looks good. Thank you!

I thought I had double checked the 3 patches against mainline but obviously I had not. I must have gotten skewed a bit. I will be more careful.

Thanks for the fix up.

Lee