xref: /freebsd/sys/amd64/include/stack.h (revision 71625ec9ad2a9bc8c09784fbd23b759830e0ee5f)
13c90d1eaSRobert Watson /*
24db79febSMark Johnston  * This file is in the public domain.
33c90d1eaSRobert Watson  */
43c90d1eaSRobert Watson 
5*2555f175SKonstantin Belousov #ifndef _MACHINE_STACK_H_
6*2555f175SKonstantin Belousov #define	_MACHINE_STACK_H_
7*2555f175SKonstantin Belousov 
84db79febSMark Johnston #include <x86/stack.h>
9*2555f175SKonstantin Belousov 
10*2555f175SKonstantin Belousov #ifdef _SYS_PROC_H_
11*2555f175SKonstantin Belousov 
12*2555f175SKonstantin Belousov /* Get the current kernel thread stack usage. */
13*2555f175SKonstantin Belousov #define GET_STACK_USAGE(total, used) do {				\
14*2555f175SKonstantin Belousov 	struct thread	*td = curthread;				\
15*2555f175SKonstantin Belousov 	(total) = td->td_kstack_pages * PAGE_SIZE;			\
16*2555f175SKonstantin Belousov 	(used) = (char *)td->td_kstack +				\
17*2555f175SKonstantin Belousov 	    td->td_kstack_pages * PAGE_SIZE -				\
18*2555f175SKonstantin Belousov 	    (char *)&td;						\
19*2555f175SKonstantin Belousov } while (0)
20*2555f175SKonstantin Belousov 
21*2555f175SKonstantin Belousov static __inline bool
kstack_contains(struct thread * td,vm_offset_t va,size_t len)22*2555f175SKonstantin Belousov kstack_contains(struct thread *td, vm_offset_t va, size_t len)
23*2555f175SKonstantin Belousov {
24*2555f175SKonstantin Belousov 	return (va >= td->td_kstack && va + len >= va &&
25*2555f175SKonstantin Belousov 	    va + len <= td->td_kstack + td->td_kstack_pages * PAGE_SIZE);
26*2555f175SKonstantin Belousov }
27*2555f175SKonstantin Belousov #endif	/* _SYS_PROC_H_ */
28*2555f175SKonstantin Belousov 
29*2555f175SKonstantin Belousov #endif
30