Lines Matching refs:gaddr

306 			    unsigned long init, unsigned long gaddr)
322 page->index = gaddr;
375 * @gaddr: address in the guest address space
379 static int __gmap_unmap_by_gaddr(struct gmap *gmap, unsigned long gaddr)
384 gaddr >> PMD_SHIFT);
464 * @gaddr: guest address
474 unsigned long __gmap_translate(struct gmap *gmap, unsigned long gaddr)
479 radix_tree_lookup(&gmap->guest_to_host, gaddr >> PMD_SHIFT);
481 return vmaddr ? (vmaddr | (gaddr & ~PMD_MASK)) : -EFAULT;
488 * @gaddr: guest address
494 unsigned long gmap_translate(struct gmap *gmap, unsigned long gaddr)
499 rc = __gmap_translate(gmap, gaddr);
527 unsigned long gaddr);
532 * @gaddr: guest address
540 int __gmap_link(struct gmap *gmap, unsigned long gaddr, unsigned long vmaddr)
556 table += (gaddr & _REGION1_INDEX) >> _REGION1_SHIFT;
559 gaddr & _REGION1_MASK))
564 table += (gaddr & _REGION2_INDEX) >> _REGION2_SHIFT;
567 gaddr & _REGION2_MASK))
572 table += (gaddr & _REGION3_INDEX) >> _REGION3_SHIFT;
575 gaddr & _REGION3_MASK))
579 table += (gaddr & _SEGMENT_INDEX) >> _SEGMENT_SHIFT;
619 gmap_pmdp_xchg(gmap, (pmd_t *)table, __pmd(unprot), gaddr);
630 * @gaddr: guest address
636 int gmap_fault(struct gmap *gmap, unsigned long gaddr,
647 vmaddr = __gmap_translate(gmap, gaddr);
664 rc = __gmap_link(gmap, gaddr, vmaddr);
674 void __gmap_zap(struct gmap *gmap, unsigned long gaddr)
682 gaddr >> PMD_SHIFT);
684 vmaddr |= gaddr & ~PMD_MASK;
697 unsigned long gaddr, vmaddr, size;
701 for (gaddr = from; gaddr < to;
702 gaddr = (gaddr + PMD_SIZE) & PMD_MASK) {
706 gaddr >> PMD_SHIFT);
709 vmaddr |= gaddr & ~PMD_MASK;
720 size = min(to - gaddr, PMD_SIZE - (gaddr & ~PMD_MASK));
773 * @gaddr: virtual address in the guest address space
789 unsigned long gaddr, int level)
801 gaddr & (-1UL << (31 + (asce_type >> 2) * 11)))
806 table += (gaddr & _REGION1_INDEX) >> _REGION1_SHIFT;
814 table += (gaddr & _REGION2_INDEX) >> _REGION2_SHIFT;
822 table += (gaddr & _REGION3_INDEX) >> _REGION3_SHIFT;
830 table += (gaddr & _SEGMENT_INDEX) >> _SEGMENT_SHIFT;
836 table += (gaddr & _PAGE_INDEX) >> _PAGE_SHIFT;
845 * @gaddr: virtual address in the guest address space
850 static pte_t *gmap_pte_op_walk(struct gmap *gmap, unsigned long gaddr,
857 table = gmap_table_walk(gmap, gaddr, 1); /* get segment pointer */
860 return pte_alloc_map_lock(gmap->mm, (pmd_t *) table, gaddr, ptl);
866 * @gaddr: virtual address in the guest address space
874 static int gmap_pte_op_fixup(struct gmap *gmap, unsigned long gaddr,
889 return __gmap_link(gmap, gaddr, vmaddr);
906 * @gaddr: virtual address in the guest address space
910 static inline pmd_t *gmap_pmd_op_walk(struct gmap *gmap, unsigned long gaddr)
915 pmdp = (pmd_t *) gmap_table_walk(gmap, gaddr, 1);
960 static int gmap_protect_pmd(struct gmap *gmap, unsigned long gaddr,
973 gmap_pmdp_xchg(gmap, pmdp, new, gaddr);
979 gmap_pmdp_xchg(gmap, pmdp, new, gaddr);
995 * @gaddr: virtual address in the guest address space
1005 static int gmap_protect_pte(struct gmap *gmap, unsigned long gaddr,
1016 ptep = pte_alloc_map_lock(gmap->mm, pmdp, gaddr, &ptl);
1023 rc = ptep_force_prot(gmap->mm, gaddr, ptep, prot, pbits);
1031 * @gaddr: virtual address in the guest address space
1037 * -EFAULT if gaddr is invalid (or mapping for shadows is missing).
1041 static int gmap_protect_range(struct gmap *gmap, unsigned long gaddr,
1051 pmdp = gmap_pmd_op_walk(gmap, gaddr);
1054 rc = gmap_protect_pte(gmap, gaddr, pmdp, prot,
1058 gaddr += PAGE_SIZE;
1061 rc = gmap_protect_pmd(gmap, gaddr, pmdp, prot,
1064 dist = HPAGE_SIZE - (gaddr & ~HPAGE_MASK);
1066 gaddr = (gaddr & HPAGE_MASK) + HPAGE_SIZE;
1076 vmaddr = __gmap_translate(gmap, gaddr);
1079 rc = gmap_pte_op_fixup(gmap, gaddr, vmaddr, prot);
1091 * @gaddr: virtual address in the guest address space
1101 int gmap_mprotect_notify(struct gmap *gmap, unsigned long gaddr,
1106 if ((gaddr & ~PAGE_MASK) || (len & ~PAGE_MASK) || gmap_is_shadow(gmap))
1111 rc = gmap_protect_range(gmap, gaddr, len, prot, GMAP_NOTIFY_MPROT);
1121 * @gaddr: virtual address in the guest address space
1130 int gmap_read_table(struct gmap *gmap, unsigned long gaddr, unsigned long *val)
1142 ptep = gmap_pte_op_walk(gmap, gaddr, &ptl);
1147 address += gaddr & ~PAGE_MASK;
1157 vmaddr = __gmap_translate(gmap, gaddr);
1162 rc = gmap_pte_op_fixup(gmap, gaddr, vmaddr, PROT_READ);
2175 unsigned long gaddr)
2190 if (!(sg->orig_asce & _ASCE_REAL_SPACE) && gaddr >= start &&
2191 gaddr < end) {
2239 unsigned long offset, gaddr = 0;
2251 gaddr = __gmap_segment_gaddr(table) + offset;
2260 gmap_shadow_notify(sg, vmaddr, gaddr);
2264 gmap_call_notifier(gmap, gaddr, gaddr + PAGE_SIZE - 1);
2271 unsigned long gaddr)
2274 gmap_call_notifier(gmap, gaddr, gaddr + HPAGE_SIZE - 1);
2282 * @gaddr: the affected guest address
2288 unsigned long gaddr)
2290 gaddr &= HPAGE_MASK;
2291 pmdp_notify_gmap(gmap, pmdp, gaddr);
2294 __pmdp_idte(gaddr, (pmd_t *)pmdp, IDTE_GUEST_ASCE, gmap->asce,
2297 __pmdp_idte(gaddr, (pmd_t *)pmdp, 0, 0, IDTE_GLOBAL);
2308 unsigned long gaddr;
2316 gaddr = __gmap_segment_gaddr((unsigned long *)pmdp);
2317 pmdp_notify_gmap(gmap, pmdp, gaddr);
2359 unsigned long *entry, gaddr;
2370 gaddr = __gmap_segment_gaddr(entry);
2371 pmdp_notify_gmap(gmap, pmdp, gaddr);
2375 __pmdp_idte(gaddr, pmdp, IDTE_GUEST_ASCE,
2378 __pmdp_idte(gaddr, pmdp, 0, 0, IDTE_LOCAL);
2394 unsigned long *entry, gaddr;
2405 gaddr = __gmap_segment_gaddr(entry);
2406 pmdp_notify_gmap(gmap, pmdp, gaddr);
2410 __pmdp_idte(gaddr, pmdp, IDTE_GUEST_ASCE,
2413 __pmdp_idte(gaddr, pmdp, 0, 0, IDTE_GLOBAL);
2428 * @gaddr: virtual address in the guest address space
2434 unsigned long gaddr)
2446 gmap_protect_pmd(gmap, gaddr, pmdp, PROT_READ, 0);
2454 * @gaddr: virtual address in the guest address space
2461 unsigned long gaddr, unsigned long vmaddr)
2468 pmdp = gmap_pmd_op_walk(gmap, gaddr);
2473 if (gmap_test_and_clear_dirty_pmd(gmap, pmdp, gaddr))