diff --git a/hypervisor/arch/x86/pagetable.c b/hypervisor/arch/x86/pagetable.c index fa87927a7..7586ca2d3 100644 --- a/hypervisor/arch/x86/pagetable.c +++ b/hypervisor/arch/x86/pagetable.c @@ -97,13 +97,21 @@ static void modify_or_del_pte(const uint64_t *pde, uint64_t vaddr_start, uint64_ uint64_t *pte = pt_page + index; if (mem_ops->pgentry_present(*pte) == 0UL) { - ASSERT(false, "invalid op, pte not present"); + /* + * Entry is not present, print warning message but avoid complains for + * low memory (< 1M bytes), Service VM may update attributes for this region + * when updating MTRR setting. + */ + if (vaddr >= MEM_1M) { + pr_warn("%s, vaddr: 0x%lx pte is not present.\n", __func__, vaddr); + } } else { local_modify_or_del_pte(pte, prot_set, prot_clr, type); - vaddr += PTE_SIZE; - if (vaddr >= vaddr_end) { - break; - } + } + + vaddr += PTE_SIZE; + if (vaddr >= vaddr_end) { + break; } } } @@ -128,7 +136,7 @@ static void modify_or_del_pde(const uint64_t *pdpte, uint64_t vaddr_start, uint6 uint64_t vaddr_next = (vaddr & PDE_MASK) + PDE_SIZE; if (mem_ops->pgentry_present(*pde) == 0UL) { - ASSERT(false, "invalid op, pde not present"); + pr_warn("%s, addr: 0x%lx pde is not present.\n", __func__, vaddr); } else { if (pde_large(*pde) != 0UL) { if ((vaddr_next > vaddr_end) || (!mem_aligned_check(vaddr, PDE_SIZE))) { @@ -143,11 +151,12 @@ static void modify_or_del_pde(const uint64_t *pdpte, uint64_t vaddr_start, uint6 } } modify_or_del_pte(pde, vaddr, vaddr_end, prot_set, prot_clr, mem_ops, type); - if (vaddr_next >= vaddr_end) { - break; /* done */ - } - vaddr = vaddr_next; } + + if (vaddr_next >= vaddr_end) { + break; /* done */ + } + vaddr = vaddr_next; } } @@ -171,7 +180,7 @@ static void modify_or_del_pdpte(const uint64_t *pml4e, uint64_t vaddr_start, uin uint64_t vaddr_next = (vaddr & PDPTE_MASK) + PDPTE_SIZE; if (mem_ops->pgentry_present(*pdpte) == 0UL) { - ASSERT(false, "invalid op, pdpte not present"); + pr_warn("%s, addr: 0x%lx pdpte is not present.\n", __func__, vaddr); } else { if (pdpte_large(*pdpte) != 0UL) { if ((vaddr_next > vaddr_end) || @@ -187,11 +196,12 @@ static void modify_or_del_pdpte(const uint64_t *pml4e, uint64_t vaddr_start, uin } } modify_or_del_pde(pdpte, vaddr, vaddr_end, prot_set, prot_clr, mem_ops, type); - if (vaddr_next >= vaddr_end) { - break; /* done */ - } - vaddr = vaddr_next; } + + if (vaddr_next >= vaddr_end) { + break; /* done */ + } + vaddr = vaddr_next; } }