note: simplify the shced_note header file

This is to simplify the header file. It uses too many macros, and many of them are unnecessary.

Signed-off-by: yinshengkai <yinshengkai@xiaomi.com>
This commit is contained in:
yinshengkai 2023-10-10 22:45:01 +08:00 committed by Xiang Xiao
parent 99eeaafd07
commit 8ddaa3460d

View File

@ -47,8 +47,6 @@
#endif
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
@ -64,100 +62,94 @@
/* Note filter mode flag definitions */
#define NOTE_FILTER_MODE_FLAG_ENABLE (1 << 0) /* Enable instrumentation */
#ifdef CONFIG_SCHED_INSTRUMENTATION_SWITCH
#define NOTE_FILTER_MODE_FLAG_SWITCH (1 << 1) /* Enable syscall instrumentation */
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_SYSCALL
#define NOTE_FILTER_MODE_FLAG_SYSCALL (1 << 2) /* Enable syscall instrumentation */
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
#define NOTE_FILTER_MODE_FLAG_IRQ (1 << 3) /* Enable IRQ instrumentaiton */
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_DUMP
#define NOTE_FILTER_MODE_FLAG_DUMP (1 << 4) /* Enable dump instrumentaiton */
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_SYSCALL
#define NOTE_FILTER_MODE_FLAG_SYSCALL_ARGS (1 << 5) /* Enable collecting syscall arguments */
#endif
/* Helper macros for syscall instrumentation filter */
#ifdef CONFIG_SCHED_INSTRUMENTATION_SYSCALL
#define NOTE_FILTER_SYSCALLMASK_SET(nr, s) \
((s)->syscall_mask[(nr) / 8] |= (1 << ((nr) % 8)))
#define NOTE_FILTER_SYSCALLMASK_CLR(nr, s) \
((s)->syscall_mask[(nr) / 8] &= ~(1 << ((nr) % 8)))
#define NOTE_FILTER_SYSCALLMASK_ISSET(nr, s) \
((s)->syscall_mask[(nr) / 8] & (1 << ((nr) % 8)))
#define NOTE_FILTER_SYSCALLMASK_ZERO(s) \
memset((s), 0, sizeof(struct note_filter_syscall_s))
# define NOTE_FILTER_SYSCALLMASK_SET(nr, s) \
((s)->syscall_mask[(nr) / 8] |= (1 << ((nr) % 8)))
# define NOTE_FILTER_SYSCALLMASK_CLR(nr, s) \
((s)->syscall_mask[(nr) / 8] &= ~(1 << ((nr) % 8)))
# define NOTE_FILTER_SYSCALLMASK_ISSET(nr, s) \
((s)->syscall_mask[(nr) / 8] & (1 << ((nr) % 8)))
# define NOTE_FILTER_SYSCALLMASK_ZERO(s) \
memset((s), 0, sizeof(struct note_filter_syscall_s))
#else
# define NOTE_FILTER_SYSCALLMASK_SET(nr, s)
# define NOTE_FILTER_SYSCALLMASK_CLR(nr, s)
# define NOTE_FILTER_SYSCALLMASK_ISSET(nr, s) (0)
# define NOTE_FILTER_SYSCALLMASK_ZERO(s)
#endif
/* Helper macros for IRQ instrumentation filter */
#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
#define NOTE_FILTER_IRQMASK_SET(nr, s) \
((s)->irq_mask[(nr) / 8] |= (1 << ((nr) % 8)))
#define NOTE_FILTER_IRQMASK_CLR(nr, s) \
((s)->irq_mask[(nr) / 8] &= ~(1 << ((nr) % 8)))
#define NOTE_FILTER_IRQMASK_ISSET(nr, s) \
((s)->irq_mask[(nr) / 8] & (1 << ((nr) % 8)))
#define NOTE_FILTER_IRQMASK_ZERO(s) \
memset((s), 0, sizeof(struct note_filter_irq_s))
# define NOTE_FILTER_IRQMASK_SET(nr, s) \
((s)->irq_mask[(nr) / 8] |= (1 << ((nr) % 8)))
# define NOTE_FILTER_IRQMASK_CLR(nr, s) \
((s)->irq_mask[(nr) / 8] &= ~(1 << ((nr) % 8)))
# define NOTE_FILTER_IRQMASK_ISSET(nr, s) \
((s)->irq_mask[(nr) / 8] & (1 << ((nr) % 8)))
# define NOTE_FILTER_IRQMASK_ZERO(s) \
memset((s), 0, sizeof(struct note_filter_irq_s))
#else
# define NOTE_FILTER_IRQMASK_SET(nr, s)
# define NOTE_FILTER_IRQMASK_CLR(nr, s)
# define NOTE_FILTER_IRQMASK_ISSET(nr, s) (0)
# define NOTE_FILTER_IRQMASK_ZERO(s)
#endif
/* Helper macros for dump instrumentation filter */
#ifdef CONFIG_SCHED_INSTRUMENTATION_DUMP
# define NOTE_FILTER_TAGMASK_SET(tag, s) \
((s)->tag_mask[(tag) / 8] |= (1 << ((tag) % 8)))
((s)->tag_mask[(tag) / 8] |= (1 << ((tag) % 8)))
# define NOTE_FILTER_TAGMASK_CLR(tag, s) \
((s)->tag_mask[(tag) / 8] &= ~(1 << ((tag) % 8)))
((s)->tag_mask[(tag) / 8] &= ~(1 << ((tag) % 8)))
# define NOTE_FILTER_TAGMASK_ISSET(tag, s) \
((s)->tag_mask[(tag) / 8] & (1 << ((tag) % 8)))
((s)->tag_mask[(tag) / 8] & (1 << ((tag) % 8)))
# define NOTE_FILTER_TAGMASK_ZERO(s) \
memset((s), 0, sizeof(struct note_filter_tag_s));
memset((s), 0, sizeof(struct note_filter_tag_s));
#else
# define NOTE_FILTER_TAGMASK_SET(tag, s)
# define NOTE_FILTER_TAGMASK_CLR(tag, s)
# define NOTE_FILTER_TAGMASK_ISSET(tag, s) (0)
# define NOTE_FILTER_TAGMASK_ZERO(s)
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_DUMP
# define SCHED_NOTE_IP \
({ __label__ __here; __here: (unsigned long)&&__here; })
# define sched_note_string(tag, buf) \
sched_note_string_ip(tag, SCHED_NOTE_IP, buf)
# define sched_note_dump(tag, event, buf, len) \
sched_note_dump_ip(tag, SCHED_NOTE_IP, event, buf, len)
# define sched_note_vprintf(tag, fmt, va) \
sched_note_vprintf_ip(tag, SCHED_NOTE_IP, fmt, va)
# define sched_note_vbprintf(tag, event, fmt, va) \
sched_note_vbprintf_ip(tag, SCHED_NOTE_IP, event, fmt, va)
# define sched_note_printf(tag, fmt, ...) \
sched_note_printf_ip(tag, SCHED_NOTE_IP, fmt, ##__VA_ARGS__)
# define sched_note_bprintf(tag, event, fmt, ...) \
sched_note_bprintf_ip(tag, SCHED_NOTE_IP, event, \
#define SCHED_NOTE_IP \
({ __label__ __here; __here: (unsigned long)&&__here; })
#define sched_note_string(tag, buf) \
sched_note_string_ip(tag, SCHED_NOTE_IP, buf)
#define sched_note_dump(tag, event, buf, len) \
sched_note_dump_ip(tag, SCHED_NOTE_IP, event, buf, len)
#define sched_note_vprintf(tag, fmt, va) \
sched_note_vprintf_ip(tag, SCHED_NOTE_IP, fmt, va)
#define sched_note_vbprintf(tag, event, fmt, va) \
sched_note_vbprintf_ip(tag, SCHED_NOTE_IP, event, fmt, va)
#define sched_note_printf(tag, fmt, ...) \
sched_note_printf_ip(tag, SCHED_NOTE_IP, fmt, ##__VA_ARGS__)
#define sched_note_bprintf(tag, event, fmt, ...) \
sched_note_bprintf_ip(tag, SCHED_NOTE_IP, event, \
fmt, ##__VA_ARGS__)
# define sched_note_beginex(tag, str) \
sched_note_printf_ip(tag, SCHED_NOTE_IP, "B|%d|%s", _SCHED_GETTID(), str)
# define sched_note_endex(tag, str) \
sched_note_printf_ip(tag, SCHED_NOTE_IP, "E|%d|%s", _SCHED_GETTID(), str)
# define sched_note_mark(tag, str) \
sched_note_printf_ip(tag, SCHED_NOTE_IP, "I|%d|%s", _SCHED_GETTID(), str)
# define sched_note_counter(tag, name, value) \
sched_note_printf_ip(tag, SCHED_NOTE_IP, "C|%d|%s|%" PRId32, \
_SCHED_GETTID(), name, value)
# define sched_note_begin(tag) \
sched_note_string_ip(tag, SCHED_NOTE_IP, "B")
# define sched_note_end(tag) \
sched_note_string_ip(tag, SCHED_NOTE_IP, "E")
#else
# define sched_note_string(tag, buf)
# define sched_note_dump(tag, event, buf, len)
# define sched_note_vprintf(tag, fmt, va)
# define sched_note_vbprintf(tag, event, fmt, va)
# define sched_note_printf(tag, fmt, ...)
# define sched_note_bprintf(tag, event, fmt, ...)
# define sched_note_begin(tag)
# define sched_note_end(tag)
#endif
#define sched_note_begin(tag) sched_note_string(tag, "B")
#define sched_note_end(tag) sched_note_string(tag, "E")
#define sched_note_beginex(tag, str) \
sched_note_printf(tag, "B|%d|%s", _SCHED_GETTID(), str)
#define sched_note_endex(tag, str) \
sched_note_printf(tag, "E|%d|%s", _SCHED_GETTID(), str)
#define sched_note_mark(tag, str) \
sched_note_printf(tag, "I|%d|%s", _SCHED_GETTID(), str)
#define sched_note_counter(tag, name, value) \
sched_note_printf(tag, "C|%d|%s|%" PRId32, \
_SCHED_GETTID(), name, value)
/****************************************************************************
* Public Types
@ -168,56 +160,29 @@
enum note_type_e
{
NOTE_START = 0,
NOTE_STOP = 1
#ifdef CONFIG_SCHED_INSTRUMENTATION_SWITCH
,
NOTE_STOP = 1,
NOTE_SUSPEND = 2,
NOTE_RESUME = 3
#endif
#ifdef CONFIG_SMP
,
NOTE_RESUME = 3,
NOTE_CPU_START = 4,
NOTE_CPU_STARTED = 5
#ifdef CONFIG_SCHED_INSTRUMENTATION_SWITCH
,
NOTE_CPU_STARTED = 5,
NOTE_CPU_PAUSE = 6,
NOTE_CPU_PAUSED = 7,
NOTE_CPU_RESUME = 8,
NOTE_CPU_RESUMED = 9
#endif
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_PREEMPTION
,
NOTE_CPU_RESUMED = 9,
NOTE_PREEMPT_LOCK = 10,
NOTE_PREEMPT_UNLOCK = 11
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_CSECTION
,
NOTE_PREEMPT_UNLOCK = 11,
NOTE_CSECTION_ENTER = 12,
NOTE_CSECTION_LEAVE = 13
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_SPINLOCKS
,
NOTE_CSECTION_LEAVE = 13,
NOTE_SPINLOCK_LOCK = 14,
NOTE_SPINLOCK_LOCKED = 15,
NOTE_SPINLOCK_UNLOCK = 16,
NOTE_SPINLOCK_ABORT = 17
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_SYSCALL
,
NOTE_SPINLOCK_ABORT = 17,
NOTE_SYSCALL_ENTER = 18,
NOTE_SYSCALL_LEAVE = 19
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
,
NOTE_SYSCALL_LEAVE = 19,
NOTE_IRQ_ENTER = 20,
NOTE_IRQ_LEAVE = 21
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_DUMP
,
NOTE_IRQ_LEAVE = 21,
NOTE_DUMP_STRING = 22,
NOTE_DUMP_BINARY = 23
#endif
NOTE_DUMP_BINARY = 23,
};
enum note_tag_e
@ -282,7 +247,6 @@ struct note_stop_s
struct note_common_s nsp_cmn; /* Common note parameters */
};
#ifdef CONFIG_SCHED_INSTRUMENTATION_SWITCH
/* This is the specific form of the NOTE_SUSPEND note */
struct note_suspend_s
@ -297,9 +261,6 @@ struct note_resume_s
{
struct note_common_s nre_cmn; /* Common note parameters */
};
#endif
#ifdef CONFIG_SMP
/* This is the specific form of the NOTE_CPU_START note */
@ -316,7 +277,6 @@ struct note_cpu_started_s
struct note_common_s ncs_cmn; /* Common note parameters */
};
#ifdef CONFIG_SCHED_INSTRUMENTATION_SWITCH
/* This is the specific form of the NOTE_CPU_PAUSE note */
struct note_cpu_pause_s
@ -346,10 +306,7 @@ struct note_cpu_resumed_s
{
struct note_common_s ncr_cmn; /* Common note parameters */
};
#endif
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_PREEMPTION
/* This is the specific form of the NOTE_PREEMPT_LOCK/UNLOCK note */
struct note_preempt_s
@ -357,9 +314,7 @@ struct note_preempt_s
struct note_common_s npr_cmn; /* Common note parameters */
uint8_t npr_count[2]; /* Count of nested locks */
};
#endif /* CONFIG_SCHED_INSTRUMENTATION_PREEMPTION */
#ifdef CONFIG_SCHED_INSTRUMENTATION_CSECTION
/* This is the specific form of the NOTE_CSECTION_ENTER/LEAVE note */
struct note_csection_s
@ -369,9 +324,7 @@ struct note_csection_s
uint8_t ncs_count[2]; /* Count of nested csections */
#endif
};
#endif /* CONFIG_SCHED_INSTRUMENTATION_CSECTION */
#ifdef CONFIG_SCHED_INSTRUMENTATION_SPINLOCKS
/* This is the specific form of the NOTE_SPINLOCK_LOCK/LOCKED/UNLOCK/ABORT
* note.
*/
@ -382,9 +335,7 @@ struct note_spinlock_s
uint8_t nsp_spinlock[sizeof(uintptr_t)]; /* Address of spinlock */
uint8_t nsp_value; /* Value of spinlock */
};
#endif /* CONFIG_SCHED_INSTRUMENTATION_SPINLOCKS */
#ifdef CONFIG_SCHED_INSTRUMENTATION_SYSCALL
/* This is the specific form of the NOTE_SYSCALL_ENTER/LEAVE notes */
#define MAX_SYSCALL_ARGS 6
@ -406,9 +357,7 @@ struct note_syscall_leave_s
uint8_t nsc_nr; /* System call number */
uint8_t nsc_result[sizeof(uintptr_t)]; /* Result of the system call */
};
#endif /* CONFIG_SCHED_INSTRUMENTATION_SYSCALL */
#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
/* This is the specific form of the NOTE_IRQ_ENTER/LEAVE notes */
struct note_irqhandler_s
@ -417,9 +366,7 @@ struct note_irqhandler_s
uintptr_t nih_handler; /* IRQ handler address */
uint8_t nih_irq; /* IRQ number */
};
#endif /* CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER */
#ifdef CONFIG_SCHED_INSTRUMENTATION_DUMP
struct note_string_s
{
struct note_common_s nst_cmn; /* Common note parameters */
@ -441,10 +388,6 @@ struct note_binary_s
#define SIZEOF_NOTE_BINARY(n) (sizeof(struct note_binary_s) + \
((n) - 1) * sizeof(uint8_t))
#endif /* CONFIG_SCHED_INSTRUMENTATION_DUMP */
#ifdef CONFIG_SCHED_INSTRUMENTATION_FILTER
/* This is the type of the argument passed to the NOTECTL_GETMODE and
* NOTECTL_SETMODE ioctls
*/
@ -472,21 +415,15 @@ struct note_filter_syscall_s
* NOTECTL_SETIRQFILTER ioctls
*/
#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
struct note_filter_irq_s
{
uint8_t irq_mask[(NR_IRQS + 7) / 8];
};
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_DUMP
struct note_filter_tag_s
{
uint8_t tag_mask[(NOTE_TAG_MAX + 7) / 8];
};
#endif
#endif /* CONFIG_SCHED_INSTRUMENTATION_FILTER */
/****************************************************************************
* Public Function Prototypes
@ -517,8 +454,13 @@ extern "C"
*
****************************************************************************/
#ifdef CONFIG_SCHED_INSTRUMENTATION
void sched_note_start(FAR struct tcb_s *tcb);
void sched_note_stop(FAR struct tcb_s *tcb);
#else
# define sched_note_start(t)
# define sched_note_stop(t)
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_SWITCH
void sched_note_suspend(FAR struct tcb_s *tcb);
@ -528,10 +470,15 @@ void sched_note_resume(FAR struct tcb_s *tcb);
# define sched_note_resume(t)
#endif
#ifdef CONFIG_SMP
#if defined(CONFIG_SMP) && defined(CONFIG_SCHED_INSTRUMENTATION)
void sched_note_cpu_start(FAR struct tcb_s *tcb, int cpu);
void sched_note_cpu_started(FAR struct tcb_s *tcb);
#ifdef CONFIG_SCHED_INSTRUMENTATION_SWITCH
#else
# define sched_note_cpu_start(t,c)
# define sched_note_cpu_started(t)
#endif
#if defined(CONFIG_SMP) && defined(CONFIG_SCHED_INSTRUMENTATION_SWITCH)
void sched_note_cpu_pause(FAR struct tcb_s *tcb, int cpu);
void sched_note_cpu_paused(FAR struct tcb_s *tcb);
void sched_note_cpu_resume(FAR struct tcb_s *tcb, int cpu);
@ -542,14 +489,6 @@ void sched_note_cpu_resumed(FAR struct tcb_s *tcb);
# define sched_note_cpu_resume(t,c)
# define sched_note_cpu_resumed(t)
#endif
#else
# define sched_note_cpu_pause(t,c)
# define sched_note_cpu_paused(t)
# define sched_note_cpu_resume(t,c)
# define sched_note_cpu_resumed(t)
# define sched_note_cpu_start(t,c)
# define sched_note_cpu_started(t)
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_PREEMPTION
void sched_note_premption(FAR struct tcb_s *tcb, bool locked);
@ -586,7 +525,6 @@ void sched_note_irqhandler(int irq, FAR void *handler, bool enter);
#endif
#ifdef CONFIG_SCHED_INSTRUMENTATION_DUMP
void sched_note_string_ip(uint32_t tag, uintptr_t ip, FAR const char *buf);
void sched_note_dump_ip(uint32_t tag, uintptr_t ip, uint8_t event,
FAR const void *buf, size_t len);
@ -699,41 +637,4 @@ void sched_note_filter_tag(FAR struct note_filter_tag_s *oldf,
#if defined(__cplusplus)
}
#endif
#else /* CONFIG_SCHED_INSTRUMENTATION */
# define sched_note_string(tag, buf)
# define sched_note_dump(tag, event, buf, len)
# define sched_note_vprintf(tag, fmt, va)
# define sched_note_vbprintf(tag, event, fmt, va)
# define sched_note_printf(tag, fmt, ...)
# define sched_note_bprintf(tag, event, fmt, ...)
# define sched_note_begin(tag)
# define sched_note_end(tag)
# define sched_note_start(t)
# define sched_note_stop(t)
# define sched_note_suspend(t)
# define sched_note_resume(t)
# define sched_note_cpu_start(t,c)
# define sched_note_cpu_started(t)
# define sched_note_cpu_pause(t,c)
# define sched_note_cpu_paused(t)
# define sched_note_cpu_resume(t,c)
# define sched_note_cpu_resumed(t)
# define sched_note_premption(t,l)
# define sched_note_csection(t,e)
# define sched_note_spinlock(t,s,i)
# define sched_note_syscall_enter(n,a,...)
# define sched_note_syscall_leave(n,r)
# define sched_note_irqhandler(i,h,e)
# define sched_note_string_ip(t,ip,b)
# define sched_note_dump_ip(t,ip,e,b,l)
# define sched_note_vprintf_ip(t,ip,f,v)
# define sched_note_vbprintf_ip(t,ip,e,f,v)
# define sched_note_printf_ip(t,ip,f,...)
# define sched_note_bprintf_ip(t,ip,e,f,...)
#endif /* CONFIG_SCHED_INSTRUMENTATION */
#endif /* __INCLUDE_NUTTX_SCHED_NOTE_H */