xref: /xnu-11417.121.6/tests/memorystatus_assertion_helpers.h (revision a1e26a70f38d1d7daa7b49b258e2f8538ad81650)
1*a1e26a70SApple OSS Distributions #ifndef MEMORYSTATUS_ASSERTION_HELPERS_H
2*a1e26a70SApple OSS Distributions #define MEMORYSTATUS_ASSERTION_HELPERS_H
3*a1e26a70SApple OSS Distributions 
4*a1e26a70SApple OSS Distributions #include <stdlib.h>
5*a1e26a70SApple OSS Distributions #include <stdint.h>
6*a1e26a70SApple OSS Distributions 
7*a1e26a70SApple OSS Distributions #define ASSERTION_STATE_IS_SET          true
8*a1e26a70SApple OSS Distributions #define ASSERTION_STATE_IS_RELINQUISHED false
9*a1e26a70SApple OSS Distributions 
10*a1e26a70SApple OSS Distributions /* Helper functions for setting and checking memorystatus assertions
11*a1e26a70SApple OSS Distributions  * on processes.
12*a1e26a70SApple OSS Distributions  */
13*a1e26a70SApple OSS Distributions 
14*a1e26a70SApple OSS Distributions /*
15*a1e26a70SApple OSS Distributions  * Set the jetsam priority and user data for a process.
16*a1e26a70SApple OSS Distributions  *
17*a1e26a70SApple OSS Distributions  * If this request is assertion driven, the kernel will
18*a1e26a70SApple OSS Distributions  * set the process's assertion priority.
19*a1e26a70SApple OSS Distributions  *
20*a1e26a70SApple OSS Distributions  * If this request is not assertion driven, the kernel
21*a1e26a70SApple OSS Distributions  * will set the process's requested priority.
22*a1e26a70SApple OSS Distributions  *
23*a1e26a70SApple OSS Distributions  * The kernel will then apply policy and move the process
24*a1e26a70SApple OSS Distributions  * to the appropriate jetsam priority.
25*a1e26a70SApple OSS Distributions  *
26*a1e26a70SApple OSS Distributions  * Returns:    0 on success
27*a1e26a70SApple OSS Distributions  *	   non-0 on failure
28*a1e26a70SApple OSS Distributions  */
29*a1e26a70SApple OSS Distributions int
30*a1e26a70SApple OSS Distributions set_priority(pid_t pid, int32_t priority, uint64_t user_data, boolean_t is_assertion_driven);
31*a1e26a70SApple OSS Distributions 
32*a1e26a70SApple OSS Distributions /*
33*a1e26a70SApple OSS Distributions  * Return: true on success
34*a1e26a70SApple OSS Distributions  *         false on failure  --> this asserts a failure and quits test
35*a1e26a70SApple OSS Distributions  */
36*a1e26a70SApple OSS Distributions boolean_t
37*a1e26a70SApple OSS Distributions check_properties(pid_t pid, int32_t expected_priority, int32_t expected_limit_mb, uint64_t expected_user_data, boolean_t expected_assertion_state, const char *test);
38*a1e26a70SApple OSS Distributions 
39*a1e26a70SApple OSS Distributions /*
40*a1e26a70SApple OSS Distributions  *  Set the active and inactive memlimits for a process.
41*a1e26a70SApple OSS Distributions  *  Set the fatalness for each limit.
42*a1e26a70SApple OSS Distributions  *
43*a1e26a70SApple OSS Distributions  * Returns:     0 on success
44*a1e26a70SApple OSS Distributions  *              non-zero on failure
45*a1e26a70SApple OSS Distributions  */
46*a1e26a70SApple OSS Distributions int
47*a1e26a70SApple OSS Distributions set_memlimits(
48*a1e26a70SApple OSS Distributions 	pid_t pid,
49*a1e26a70SApple OSS Distributions 	int32_t active_limit_mb, int32_t inactive_limit_mb,
50*a1e26a70SApple OSS Distributions 	boolean_t active_is_fatal, boolean_t inactive_is_fatal);
51*a1e26a70SApple OSS Distributions 
52*a1e26a70SApple OSS Distributions /*
53*a1e26a70SApple OSS Distributions  * Returns:    0 on success
54*a1e26a70SApple OSS Distributions  *	   non-0 on failure
55*a1e26a70SApple OSS Distributions  */
56*a1e26a70SApple OSS Distributions int
57*a1e26a70SApple OSS Distributions set_assertion_priority(pid_t pid, int32_t priority, uint64_t user_data);
58*a1e26a70SApple OSS Distributions 
59*a1e26a70SApple OSS Distributions /*
60*a1e26a70SApple OSS Distributions  * Returns:    0 on success
61*a1e26a70SApple OSS Distributions  *	   non-0 on failure
62*a1e26a70SApple OSS Distributions  */
63*a1e26a70SApple OSS Distributions int
64*a1e26a70SApple OSS Distributions relinquish_assertion_priority(pid_t pid, uint64_t user_data);
65*a1e26a70SApple OSS Distributions 
66*a1e26a70SApple OSS Distributions /*
67*a1e26a70SApple OSS Distributions  * Get the priority properties for a single process.
68*a1e26a70SApple OSS Distributions  *
69*a1e26a70SApple OSS Distributions  * This returns the process's effective jetsam priority, jetsam limit,
70*a1e26a70SApple OSS Distributions  * user_data (not kernel related), and proc's kernel state.
71*a1e26a70SApple OSS Distributions  * If this call fails, there is no reason to continue the test.
72*a1e26a70SApple OSS Distributions  *
73*a1e26a70SApple OSS Distributions  * Return: true on success
74*a1e26a70SApple OSS Distributions  *	   false on failure  --> this asserts fail and test quits
75*a1e26a70SApple OSS Distributions  */
76*a1e26a70SApple OSS Distributions boolean_t
77*a1e26a70SApple OSS Distributions get_priority_props(pid_t pid, boolean_t verbose, int32_t *priority, int32_t *limit_mb, uint64_t *user_data, uint32_t *state);
78*a1e26a70SApple OSS Distributions 
79*a1e26a70SApple OSS Distributions /*
80*a1e26a70SApple OSS Distributions  * Input:
81*a1e26a70SApple OSS Distributions  *	state:   kernel state bits from the get_priority_props() call
82*a1e26a70SApple OSS Distributions  *      expected_assertion_state:
83*a1e26a70SApple OSS Distributions  *		true if process should be holding an assertion state.
84*a1e26a70SApple OSS Distributions  *		false if no assertion state is held (eg: relinquished).
85*a1e26a70SApple OSS Distributions  *
86*a1e26a70SApple OSS Distributions  * Return  true:  verification passed
87*a1e26a70SApple OSS Distributions  *	  false:  verification failed
88*a1e26a70SApple OSS Distributions  */
89*a1e26a70SApple OSS Distributions boolean_t
90*a1e26a70SApple OSS Distributions verify_assertion_state(uint32_t state, boolean_t expected_assertion_state);
91*a1e26a70SApple OSS Distributions 
92*a1e26a70SApple OSS Distributions #endif /* MEMORYSTATUS_ASSERTION_HELPERS_H */
93