mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-24 02:08:04 +00:00
hv: implement NEED_SHUTDOWN_VM request to idle thread
For pre-launched VMs and SOS, VM shutdown should not be executed in the current VM context. - implement NEED_SHUTDOWN_VM request so that the BSP of the target VM can shut down the guest in idle thread. - implement shutdown_vm_from_idle() to shut down target VM. Tracked-On: #2700 Signed-off-by: Zide Chen <zide.chen@intel.com> Signed-off-by: Sainath Grandhi <sainath.grandhi@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
|
||||
#include <vm.h>
|
||||
#include <vm_reset.h>
|
||||
#include <vmcs.h>
|
||||
#include <vmexit.h>
|
||||
#include <irq.h>
|
||||
@@ -88,6 +89,8 @@ void default_idle(__unused struct sched_object *obj)
|
||||
schedule();
|
||||
} else if (need_offline(pcpu_id) != 0) {
|
||||
cpu_dead();
|
||||
} else if (need_shutdown_vm(pcpu_id)) {
|
||||
shutdown_vm_from_idle(pcpu_id);
|
||||
} else {
|
||||
CPU_IRQ_ENABLE();
|
||||
cpu_do_idle();
|
||||
|
@@ -152,6 +152,23 @@ int32_t need_offline(uint16_t pcpu_id)
|
||||
return bitmap_test_and_clear_lock(NEED_OFFLINE, &ctx->flags);
|
||||
}
|
||||
|
||||
void make_shutdown_vm_request(uint16_t pcpu_id)
|
||||
{
|
||||
struct sched_context *ctx = &per_cpu(sched_ctx, pcpu_id);
|
||||
|
||||
bitmap_set_lock(NEED_SHUTDOWN_VM, &ctx->flags);
|
||||
if (get_pcpu_id() != pcpu_id) {
|
||||
send_single_ipi(pcpu_id, VECTOR_NOTIFY_VCPU);
|
||||
}
|
||||
}
|
||||
|
||||
bool need_shutdown_vm(uint16_t pcpu_id)
|
||||
{
|
||||
struct sched_context *ctx = &per_cpu(sched_ctx, pcpu_id);
|
||||
|
||||
return bitmap_test_and_clear_lock(NEED_SHUTDOWN_VM, &ctx->flags);
|
||||
}
|
||||
|
||||
static void prepare_switch(struct sched_object *prev, struct sched_object *next)
|
||||
{
|
||||
if ((prev != NULL) && (prev->prepare_switch_out != NULL)) {
|
||||
|
Reference in New Issue
Block a user