Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[cascardo/linux.git] / crypto / scatterwalk.c
index 8690324..ea5815c 100644 (file)
@@ -54,7 +54,11 @@ static void scatterwalk_pagedone(struct scatter_walk *walk, int out,
                struct page *page;
 
                page = sg_page(walk->sg) + ((walk->offset - 1) >> PAGE_SHIFT);
-               if (!PageSlab(page))
+               /* Test ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE first as
+                * PageSlab cannot be optimised away per se due to
+                * use of volatile pointer.
+                */
+               if (ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE && !PageSlab(page))
                        flush_dcache_page(page);
        }
 
@@ -158,6 +162,7 @@ struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2],
                src = sg_next(src);
        }
 
+       sg_init_table(dst, 2);
        sg_set_page(dst, sg_page(src), src->length - len, src->offset + len);
        scatterwalk_crypto_chain(dst, sg_next(src), 0, 2);