Merged to master at 29d6d3978d87..e931e68ace71 (from, to]
You can see the entire diff with 'git diff' or at
https://github.com/brho/akaros/compare/29d6d3978d87...e931e68ace71
On 2016-09-08 at 9:51 Ronald G. Minnich wrote:
> For example, a benchmark declares the vm as follows:
> struct virtual_machine vm = {.halt_exit = true,};
>
> Which will force guests that halt to exit.
>
> Change-Id: Ie6368093072f324c86c9ace1807075cd073d540c
> Signed-off-by: Ronald G. Minnich <[email protected]>
> ---
> user/vmm/include/vmm/sched.h | 1 +
> user/vmm/include/vmm/vmm.h | 3 +++
> user/vmm/vmexit.c | 2 ++
> user/vmm/vthread.c | 1 +
> 4 files changed, 7 insertions(+)
>
> diff --git a/user/vmm/include/vmm/sched.h b/user/vmm/include/vmm/sched.h
> index 403ca3f..a098cf7 100644
> --- a/user/vmm/include/vmm/sched.h
> +++ b/user/vmm/include/vmm/sched.h
> @@ -30,6 +30,7 @@ struct guest_thread {
> struct uthread uthread;
> struct ctlr_thread *buddy;
> unsigned int gpc_id;
> + bool halt_exit;
> uth_mutex_t halt_mtx;
> uth_cond_var_t halt_cv;
> };
> diff --git a/user/vmm/include/vmm/vmm.h b/user/vmm/include/vmm/vmm.h
> index e5f3f35..65ddd4a 100644
> --- a/user/vmm/include/vmm/vmm.h
> +++ b/user/vmm/include/vmm/vmm.h
> @@ -40,6 +40,9 @@ struct virtual_machine {
> * where all guests share a page table. It's not required
> * however. */
> void *root;
> +
> + /* Default value for whether guest threads halt on an exit. */
> + bool halt_exit;
> };
>
> char *regname(uint8_t reg);
> diff --git a/user/vmm/vmexit.c b/user/vmm/vmexit.c
> index 9ab6f44..4404ec9 100644
> --- a/user/vmm/vmexit.c
> +++ b/user/vmm/vmexit.c
> @@ -190,6 +190,8 @@ static bool handle_halt(struct guest_thread *gth)
> {
> struct vm_trapframe *vm_tf = gth_to_vmtf(gth);
>
> + if (gth->halt_exit)
> + return FALSE;
> /* It's possible the guest disabled IRQs and halted, perhaps waiting on
> an
> * NMI or something. If we need to support that, we can change this.
> */
> sleep_til_irq(gth);
> diff --git a/user/vmm/vthread.c b/user/vmm/vthread.c
> index e7963e5..5ef8d4c 100644
> --- a/user/vmm/vthread.c
> +++ b/user/vmm/vthread.c
> @@ -103,6 +103,7 @@ static int vmsetup(struct virtual_machine *vm, int flags)
> return ret;
>
> for (i = 0; i < vm->nr_gpcs; i++) {
> + vm->gths[i]->halt_exit = vm->halt_exit;
> vm_tf = gth_to_vmtf(vm->gths[i]);
> vm_tf->tf_cr3 = (uint64_t)p512;
> }
--
You received this message because you are subscribed to the Google Groups
"Akaros" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.