Lines Matching refs:vaddr
83 static pgd_t *spgd_addr(struct lg_cpu *cpu, u32 i, unsigned long vaddr) in spgd_addr() argument
85 unsigned int index = pgd_index(vaddr); in spgd_addr()
97 static pmd_t *spmd_addr(struct lg_cpu *cpu, pgd_t spgd, unsigned long vaddr) in spmd_addr() argument
99 unsigned int index = pmd_index(vaddr); in spmd_addr()
115 static pte_t *spte_addr(struct lg_cpu *cpu, pgd_t spgd, unsigned long vaddr) in spte_addr() argument
118 pmd_t *pmd = spmd_addr(cpu, spgd, vaddr); in spte_addr()
129 return &page[pte_index(vaddr)]; in spte_addr()
136 static unsigned long gpgd_addr(struct lg_cpu *cpu, unsigned long vaddr) in gpgd_addr() argument
138 unsigned int index = vaddr >> (PGDIR_SHIFT); in gpgd_addr()
144 static unsigned long gpmd_addr(pgd_t gpgd, unsigned long vaddr) in gpmd_addr() argument
148 return gpage + pmd_index(vaddr) * sizeof(pmd_t); in gpmd_addr()
153 pmd_t gpmd, unsigned long vaddr) in gpte_addr() argument
158 return gpage + pte_index(vaddr) * sizeof(pte_t); in gpte_addr()
163 pgd_t gpgd, unsigned long vaddr) in gpte_addr() argument
168 return gpage + pte_index(vaddr) * sizeof(pte_t); in gpte_addr()
293 static pte_t *find_spte(struct lg_cpu *cpu, unsigned long vaddr, bool allocate, in find_spte() argument
303 spgd = spgd_addr(cpu, cpu->cpu_pgd, vaddr); in find_spte()
334 spmd = spmd_addr(cpu, *spgd, vaddr); in find_spte()
364 return spte_addr(cpu, *spgd, vaddr); in find_spte()
378 bool demand_page(struct lg_cpu *cpu, unsigned long vaddr, int errcode) in demand_page() argument
387 if (vaddr >= switcher_addr) in demand_page()
395 gpgd = lgread(cpu, gpgd_addr(cpu, vaddr), pgd_t); in demand_page()
413 gpmd = lgread(cpu, gpmd_addr(gpgd, vaddr), pmd_t); in demand_page()
430 gpte_ptr = gpte_addr(cpu, gpmd, vaddr); in demand_page()
436 gpte_ptr = gpte_addr(cpu, gpgd, vaddr); in demand_page()
441 gpte = __pte((vaddr & PAGE_MASK) | _PAGE_RW | _PAGE_PRESENT); in demand_page()
475 spte = find_spte(cpu, vaddr, true, pgd_flags(gpgd), pmd_flags(gpmd)); in demand_page()
527 static bool page_writable(struct lg_cpu *cpu, unsigned long vaddr) in page_writable() argument
533 if (vaddr >= switcher_addr) in page_writable()
537 spte = find_spte(cpu, vaddr, false, 0, 0); in page_writable()
554 void pin_page(struct lg_cpu *cpu, unsigned long vaddr) in pin_page() argument
556 if (!page_writable(cpu, vaddr) && !demand_page(cpu, vaddr, 2)) in pin_page()
557 kill_guest(cpu, "bad stack page %#lx", vaddr); in pin_page()
650 unsigned long guest_pa(struct lg_cpu *cpu, unsigned long vaddr) in guest_pa() argument
660 return vaddr; in guest_pa()
663 gpgd = lgread(cpu, gpgd_addr(cpu, vaddr), pgd_t); in guest_pa()
666 kill_guest(cpu, "Bad address %#lx", vaddr); in guest_pa()
671 gpmd = lgread(cpu, gpmd_addr(gpgd, vaddr), pmd_t); in guest_pa()
673 kill_guest(cpu, "Bad address %#lx", vaddr); in guest_pa()
674 gpte = lgread(cpu, gpte_addr(cpu, gpmd, vaddr), pte_t); in guest_pa()
676 gpte = lgread(cpu, gpte_addr(cpu, gpgd, vaddr), pte_t); in guest_pa()
679 kill_guest(cpu, "Bad address %#lx", vaddr); in guest_pa()
681 return pte_pfn(gpte) * PAGE_SIZE | (vaddr & ~PAGE_MASK); in guest_pa()
889 unsigned long vaddr, pte_t gpte) in do_set_pte() argument
892 pgd_t *spgd = spgd_addr(cpu, idx, vaddr); in do_set_pte()
900 spmd = spmd_addr(cpu, *spgd, vaddr); in do_set_pte()
904 pte_t *spte = spte_addr(cpu, *spgd, vaddr); in do_set_pte()
945 unsigned long gpgdir, unsigned long vaddr, pte_t gpte) in guest_set_pte() argument
948 if (vaddr >= switcher_addr) { in guest_set_pte()
957 if (vaddr >= cpu->lg->kernel_address) { in guest_set_pte()
961 do_set_pte(cpu, i, vaddr, gpte); in guest_set_pte()
967 do_set_pte(cpu, pgdir, vaddr, gpte); in guest_set_pte()