vmm: refactor userspace's emsr_fakewrite()
[akaros.git] / kern / include / profiler.h
1 /* Copyright (c) 2015 Google Inc
2  * Davide Libenzi <dlibenzi@google.com>
3  * See LICENSE for details.
4  *
5  * Synchronization is a little hokey - we assume the external caller (kprof)
6  * makes sure that there is only one call to profiler_setup(), followed by a
7  * call to profiler_cleanup().  Between these calls, that thread can make
8  * serialized calls to profiler_{start,stop,trace_data_flush}(). */
9
10 #pragma once
11
12 #include <stdio.h>
13 #include <ros/profiler_records.h>
14
15 struct proc;
16 struct file_or_chan;
17 struct cmdbuf;
18
19 /* Caller (kprof) ensures at most one call to setup and then cleanup. */
20 int profiler_setup(void);
21 void profiler_cleanup(void);
22
23 /* Call these one at a time after setup and before cleanup. */
24 void profiler_start(void);
25 void profiler_stop(void);
26 void profiler_trace_data_flush(void);
27
28 /* Call these anytime.  If the profiler is off, they will be ignored.  Some
29  * configure options won't take effect until the next profiler run. */
30 int profiler_configure(struct cmdbuf *cb);
31 void profiler_append_configure_usage(char *msgbuf, size_t buflen);
32
33 void profiler_push_kernel_backtrace(uintptr_t *pc_list, size_t nr_pcs,
34                                     uint64_t info);
35 void profiler_push_user_backtrace(uintptr_t *pc_list, size_t nr_pcs,
36                                   uint64_t info);
37 size_t profiler_size(void);
38 size_t profiler_read(void *va, size_t n);
39 void profiler_notify_mmap(struct proc *p, uintptr_t addr, size_t size, int prot,
40                           int flags, struct file_or_chan *foc, size_t offset);
41 void profiler_notify_new_process(struct proc *p);