aboutsummaryrefslogtreecommitdiff
path: root/crypto/s390xcpuid.S
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2016-04-15 16:39:22 +0200
committerAndy Polyakov <appro@openssl.org>2016-04-25 11:53:45 +0200
commit670ad0fbf6ebcf113e278d8174081a7e2d2fa44c (patch)
treeb113688a273d8dcc2e70148a4265c5fd8a6c381c /crypto/s390xcpuid.S
parent299ccadcdb99001c618d188fb243c1caaaa86a1c (diff)
downloadopenssl-670ad0fbf6ebcf113e278d8174081a7e2d2fa44c.zip
openssl-670ad0fbf6ebcf113e278d8174081a7e2d2fa44c.tar.gz
openssl-670ad0fbf6ebcf113e278d8174081a7e2d2fa44c.tar.bz2
s390x assembly pack: cache capability query results.
IBM argues that in certain scenarios capability query is really expensive. At the same time it's asserted that query results can be safely cached, because disabling CPACF is incompatible with reboot-free operation. Reviewed-by: Tim Hudson <tjh@openssl.org>
Diffstat (limited to 'crypto/s390xcpuid.S')
-rw-r--r--crypto/s390xcpuid.S44
1 files changed, 38 insertions, 6 deletions
diff --git a/crypto/s390xcpuid.S b/crypto/s390xcpuid.S
index 3402a24..3efad55 100644
--- a/crypto/s390xcpuid.S
+++ b/crypto/s390xcpuid.S
@@ -5,14 +5,46 @@
.align 16
OPENSSL_s390x_facilities:
lghi %r0,0
- larl %r2,OPENSSL_s390xcap_P
- stg %r0,8(%r2)
- .long 0xb2b02000 # stfle 0(%r2)
+ larl %r4,OPENSSL_s390xcap_P
+ stg %r0,8(%r4) # wipe capability vectors
+ stg %r0,16(%r4)
+ stg %r0,24(%r4)
+ stg %r0,32(%r4)
+ stg %r0,40(%r4)
+ stg %r0,48(%r4)
+ stg %r0,56(%r4)
+ stg %r0,64(%r4)
+ stg %r0,72(%r4)
+
+ .long 0xb2b04000 # stfle 0(%r4)
brc 8,.Ldone
lghi %r0,1
- .long 0xb2b02000 # stfle 0(%r2)
+ .long 0xb2b04000 # stfle 0(%r4)
.Ldone:
- lg %r2,0(%r2)
+ lmg %r2,%r3,0(%r4)
+ tmhl %r2,0x4000 # check for message-security-assist
+ jz .Lret
+
+ lghi %r0,0 # query kimd capabilities
+ la %r1,16(%r4)
+ .long 0xb93e0002 # kimd %r0,%r2
+
+ lghi %r0,0 # query km capability vector
+ la %r1,32(%r4)
+ .long 0xb92e0042 # km %r4,%r2
+
+ lghi %r0,0 # query kmc capability vector
+ la %r1,48(%r4)
+ .long 0xb92f0042 # kmc %r4,%r2
+
+ tmhh %r3,0x0004 # check for message-security-assist-4
+ jz .Lret
+
+ lghi %r0,0 # query kmctr capability vector
+ la %r1,64(%r4)
+ .long 0xb92d2042 # kmctr %r4,%r2,%r2
+
+.Lret:
br %r14
.size OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
@@ -112,4 +144,4 @@ OPENSSL_instrument_bus2:
.section .init
brasl %r14,OPENSSL_cpuid_setup
-.comm OPENSSL_s390xcap_P,16,8
+.comm OPENSSL_s390xcap_P,80,8