| /* SPDX-License-Identifier: GPL-2.0 */ | 
 | #ifndef _MCSAFE_TEST_H_ | 
 | #define _MCSAFE_TEST_H_ | 
 |  | 
 | #ifndef __ASSEMBLY__ | 
 | #ifdef CONFIG_MCSAFE_TEST | 
 | extern unsigned long mcsafe_test_src; | 
 | extern unsigned long mcsafe_test_dst; | 
 |  | 
 | static inline void mcsafe_inject_src(void *addr) | 
 | { | 
 | 	if (addr) | 
 | 		mcsafe_test_src = (unsigned long) addr; | 
 | 	else | 
 | 		mcsafe_test_src = ~0UL; | 
 | } | 
 |  | 
 | static inline void mcsafe_inject_dst(void *addr) | 
 | { | 
 | 	if (addr) | 
 | 		mcsafe_test_dst = (unsigned long) addr; | 
 | 	else | 
 | 		mcsafe_test_dst = ~0UL; | 
 | } | 
 | #else /* CONFIG_MCSAFE_TEST */ | 
 | static inline void mcsafe_inject_src(void *addr) | 
 | { | 
 | } | 
 |  | 
 | static inline void mcsafe_inject_dst(void *addr) | 
 | { | 
 | } | 
 | #endif /* CONFIG_MCSAFE_TEST */ | 
 |  | 
 | #else /* __ASSEMBLY__ */ | 
 | #include <asm/export.h> | 
 |  | 
 | #ifdef CONFIG_MCSAFE_TEST | 
 | .macro MCSAFE_TEST_CTL | 
 | 	.pushsection .data | 
 | 	.align 8 | 
 | 	.globl mcsafe_test_src | 
 | 	mcsafe_test_src: | 
 | 		.quad 0 | 
 | 	EXPORT_SYMBOL_GPL(mcsafe_test_src) | 
 | 	.globl mcsafe_test_dst | 
 | 	mcsafe_test_dst: | 
 | 		.quad 0 | 
 | 	EXPORT_SYMBOL_GPL(mcsafe_test_dst) | 
 | 	.popsection | 
 | .endm | 
 |  | 
 | .macro MCSAFE_TEST_SRC reg count target | 
 | 	leaq \count(\reg), %r9 | 
 | 	cmp mcsafe_test_src, %r9 | 
 | 	ja \target | 
 | .endm | 
 |  | 
 | .macro MCSAFE_TEST_DST reg count target | 
 | 	leaq \count(\reg), %r9 | 
 | 	cmp mcsafe_test_dst, %r9 | 
 | 	ja \target | 
 | .endm | 
 | #else | 
 | .macro MCSAFE_TEST_CTL | 
 | .endm | 
 |  | 
 | .macro MCSAFE_TEST_SRC reg count target | 
 | .endm | 
 |  | 
 | .macro MCSAFE_TEST_DST reg count target | 
 | .endm | 
 | #endif /* CONFIG_MCSAFE_TEST */ | 
 | #endif /* __ASSEMBLY__ */ | 
 | #endif /* _MCSAFE_TEST_H_ */ |