kern_memorystatus.h [plain text]
#ifndef SYS_KERN_MEMORYSTATUS_H
#define SYS_KERN_MEMORYSTATUS_H
#ifndef MACH_KERNEL_PRIVATE
#include <stdint.h>
#include <sys/time.h>
#include <sys/proc.h>
#define KEV_MEMORYSTATUS_SUBCLASS 3
enum {
kMemoryStatusLevelNote = 1,
kMemoryStatusSnapshotNote = 2,
kMemoryStatusHibernationNote = 3
};
enum {
kMemoryStatusLevelAny = -1,
kMemoryStatusLevelNormal = 0,
kMemoryStatusLevelWarning = 1,
kMemoryStatusLevelUrgent = 2,
kMemoryStatusLevelCritical = 3
};
typedef struct jetsam_priority_entry {
pid_t pid;
uint32_t flags;
int32_t hiwat_pages;
int32_t hiwat_reserved1;
int32_t hiwat_reserved2;
int32_t hiwat_reserved3;
} jetsam_priority_entry_t;
#define kMaxPriorityEntries 64
typedef struct jetsam_snapshot_entry {
pid_t pid;
char name[MAXCOMLEN+1];
uint32_t pages;
uint32_t flags;
uint8_t uuid[16];
} jetsam_snapshot_entry_t;
#define kMaxSnapshotEntries 128
typedef struct jetsam_kernel_stats {
uint32_t free_pages;
uint32_t active_pages;
uint32_t inactive_pages;
uint32_t purgeable_pages;
uint32_t wired_pages;
} jetsam_kernel_stats_t;
typedef struct jetsam_snapshot {
jetsam_kernel_stats_t stats;
size_t entry_count;
jetsam_snapshot_entry_t entries[1];
} jetsam_snapshot_t;
typedef struct jetsam_hibernation_entry {
uint32_t pid;
uint32_t flags;
uint32_t pages;
} jetsam_hibernation_entry_t;
#endif
enum {
kJetsamFlagsFrontmost = (1 << 0),
kJetsamFlagsKilled = (1 << 1),
kJetsamFlagsKilledHiwat = (1 << 2),
kJetsamFlagsHibernated = (1 << 3),
kJetsamFlagsKilledVnodes = (1 << 4),
kJetsamFlagsKilledSwap = (1 << 5),
kJetsamFlagsThawed = (1 << 6),
kJetsamFlagsKilledVM = (1 << 7),
kJetsamFlagsSuspForDiagnosis = (1 << 8)
};
#ifdef KERNEL
extern void kern_memorystatus_init(void) __attribute__((section("__TEXT, initcode")));
extern int jetsam_kill_top_proc(boolean_t any, uint32_t reason);
extern int kern_memorystatus_wakeup;
extern int kern_memorystatus_level;
extern unsigned int kern_memorystatus_delta;
#ifdef CONFIG_FREEZE
extern void kern_hibernation_init(void) __attribute__((section("__TEXT, initcode")));
extern int kern_hibernation_wakeup;
void kern_hibernation_on_pid_suspend(int pid);
void kern_hibernation_on_pid_resume(int pid, task_t task);
void kern_hibernation_on_pid_hibernate(int pid);
#endif
#if CONFIG_EMBEDDED
#define VM_CHECK_MEMORYSTATUS do { vm_check_memorystatus(); } while(0)
#else
#define VM_CHECK_MEMORYSTATUS do {} while(0)
#endif
#endif
#endif