Lines Matching refs:gaddr
317 unsigned long init, unsigned long gaddr)
333 page->index = gaddr;
385 * @gaddr: address in the guest address space
389 static int __gmap_unmap_by_gaddr(struct gmap *gmap, unsigned long gaddr)
394 gaddr >> PMD_SHIFT);
474 * @gaddr: guest address
484 unsigned long __gmap_translate(struct gmap *gmap, unsigned long gaddr)
489 radix_tree_lookup(&gmap->guest_to_host, gaddr >> PMD_SHIFT);
491 return vmaddr ? (vmaddr | (gaddr & ~PMD_MASK)) : -EFAULT;
498 * @gaddr: guest address
504 unsigned long gmap_translate(struct gmap *gmap, unsigned long gaddr)
509 rc = __gmap_translate(gmap, gaddr);
537 unsigned long gaddr);
542 * @gaddr: guest address
550 int __gmap_link(struct gmap *gmap, unsigned long gaddr, unsigned long vmaddr)
566 table += (gaddr & _REGION1_INDEX) >> _REGION1_SHIFT;
569 gaddr & _REGION1_MASK))
574 table += (gaddr & _REGION2_INDEX) >> _REGION2_SHIFT;
577 gaddr & _REGION2_MASK))
582 table += (gaddr & _REGION3_INDEX) >> _REGION3_SHIFT;
585 gaddr & _REGION3_MASK))
589 table += (gaddr & _SEGMENT_INDEX) >> _SEGMENT_SHIFT;
629 gmap_pmdp_xchg(gmap, (pmd_t *)table, __pmd(unprot), gaddr);
640 * @gaddr: guest address
646 int gmap_fault(struct gmap *gmap, unsigned long gaddr,
657 vmaddr = __gmap_translate(gmap, gaddr);
674 rc = __gmap_link(gmap, gaddr, vmaddr);
684 void __gmap_zap(struct gmap *gmap, unsigned long gaddr)
693 gaddr >> PMD_SHIFT);
695 vmaddr |= gaddr & ~PMD_MASK;
713 unsigned long gaddr, vmaddr, size;
717 for (gaddr = from; gaddr < to;
718 gaddr = (gaddr + PMD_SIZE) & PMD_MASK) {
722 gaddr >> PMD_SHIFT);
725 vmaddr |= gaddr & ~PMD_MASK;
736 size = min(to - gaddr, PMD_SIZE - (gaddr & ~PMD_MASK));
789 * @gaddr: virtual address in the guest address space
805 unsigned long gaddr, int level)
817 gaddr & (-1UL << (31 + (asce_type >> 2) * 11)))
822 table += (gaddr & _REGION1_INDEX) >> _REGION1_SHIFT;
830 table += (gaddr & _REGION2_INDEX) >> _REGION2_SHIFT;
838 table += (gaddr & _REGION3_INDEX) >> _REGION3_SHIFT;
846 table += (gaddr & _SEGMENT_INDEX) >> _SEGMENT_SHIFT;
852 table += (gaddr & _PAGE_INDEX) >> _PAGE_SHIFT;
861 * @gaddr: virtual address in the guest address space
866 static pte_t *gmap_pte_op_walk(struct gmap *gmap, unsigned long gaddr,
873 table = gmap_table_walk(gmap, gaddr, 1); /* get segment pointer */
876 return pte_alloc_map_lock(gmap->mm, (pmd_t *) table, gaddr, ptl);
882 * @gaddr: virtual address in the guest address space
890 static int gmap_pte_op_fixup(struct gmap *gmap, unsigned long gaddr,
905 return __gmap_link(gmap, gaddr, vmaddr);
922 * @gaddr: virtual address in the guest address space
926 static inline pmd_t *gmap_pmd_op_walk(struct gmap *gmap, unsigned long gaddr)
931 pmdp = (pmd_t *) gmap_table_walk(gmap, gaddr, 1);
976 static int gmap_protect_pmd(struct gmap *gmap, unsigned long gaddr,
989 gmap_pmdp_xchg(gmap, pmdp, new, gaddr);
995 gmap_pmdp_xchg(gmap, pmdp, new, gaddr);
1011 * @gaddr: virtual address in the guest address space
1021 static int gmap_protect_pte(struct gmap *gmap, unsigned long gaddr,
1032 ptep = pte_alloc_map_lock(gmap->mm, pmdp, gaddr, &ptl);
1039 rc = ptep_force_prot(gmap->mm, gaddr, ptep, prot, pbits);
1047 * @gaddr: virtual address in the guest address space
1053 * -EFAULT if gaddr is invalid (or mapping for shadows is missing).
1057 static int gmap_protect_range(struct gmap *gmap, unsigned long gaddr,
1067 pmdp = gmap_pmd_op_walk(gmap, gaddr);
1070 rc = gmap_protect_pte(gmap, gaddr, pmdp, prot,
1074 gaddr += PAGE_SIZE;
1077 rc = gmap_protect_pmd(gmap, gaddr, pmdp, prot,
1080 dist = HPAGE_SIZE - (gaddr & ~HPAGE_MASK);
1082 gaddr = (gaddr & HPAGE_MASK) + HPAGE_SIZE;
1092 vmaddr = __gmap_translate(gmap, gaddr);
1095 rc = gmap_pte_op_fixup(gmap, gaddr, vmaddr, prot);
1107 * @gaddr: virtual address in the guest address space
1117 int gmap_mprotect_notify(struct gmap *gmap, unsigned long gaddr,
1122 if ((gaddr & ~PAGE_MASK) || (len & ~PAGE_MASK) || gmap_is_shadow(gmap))
1127 rc = gmap_protect_range(gmap, gaddr, len, prot, GMAP_NOTIFY_MPROT);
1137 * @gaddr: virtual address in the guest address space
1146 int gmap_read_table(struct gmap *gmap, unsigned long gaddr, unsigned long *val)
1158 ptep = gmap_pte_op_walk(gmap, gaddr, &ptl);
1163 address += gaddr & ~PAGE_MASK;
1173 vmaddr = __gmap_translate(gmap, gaddr);
1178 rc = gmap_pte_op_fixup(gmap, gaddr, vmaddr, PROT_READ);
2204 unsigned long gaddr)
2219 if (!(sg->orig_asce & _ASCE_REAL_SPACE) && gaddr >= start &&
2220 gaddr < end) {
2268 unsigned long offset, gaddr = 0;
2280 gaddr = __gmap_segment_gaddr(table) + offset;
2289 gmap_shadow_notify(sg, vmaddr, gaddr);
2293 gmap_call_notifier(gmap, gaddr, gaddr + PAGE_SIZE - 1);
2300 unsigned long gaddr)
2303 gmap_call_notifier(gmap, gaddr, gaddr + HPAGE_SIZE - 1);
2311 * @gaddr: the affected guest address
2317 unsigned long gaddr)
2319 gaddr &= HPAGE_MASK;
2320 pmdp_notify_gmap(gmap, pmdp, gaddr);
2323 __pmdp_idte(gaddr, (pmd_t *)pmdp, IDTE_GUEST_ASCE, gmap->asce,
2326 __pmdp_idte(gaddr, (pmd_t *)pmdp, 0, 0, IDTE_GLOBAL);
2337 unsigned long gaddr;
2345 gaddr = __gmap_segment_gaddr((unsigned long *)pmdp);
2346 pmdp_notify_gmap(gmap, pmdp, gaddr);
2388 unsigned long *entry, gaddr;
2399 gaddr = __gmap_segment_gaddr(entry);
2400 pmdp_notify_gmap(gmap, pmdp, gaddr);
2404 __pmdp_idte(gaddr, pmdp, IDTE_GUEST_ASCE,
2407 __pmdp_idte(gaddr, pmdp, 0, 0, IDTE_LOCAL);
2423 unsigned long *entry, gaddr;
2434 gaddr = __gmap_segment_gaddr(entry);
2435 pmdp_notify_gmap(gmap, pmdp, gaddr);
2439 __pmdp_idte(gaddr, pmdp, IDTE_GUEST_ASCE,
2442 __pmdp_idte(gaddr, pmdp, 0, 0, IDTE_GLOBAL);
2457 * @gaddr: virtual address in the guest address space
2463 unsigned long gaddr)
2475 gmap_protect_pmd(gmap, gaddr, pmdp, PROT_READ, 0);
2483 * @gaddr: virtual address in the guest address space
2490 unsigned long gaddr, unsigned long vmaddr)
2497 pmdp = gmap_pmd_op_walk(gmap, gaddr);
2502 if (gmap_test_and_clear_dirty_pmd(gmap, pmdp, gaddr))