summaryrefslogtreecommitdiff
path: root/arch/s390/include
diff options
context:
space:
mode:
authorHarald Freudenberger <freude@linux.ibm.com>2024-05-14 10:09:32 +0200
committerHeiko Carstens <hca@linux.ibm.com>2024-05-16 10:17:11 +0200
commit32e8bd6423fc127d2b37bdcf804fd76af3bbec79 (patch)
tree9cfdcdc596144261aedfcae826a89faae58ca6f9 /arch/s390/include
parent830999bd7e72f4128b9dfa37090d9fa8120ce323 (diff)
s390/cpacf: Make use of invalid opcode produce a link error
Instead of calling BUG() at runtime introduce and use a prototype for a non-existing function to produce a link error during compile when a not supported opcode is used with the __cpacf_query() or __cpacf_check_opcode() inline functions. Suggested-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Harald Freudenberger <freude@linux.ibm.com> Reviewed-by: Holger Dengler <dengler@linux.ibm.com> Reviewed-by: Juergen Christ <jchrist@linux.ibm.com> Cc: stable@vger.kernel.org Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'arch/s390/include')
-rw-r--r--arch/s390/include/asm/cpacf.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/s390/include/asm/cpacf.h b/arch/s390/include/asm/cpacf.h
index 153dc4fcc40a..c786538e397c 100644
--- a/arch/s390/include/asm/cpacf.h
+++ b/arch/s390/include/asm/cpacf.h
@@ -166,6 +166,13 @@
typedef struct { unsigned char bytes[16]; } cpacf_mask_t;
+/*
+ * Prototype for a not existing function to produce a link
+ * error if __cpacf_query() or __cpacf_check_opcode() is used
+ * with an invalid compile time const opcode.
+ */
+void __cpacf_bad_opcode(void);
+
static __always_inline void __cpacf_query_rre(u32 opc, u8 r1, u8 r2,
cpacf_mask_t *mask)
{
@@ -237,7 +244,7 @@ static __always_inline void __cpacf_query(unsigned int opcode,
__cpacf_query_rre(CPACF_PRNO, 2, 4, mask);
break;
default:
- BUG();
+ __cpacf_bad_opcode();
}
}
@@ -262,7 +269,8 @@ static __always_inline int __cpacf_check_opcode(unsigned int opcode)
case CPACF_KMA:
return test_facility(146); /* check for MSA8 */
default:
- BUG();
+ __cpacf_bad_opcode();
+ return 0;
}
}