49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| #ifndef _LINUX_KCOV_H
 | |
| #define _LINUX_KCOV_H
 | |
| 
 | |
| #include <uapi/linux/kcov.h>
 | |
| 
 | |
| struct task_struct;
 | |
| 
 | |
| #ifdef CONFIG_KCOV
 | |
| 
 | |
| enum kcov_mode {
 | |
| 	/* Coverage collection is not enabled yet. */
 | |
| 	KCOV_MODE_DISABLED = 0,
 | |
| 	/* KCOV was initialized, but tracing mode hasn't been chosen yet. */
 | |
| 	KCOV_MODE_INIT = 1,
 | |
| 	/*
 | |
| 	 * Tracing coverage collection mode.
 | |
| 	 * Covered PCs are collected in a per-task buffer.
 | |
| 	 */
 | |
| 	KCOV_MODE_TRACE_PC = 2,
 | |
| 	/* Collecting comparison operands mode. */
 | |
| 	KCOV_MODE_TRACE_CMP = 3,
 | |
| };
 | |
| 
 | |
| #define KCOV_IN_CTXSW	(1 << 30)
 | |
| 
 | |
| void kcov_task_init(struct task_struct *t);
 | |
| void kcov_task_exit(struct task_struct *t);
 | |
| 
 | |
| #define kcov_prepare_switch(t)			\
 | |
| do {						\
 | |
| 	(t)->kcov_mode |= KCOV_IN_CTXSW;	\
 | |
| } while (0)
 | |
| 
 | |
| #define kcov_finish_switch(t)			\
 | |
| do {						\
 | |
| 	(t)->kcov_mode &= ~KCOV_IN_CTXSW;	\
 | |
| } while (0)
 | |
| 
 | |
| #else
 | |
| 
 | |
| static inline void kcov_task_init(struct task_struct *t) {}
 | |
| static inline void kcov_task_exit(struct task_struct *t) {}
 | |
| static inline void kcov_prepare_switch(struct task_struct *t) {}
 | |
| static inline void kcov_finish_switch(struct task_struct *t) {}
 | |
| 
 | |
| #endif /* CONFIG_KCOV */
 | |
| #endif /* _LINUX_KCOV_H */
 | 
