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