mtd: nand: don't walk past end of oobfree[]
[safe/jmp/linux-2.6] / drivers / crypto / talitos.c
index c3df3b1..a3918c1 100644 (file)
@@ -330,11 +330,9 @@ static void flush_channel(struct device *dev, int ch, int error, int reset_ch)
 
                /* descriptors with their done bits set don't get the error */
                rmb();
-               if ((request->desc->hdr & DESC_HDR_DONE) == DESC_HDR_DONE) {
+               if ((request->desc->hdr & DESC_HDR_DONE) == DESC_HDR_DONE)
                        status = 0;
-                       /* Ack each pkt completed on channel */
-                       out_be32(priv->reg + TALITOS_ICR, (1 << (ch * 2)));
-               } else
+               else
                        if (!error)
                                break;
                        else
@@ -575,17 +573,13 @@ static irqreturn_t talitos_interrupt(int irq, void *data)
 
        isr = in_be32(priv->reg + TALITOS_ISR);
        isr_lo = in_be32(priv->reg + TALITOS_ISR_LO);
+       /* Acknowledge interrupt */
+       out_be32(priv->reg + TALITOS_ICR, isr);
+       out_be32(priv->reg + TALITOS_ICR_LO, isr_lo);
 
-       if (unlikely((isr & ~TALITOS_ISR_CHDONE) || isr_lo)) {
-               /*
-                * Acknowledge error interrupts here.
-                * Done interrupts are ack'ed as part of done_task.
-                */
-               out_be32(priv->reg + TALITOS_ICR, isr);
-               out_be32(priv->reg + TALITOS_ICR_LO, isr_lo);
-
+       if (unlikely((isr & ~TALITOS_ISR_CHDONE) || isr_lo))
                talitos_error((unsigned long)data, isr, isr_lo);
-       else
+       else
                if (likely(isr & TALITOS_ISR_CHDONE)) {
                        /* mask further done interrupts. */
                        clrbits32(priv->reg + TALITOS_IMR, TALITOS_IMR_DONE);