Quoting Alexander Boyko <alexander_boyko@xxxxxxxxxxx>:
From: Alexander Boyko <alexander_boyko@xxxxxxxxxxx>
This patch adds crc32 algorithms to shash crypto api. One is wrapper
to generic crc32_le function. Second is crc32 pclmulqdq
implementation. It use hardware provided PCLMULQDQ instruction to
accelerate the CRC32
disposal. This instruction present from Intel Westmere and AMD
Bulldozer CPUs.
kernel 3.5rc7
Signed-off-by: Alexander Boyko <alexander_boyko@xxxxxxxxxxx>
<snip>
+static u32 __attribute__((pure))
+ crc32_pclmul_le(u32 crc, unsigned char const *p, size_t len)
+{
+ unsigned int iquotient;
+ unsigned int iremainder;
+ unsigned int prealign;
+
+ if (len < PCLMUL_MIN_LEN + SCALE_F_MASK)
+ return crc32_le(crc, p, len);
+
+ if ((long)p & SCALE_F_MASK) {
+ /* align p to 16 byte */
+ prealign = SCALE_F - ((long)p & SCALE_F_MASK);
+
+ crc = crc32_le(crc, p, prealign);
+ len -= prealign;
+ p = (unsigned char *)(((unsigned long)p + SCALE_F_MASK) &
+ ~SCALE_F_MASK);
+ }
+ iquotient = len & (~SCALE_F_MASK);
+ iremainder = len & SCALE_F_MASK;
+
+ kernel_fpu_begin();
+ crc = crc32_pclmul_le_16(p, iquotient, crc);
+ kernel_fpu_end();
You need to check if FPU is available to kernel with irq_fpu_usable()
before kernel_fpu_begin()/kernel_fpu_end() block.
-Jussi
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html