Commit 32e8bd64 authored by Harald Freudenberger's avatar Harald Freudenberger Committed by Heiko Carstens
Browse files

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: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarHarald Freudenberger <freude@linux.ibm.com>
Reviewed-by: default avatarHolger Dengler <dengler@linux.ibm.com>
Reviewed-by: default avatarJuergen Christ <jchrist@linux.ibm.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent 830999bd
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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;
	}
}