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