[CRYPTO] sha512: Hardware acceleration for s390

Exploit the System z10 hardware acceleration for SHA512.

Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
diff --git a/arch/s390/crypto/sha_common.c b/arch/s390/crypto/sha_common.c
index 80b6f2b..9d6eb8c 100644
--- a/arch/s390/crypto/sha_common.c
+++ b/arch/s390/crypto/sha_common.c
@@ -59,12 +59,15 @@
 	struct s390_sha_ctx *ctx = crypto_tfm_ctx(tfm);
 	unsigned int bsize = crypto_tfm_alg_blocksize(tfm);
 	u64 bits;
-	unsigned int index, end;
+	unsigned int index, end, plen;
 	int ret;
 
+	/* SHA-512 uses 128 bit padding length */
+	plen = (bsize > SHA256_BLOCK_SIZE) ? 16 : 8;
+
 	/* must perform manual padding */
 	index = ctx->count & (bsize - 1);
-	end = (index < bsize - 8) ? bsize : (2 * bsize);
+	end = (index < bsize - plen) ? bsize : (2 * bsize);
 
 	/* start pad with 1 */
 	ctx->buf[index] = 0x80;
@@ -73,6 +76,10 @@
 	/* pad with zeros */
 	memset(ctx->buf + index, 0x00, end - index - 8);
 
+	/*
+	 * Append message length. Well, SHA-512 wants a 128 bit lenght value,
+	 * nevertheless we use u64, should be enough for now...
+	 */
 	bits = ctx->count * 8;
 	memcpy(ctx->buf + end - 8, &bits, sizeof(bits));