• Mathias Krause's avatar
    crypto: aesni - fix counter overflow handling in "by8" variant · 80dca473
    Mathias Krause authored
    The "by8" CTR AVX implementation fails to propperly handle counter
    overflows. That was the reason it got disabled in commit 7da4b29d
    ("crypto: aesni - disable "by8" AVX CTR optimization").
    
    Fix the overflow handling by incrementing the counter block as a double
    quad word, i.e. a 128 bit, and testing for overflows afterwards. We need
    to use VPTEST to do so as VPADD* does not set the flags itself and
    silently drops the carry bit.
    
    As this change adds branches to the hot path, minor performance
    regressions  might be a side effect. But, OTOH, we now have a conforming
    implementation -- the preferable goal.
    
    A tcrypt test on a SandyBridge system (i7-2620M) showed almost identical
    numbers for the old and this version with differences within the noise
    range. A dm-crypt test with the fixed version gave even slightly better
    results for this version. So the performance impact might not be as big
    as expected.
    Tested-by: default avatarRomain Francoise <romain@orebokech.com>
    Signed-off-by: default avatarMathias Krause <minipli@googlemail.com>
    Cc: Chandramouli Narayanan <mouli@linux.intel.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    80dca473
aes_ctrby8_avx-x86_64.S 11.9 KB