/* vmach.h - "virtual" machine and cpu contexts * * Copyright (C) 2009 Timo Teräs * All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 or later as * published by the Free Software Foundation. * * See http://www.gnu.org/ for details. */ #ifndef TF_VMACH_H #define TF_VMACH_H #include struct tf_vmach { struct tf_poll_hooks * poll_ops; void * poll_fiber; void * timeout_fiber; struct tf_fiber startup_fiber; int num_user_fibers; struct tf_list_head run_q; }; struct tf_vcpu { struct tf_vmach * machine; }; static inline struct tf_vmach *tf_vmach_get_current(void) { extern __thread struct tf_vmach *tf_current_vmach; return tf_current_vmach; } static inline struct tf_vcpu *tf_vmach_get_current_cpu(void) { extern __thread struct tf_vcpu *tf_current_vcpu; return tf_current_vcpu; } void tf_vmach_start(void); void tf_vmach_stop(void); void tf_vmach_run(struct tf_vmach *vm, struct tf_fiber *f); void tf_vmach_run_dedicated(struct tf_vmach *vm, struct tf_fiber *f); #endif