diff --git a/hypervisor/arch/x86/guest/vm.c b/hypervisor/arch/x86/guest/vm.c index 595760977..3a9de2b0f 100644 --- a/hypervisor/arch/x86/guest/vm.c +++ b/hypervisor/arch/x86/guest/vm.c @@ -231,7 +231,7 @@ static void prepare_prelaunched_vm_memmap(struct acrn_vm *vm, const struct acrn_ if (entry->length == 0UL) { continue; } else { - if (is_sw_sram_initialized && (entry->baseaddr == PRE_RTVM_SW_SRAM_BASE_GPA) && + if (is_software_sram_enabled() && (entry->baseaddr == PRE_RTVM_SW_SRAM_BASE_GPA) && ((vm_config->guest_flags & GUEST_FLAG_RT) != 0U)){ /* pass through Software SRAM to pre-RTVM */ ept_add_mr(vm, (uint64_t *)vm->arch_vm.nworld_eptp, diff --git a/hypervisor/arch/x86/guest/vmexit.c b/hypervisor/arch/x86/guest/vmexit.c index 0091a9d43..2bb8ae62e 100644 --- a/hypervisor/arch/x86/guest/vmexit.c +++ b/hypervisor/arch/x86/guest/vmexit.c @@ -408,7 +408,7 @@ static int32_t wbinvd_vmexit_handler(struct acrn_vcpu *vcpu) struct acrn_vcpu *other; /* GUEST_FLAG_RT has not set in post-launched RTVM before it has been created */ - if ((!is_sw_sram_initialized) && (!has_rt_vm())) { + if ((!is_software_sram_enabled()) && (!has_rt_vm())) { cache_flush_invalidate_all(); } else { if (is_rt_vm(vcpu->vm)) { diff --git a/hypervisor/arch/x86/rtcm.c b/hypervisor/arch/x86/rtcm.c index e40824a7c..02b0f5d5c 100644 --- a/hypervisor/arch/x86/rtcm.c +++ b/hypervisor/arch/x86/rtcm.c @@ -16,7 +16,7 @@ static uint64_t software_sram_bottom_hpa; static uint64_t software_sram_top_hpa; /* is_sw_sram_initialized is used to tell whether Software SRAM is successfully initialized for all cores */ -volatile bool is_sw_sram_initialized = false; +static volatile bool is_sw_sram_initialized = false; #ifdef CONFIG_PSRAM_ENABLED @@ -173,6 +173,12 @@ void init_software_sram(__unused bool is_bsp) } #endif +/* @pre called after 'init_software_sram()' done. */ +bool is_software_sram_enabled(void) +{ + return is_sw_sram_initialized; +} + uint64_t get_software_sram_base(void) { return software_sram_bottom_hpa; diff --git a/hypervisor/common/hypercall.c b/hypervisor/common/hypercall.c index 13e818165..03aee211a 100644 --- a/hypervisor/common/hypercall.c +++ b/hypervisor/common/hypercall.c @@ -575,7 +575,7 @@ static void add_vm_memory_region(struct acrn_vm *vm, struct acrn_vm *target_vm, * TODO: We can enforce WB for any region has overlap with Software SRAM, for simplicity, * and leave it to SOS to make sure it won't violate. */ - if (is_sw_sram_initialized) { + if (is_software_sram_enabled()) { base_paddr = get_software_sram_base(); if ((hpa >= base_paddr) && ((hpa + region->size) <= (base_paddr + get_software_sram_size()))) { diff --git a/hypervisor/include/arch/x86/rtcm.h b/hypervisor/include/arch/x86/rtcm.h index 95959c6b8..239f9be0d 100644 --- a/hypervisor/include/arch/x86/rtcm.h +++ b/hypervisor/include/arch/x86/rtcm.h @@ -26,7 +26,7 @@ struct rtcm_header { uint64_t command_offset; } __packed; -extern volatile bool is_sw_sram_initialized; void init_software_sram(bool is_bsp); void set_rtct_tbl(void *rtct_tbl_addr); +bool is_software_sram_enabled(void); #endif /* RTCM_H */