diff options
author | Ralph Wuerthner <rwuerthn@de.ibm.com> | 2007-10-12 16:11:30 +0200 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2007-10-12 16:13:05 +0200 |
commit | 2af48080e100d66db8f086af70a70713a953a83d (patch) | |
tree | 009106d5464aad4788db7e0ee7c18a602e3be1af /drivers/s390/crypto | |
parent | 39aa7cf612cc4e7f688c18f04c35afb51c57472e (diff) |
[S390] zcrypt: fix PCIXCC/CEX2C error recovery
Symptom: zcrypt fails by setting all PCIXCC/CEX2C cards offline for a
certain type of invalid keys.
Problem: zcrypt does not handle rc=12/rs=769 request responses correctly
Solution: modify convert_type86_ica() to handle these error codes correctly
Signed-off-by: Ralph Wuerthner <rwuerthn@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/crypto')
-rw-r--r-- | drivers/s390/crypto/zcrypt_pcixcc.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/s390/crypto/zcrypt_pcixcc.c b/drivers/s390/crypto/zcrypt_pcixcc.c index c28369260c2..70b9ddc8cf9 100644 --- a/drivers/s390/crypto/zcrypt_pcixcc.c +++ b/drivers/s390/crypto/zcrypt_pcixcc.c @@ -432,14 +432,17 @@ static int convert_type86_ica(struct zcrypt_device *zdev, } if (service_rc == 8 && service_rs == 770) { PDEBUG("Invalid key length on PCIXCC/CEX2C\n"); - zdev->min_mod_size = PCIXCC_MIN_MOD_SIZE_OLD; - return -EAGAIN; + return -EINVAL; } if (service_rc == 8 && service_rs == 783) { PDEBUG("Extended bitlengths not enabled on PCIXCC/CEX2C\n"); zdev->min_mod_size = PCIXCC_MIN_MOD_SIZE_OLD; return -EAGAIN; } + if (service_rc == 12 && service_rs == 769) { + PDEBUG("Invalid key on PCIXCC/CEX2C\n"); + return -EINVAL; + } PRINTK("Unknown service rc/rs (PCIXCC/CEX2C): %d/%d\n", service_rc, service_rs); zdev->online = 0; |