xref: /freebsd/sys/i386/include/stack.h (revision 7c567fcc56508aa31ae58779e8633e25e8077acd)
13c90d1eaSRobert Watson /*
24db79febSMark Johnston  * This file is in the public domain.
33c90d1eaSRobert Watson  */
44db79febSMark Johnston /* $FreeBSD$ */
53c90d1eaSRobert Watson 
62555f175SKonstantin Belousov #ifndef _MACHINE_STACK_H_
72555f175SKonstantin Belousov #define	_MACHINE_STACK_H_
82555f175SKonstantin Belousov 
94db79febSMark Johnston #include <x86/stack.h>
102555f175SKonstantin Belousov 
112555f175SKonstantin Belousov #ifdef _SYS_PROC_H_
122555f175SKonstantin Belousov 
132555f175SKonstantin Belousov /* Get the current kernel thread stack usage. */
142555f175SKonstantin Belousov #define GET_STACK_USAGE(total, used) do {				\
152555f175SKonstantin Belousov 	struct thread	*td = curthread;				\
162555f175SKonstantin Belousov 	(total) = (vm_offset_t)get_pcb_td(td) - td->td_kstack;		\
172555f175SKonstantin Belousov 	(used) = (vm_offset_t)get_pcb_td(td) - (vm_offset_t)&td;	\
182555f175SKonstantin Belousov } while (0)
192555f175SKonstantin Belousov 
202555f175SKonstantin Belousov static __inline bool
212555f175SKonstantin Belousov kstack_contains(struct thread *td, vm_offset_t va, size_t len)
222555f175SKonstantin Belousov {
232555f175SKonstantin Belousov 	return (va >= td->td_kstack && va + len >= va &&
24*7c567fccSKonstantin Belousov 	    va + len <= (vm_offset_t)get_pcb_td(td));
252555f175SKonstantin Belousov }
262555f175SKonstantin Belousov 
272555f175SKonstantin Belousov #endif	/* _SYS_PROC_H_ */
282555f175SKonstantin Belousov 
292555f175SKonstantin Belousov #endif
30