s390/zcrypt: get rid of variable length arrays
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Thu, 15 Dec 2016 11:15:17 +0000 (12:15 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 16 Jan 2017 06:27:51 +0000 (07:27 +0100)
The variable length arrays used to specify clobbered memory within
ap_nqap and ap_dqap would only work if the length would be known at
compile time.
This is not the case for both usages. Therefore simply use a full
memory clobber and get rid of the old construct.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/crypto/ap_asm.h

index 7a630047c372a3051a35d3db83af617e0a0075db..287b4ad0999e412c5ef618a52dd681064bbebc5e 100644 (file)
@@ -129,7 +129,6 @@ static inline struct ap_queue_status ap_nqap(ap_qid_t qid,
                                             unsigned long long psmid,
                                             void *msg, size_t length)
 {
-       struct msgblock { char _[length]; };
        register unsigned long reg0 asm ("0") = qid | 0x40000000UL;
        register struct ap_queue_status reg1 asm ("1");
        register unsigned long reg2 asm ("2") = (unsigned long) msg;
@@ -141,8 +140,8 @@ static inline struct ap_queue_status ap_nqap(ap_qid_t qid,
                "0: .long 0xb2ad0042\n"         /* NQAP */
                "   brc   2,0b"
                : "+d" (reg0), "=d" (reg1), "+d" (reg2), "+d" (reg3)
-               : "d" (reg4), "d" (reg5), "m" (*(struct msgblock *) msg)
-               : "cc");
+               : "d" (reg4), "d" (reg5)
+               : "cc", "memory");
        return reg1;
 }
 
@@ -168,7 +167,6 @@ static inline struct ap_queue_status ap_dqap(ap_qid_t qid,
                                             unsigned long long *psmid,
                                             void *msg, size_t length)
 {
-       struct msgblock { char _[length]; };
        register unsigned long reg0 asm("0") = qid | 0x80000000UL;
        register struct ap_queue_status reg1 asm ("1");
        register unsigned long reg2 asm("2") = 0UL;
@@ -182,8 +180,8 @@ static inline struct ap_queue_status ap_dqap(ap_qid_t qid,
                "0: .long 0xb2ae0064\n"         /* DQAP */
                "   brc   6,0b\n"
                : "+d" (reg0), "=d" (reg1), "+d" (reg2),
-               "+d" (reg4), "+d" (reg5), "+d" (reg6), "+d" (reg7),
-               "=m" (*(struct msgblock *) msg) : : "cc");
+                 "+d" (reg4), "+d" (reg5), "+d" (reg6), "+d" (reg7)
+               : : "cc", "memory");
        *psmid = (((unsigned long long) reg6) << 32) + reg7;
        return reg1;
 }