4e76f8b082050316a96c25ed6deaa99fb4f7fcf4
[akaros.git] / user / vmm / include / vmm / vthread.h
1 /* Copyright (c) 2017 Google Inc.
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details. */
4
5 #pragma once
6
7 #include <vmm/sched.h>
8
9 __BEGIN_DECLS
10
11 /* This will hang off the gth->user_data for vthread_create, but not for
12  * vthread_alloc.  You're on your own there.  Using this is a sign that we may
13  * need our own 2LS for vthreads. */
14 struct vthread_info {
15         uintptr_t                                       stacktop;
16 };
17
18 struct vthread {
19         struct guest_thread                     gth;
20         /* Don't add to this structure without changing how these are allocated. */
21 };
22
23 static struct vm_trapframe *vth_to_vmtf(struct vthread *vth)
24 {
25         return gth_to_vmtf((struct guest_thread*)vth);
26 }
27
28 struct vthread *vthread_alloc(struct virtual_machine *vm, int guest);
29 void vthread_init_ctx(struct vthread *vth, uintptr_t entry_pt, uintptr_t arg,
30                       uintptr_t stacktop);
31 void vthread_run(struct vthread *vthread);
32 struct vthread *vthread_create(struct virtual_machine *vm, int guest,
33                                void *entry, void *arg);
34
35 __END_DECLS