From 1968cdf248ff0cebf07885489b924617281f0707 Mon Sep 17 00:00:00 2001 From: Stanislav Shwartsman Date: Fri, 13 Dec 2019 18:31:43 +0000 Subject: [PATCH] proposed fix for SF issue #547 vmcshostptr not invalidated after memory swapped out --- bochs/cpu/paging.cc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/bochs/cpu/paging.cc b/bochs/cpu/paging.cc index 514d9525e..0374bd030 100644 --- a/bochs/cpu/paging.cc +++ b/bochs/cpu/paging.cc @@ -2428,11 +2428,18 @@ bx_hostpageaddr_t BX_CPU_C::getHostMemAddr(bx_phy_address paddr, unsigned rw) #if BX_LARGE_RAMFILE bx_bool BX_CPU_C::check_addr_in_tlb_buffers(const Bit8u *addr, const Bit8u *end) { +#if BX_SUPPORT_VMX + if (BX_CPU_THIS_PTR vmcshostptr) { + if ((BX_CPU_THIS_PTR vmcshostptr >= (const bx_hostpageaddr_t)addr) && + (BX_CPU_THIS_PTR vmcshostptr < (const bx_hostpageaddr_t)end)) return true; + } +#endif + for (unsigned tlb_entry_num=0; tlb_entry_num < BX_DTLB_SIZE; tlb_entry_num++) { bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR DTLB.entry[tlb_entry_num]; if (tlbEntry->valid()) { - if (((tlbEntry->hostPageAddr) >= (const bx_hostpageaddr_t)addr) && - ((tlbEntry->hostPageAddr) < (const bx_hostpageaddr_t)end)) + if ((tlbEntry->hostPageAddr >= (const bx_hostpageaddr_t)addr) && + (tlbEntry->hostPageAddr < (const bx_hostpageaddr_t)end)) return true; } } @@ -2440,8 +2447,8 @@ bx_bool BX_CPU_C::check_addr_in_tlb_buffers(const Bit8u *addr, const Bit8u *end) for (unsigned tlb_entry_num=0; tlb_entry_num < BX_ITLB_SIZE; tlb_entry_num++) { bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR ITLB.entry[tlb_entry_num]; if (tlbEntry->valid()) { - if (((tlbEntry->hostPageAddr) >= (const bx_hostpageaddr_t)addr) && - ((tlbEntry->hostPageAddr) < (const bx_hostpageaddr_t)end)) + if ((tlbEntry->hostPageAddr >= (const bx_hostpageaddr_t)addr) && + (tlbEntry->hostPageAddr < (const bx_hostpageaddr_t)end)) return true; } }