Add syscall and irqhandler hooks in sched_note.h
This commit is contained in:
parent
dde25b0f80
commit
df2bc1e4c3
@ -45,6 +45,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include <nuttx/sched.h>
|
#include <nuttx/sched.h>
|
||||||
|
|
||||||
@ -305,6 +306,20 @@ void sched_note_spinabort(FAR struct tcb_s *tcb, FAR volatile void *spinlock);
|
|||||||
# define sched_note_spinabort(t,s)
|
# define sched_note_spinabort(t,s)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SCHED_INSTRUMENTATION_SYSCALL
|
||||||
|
void sched_note_syscall_enter(int nr, int argc, ...);
|
||||||
|
void sched_note_syscall_leave(int nr, uintptr_t result);
|
||||||
|
#else
|
||||||
|
# define sched_note_syscall_enter(n,a...)
|
||||||
|
# define sched_note_syscall_leave(n,r)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
|
||||||
|
void sched_note_irqhandler(int irq, FAR void *handler, bool enter);
|
||||||
|
#else
|
||||||
|
# define sched_note_irqhandler(i,h,e)
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: sched_note_get
|
* Name: sched_note_get
|
||||||
*
|
*
|
||||||
@ -387,6 +402,9 @@ int note_register(void);
|
|||||||
# define sched_note_spinlocked(t,s)
|
# define sched_note_spinlocked(t,s)
|
||||||
# define sched_note_spinunlock(t,s)
|
# define sched_note_spinunlock(t,s)
|
||||||
# define sched_note_spinabort(t,s)
|
# define sched_note_spinabort(t,s)
|
||||||
|
# define sched_note_syscall_enter(n,a...)
|
||||||
|
# define sched_note_syscall_leave(n,r)
|
||||||
|
# define sched_note_irqhandler(i,h,e)
|
||||||
|
|
||||||
#endif /* CONFIG_SCHED_INSTRUMENTATION */
|
#endif /* CONFIG_SCHED_INSTRUMENTATION */
|
||||||
#endif /* __INCLUDE_NUTTX_SCHED_NOTE_H */
|
#endif /* __INCLUDE_NUTTX_SCHED_NOTE_H */
|
||||||
|
@ -972,6 +972,25 @@ config SCHED_INSTRUMENTATION_SPINLOCKS
|
|||||||
void sched_note_spinunlock(FAR struct tcb_s *tcb, bool state);
|
void sched_note_spinunlock(FAR struct tcb_s *tcb, bool state);
|
||||||
void sched_note_spinabort(FAR struct tcb_s *tcb, bool state);
|
void sched_note_spinabort(FAR struct tcb_s *tcb, bool state);
|
||||||
|
|
||||||
|
config SCHED_INSTRUMENTATION_SYSCALL
|
||||||
|
bool "System call monitor hooks"
|
||||||
|
default n
|
||||||
|
---help---
|
||||||
|
Enables additional hooks for entry and exit from system call.
|
||||||
|
Board-specific logic must provide this additional logic.
|
||||||
|
|
||||||
|
void sched_note_syscall_enter(int nr, int argc, ...);
|
||||||
|
void sched_note_syscall_leave(int nr, uintptr_t result);
|
||||||
|
|
||||||
|
config SCHED_INSTRUMENTATION_IRQHANDLER
|
||||||
|
bool "Interrupt handler monitor hooks"
|
||||||
|
default n
|
||||||
|
---help---
|
||||||
|
Enables additional hooks for interrupt handler. Board-specific logic
|
||||||
|
must provide this additional logic.
|
||||||
|
|
||||||
|
void sched_note_irqhandler(int irq, FAR void *handler, bool enter);
|
||||||
|
|
||||||
config SCHED_INSTRUMENTATION_BUFFER
|
config SCHED_INSTRUMENTATION_BUFFER
|
||||||
bool "Buffer instrumentation data in memory"
|
bool "Buffer instrumentation data in memory"
|
||||||
default n
|
default n
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
#include <nuttx/arch.h>
|
#include <nuttx/arch.h>
|
||||||
#include <nuttx/irq.h>
|
#include <nuttx/irq.h>
|
||||||
#include <nuttx/random.h>
|
#include <nuttx/random.h>
|
||||||
|
#include <nuttx/sched_note.h>
|
||||||
|
|
||||||
#include "irq/irq.h"
|
#include "irq/irq.h"
|
||||||
#include "clock/clock.h"
|
#include "clock/clock.h"
|
||||||
@ -171,11 +172,23 @@ void irq_dispatch(int irq, FAR void *context)
|
|||||||
add_irq_randomness(irq);
|
add_irq_randomness(irq);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
|
||||||
|
/* Notify that we are entering into the interrupt handler */
|
||||||
|
|
||||||
|
sched_note_irqhandler(irq, vector, true);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Then dispatch to the interrupt handler */
|
/* Then dispatch to the interrupt handler */
|
||||||
|
|
||||||
CALL_VECTOR(ndx, vector, irq, context, arg);
|
CALL_VECTOR(ndx, vector, irq, context, arg);
|
||||||
UNUSED(ndx);
|
UNUSED(ndx);
|
||||||
|
|
||||||
|
#ifdef CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER
|
||||||
|
/* Notify that we are leaving from the interrupt handler */
|
||||||
|
|
||||||
|
sched_note_irqhandler(irq, vector, false);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Record the new "running" task. g_running_tasks[] is only used by
|
/* Record the new "running" task. g_running_tasks[] is only used by
|
||||||
* assertion logic for reporting crashes.
|
* assertion logic for reporting crashes.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user