Lines Matching refs:proc
28 static int read_maps(pm_process_t *proc);
33 pm_process_t *proc;
40 proc = calloc(1, sizeof(*proc));
41 if (!proc)
44 proc->ker = ker;
45 proc->pid = pid;
47 error = snprintf(filename, MAX_FILENAME, "/proc/%d/pagemap", pid);
50 free(proc);
54 proc->pagemap_fd = open(filename, O_RDONLY);
55 if (proc->pagemap_fd < 0) {
57 free(proc);
61 error = read_maps(proc);
63 free(proc);
67 *proc_out = proc;
72 int pm_process_usage(pm_process_t *proc, pm_memusage_t *usage_out) {
77 if (!proc || !usage_out)
82 for (i = 0; i < proc->num_maps; i++) {
83 error = pm_map_usage(proc->maps[i], &map_usage);
94 int pm_process_pagemap_range(pm_process_t *proc,
102 if (!proc || (low >= high) || !range_out || !len)
105 firstpage = low / proc->ker->pagesize;
106 numpages = (high - low) / proc->ker->pagesize;
112 off = lseek(proc->pagemap_fd, firstpage * sizeof(uint64_t), SEEK_SET);
118 error = read(proc->pagemap_fd, (char*)range, numpages * sizeof(uint64_t));
131 int pm_process_maps(pm_process_t *proc, pm_map_t ***maps_out, size_t *len) {
134 if (!proc || !maps_out || !len)
137 if (proc->num_maps) {
138 maps = malloc(proc->num_maps * sizeof(pm_map_t*));
142 memcpy(maps, proc->maps, proc->num_maps * sizeof(pm_map_t*));
148 *len = proc->num_maps;
153 int pm_process_workingset(pm_process_t *proc,
161 if (!proc)
166 for (i = 0; i < proc->num_maps; i++) {
167 error = pm_map_workingset(proc->maps[i], &map_ws);
177 error = snprintf(filename, MAX_FILENAME, "/proc/%d/clear_refs",
178 proc->pid);
195 int pm_process_destroy(pm_process_t *proc) {
196 if (!proc)
199 free(proc->maps);
200 close(proc->pagemap_fd);
201 free(proc);
217 static int read_maps(pm_process_t *proc) {
225 if (!proc)
233 error = snprintf(filename, MAX_FILENAME, "/proc/%d/maps", proc->pid);
256 map->proc = proc;
286 proc->maps = new_maps;
287 proc->num_maps = maps_count;