Lines Matching refs:pmdp
912 pmd_t *pmdp; in gmap_pmd_op_walk() local
915 pmdp = (pmd_t *) gmap_table_walk(gmap, gaddr, 1); in gmap_pmd_op_walk()
916 if (!pmdp) in gmap_pmd_op_walk()
921 return pmd_none(*pmdp) ? NULL : pmdp; in gmap_pmd_op_walk()
924 if (pmd_none(*pmdp)) { in gmap_pmd_op_walk()
930 if (!pmd_large(*pmdp)) in gmap_pmd_op_walk()
932 return pmdp; in gmap_pmd_op_walk()
940 static inline void gmap_pmd_op_end(struct gmap *gmap, pmd_t *pmdp) in gmap_pmd_op_end() argument
942 if (pmd_large(*pmdp)) in gmap_pmd_op_end()
961 pmd_t *pmdp, int prot, unsigned long bits) in gmap_protect_pmd() argument
963 int pmd_i = pmd_val(*pmdp) & _SEGMENT_ENTRY_INVALID; in gmap_protect_pmd()
964 int pmd_p = pmd_val(*pmdp) & _SEGMENT_ENTRY_PROTECT; in gmap_protect_pmd()
965 pmd_t new = *pmdp; in gmap_protect_pmd()
973 gmap_pmdp_xchg(gmap, pmdp, new, gaddr); in gmap_protect_pmd()
979 gmap_pmdp_xchg(gmap, pmdp, new, gaddr); in gmap_protect_pmd()
983 pmd_val(*pmdp) |= _SEGMENT_ENTRY_GMAP_IN; in gmap_protect_pmd()
1006 pmd_t *pmdp, int prot, unsigned long bits) in gmap_protect_pte() argument
1013 if (pmd_val(*pmdp) & _SEGMENT_ENTRY_INVALID) in gmap_protect_pte()
1016 ptep = pte_alloc_map_lock(gmap->mm, pmdp, gaddr, &ptl); in gmap_protect_pte()
1045 pmd_t *pmdp; in gmap_protect_range() local
1051 pmdp = gmap_pmd_op_walk(gmap, gaddr); in gmap_protect_range()
1052 if (pmdp) { in gmap_protect_range()
1053 if (!pmd_large(*pmdp)) { in gmap_protect_range()
1054 rc = gmap_protect_pte(gmap, gaddr, pmdp, prot, in gmap_protect_range()
1061 rc = gmap_protect_pmd(gmap, gaddr, pmdp, prot, in gmap_protect_range()
1069 gmap_pmd_op_end(gmap, pmdp); in gmap_protect_range()
2270 static void pmdp_notify_gmap(struct gmap *gmap, pmd_t *pmdp, in pmdp_notify_gmap() argument
2273 pmd_val(*pmdp) &= ~_SEGMENT_ENTRY_GMAP_IN; in pmdp_notify_gmap()
2287 static void gmap_pmdp_xchg(struct gmap *gmap, pmd_t *pmdp, pmd_t new, in gmap_pmdp_xchg() argument
2291 pmdp_notify_gmap(gmap, pmdp, gaddr); in gmap_pmdp_xchg()
2294 __pmdp_idte(gaddr, (pmd_t *)pmdp, IDTE_GUEST_ASCE, gmap->asce, in gmap_pmdp_xchg()
2297 __pmdp_idte(gaddr, (pmd_t *)pmdp, 0, 0, IDTE_GLOBAL); in gmap_pmdp_xchg()
2299 __pmdp_csp(pmdp); in gmap_pmdp_xchg()
2300 *pmdp = new; in gmap_pmdp_xchg()
2306 pmd_t *pmdp; in gmap_pmdp_clear() local
2313 pmdp = (pmd_t *)radix_tree_delete(&gmap->host_to_guest, in gmap_pmdp_clear()
2315 if (pmdp) { in gmap_pmdp_clear()
2316 gaddr = __gmap_segment_gaddr((unsigned long *)pmdp); in gmap_pmdp_clear()
2317 pmdp_notify_gmap(gmap, pmdp, gaddr); in gmap_pmdp_clear()
2318 WARN_ON(pmd_val(*pmdp) & ~(_SEGMENT_ENTRY_HARDWARE_BITS_LARGE | in gmap_pmdp_clear()
2321 __pmdp_csp(pmdp); in gmap_pmdp_clear()
2322 pmd_val(*pmdp) = _SEGMENT_ENTRY_EMPTY; in gmap_pmdp_clear()
2361 pmd_t *pmdp; in gmap_pmdp_idte_local() local
2369 pmdp = (pmd_t *)entry; in gmap_pmdp_idte_local()
2371 pmdp_notify_gmap(gmap, pmdp, gaddr); in gmap_pmdp_idte_local()
2375 __pmdp_idte(gaddr, pmdp, IDTE_GUEST_ASCE, in gmap_pmdp_idte_local()
2378 __pmdp_idte(gaddr, pmdp, 0, 0, IDTE_LOCAL); in gmap_pmdp_idte_local()
2396 pmd_t *pmdp; in gmap_pmdp_idte_global() local
2404 pmdp = (pmd_t *)entry; in gmap_pmdp_idte_global()
2406 pmdp_notify_gmap(gmap, pmdp, gaddr); in gmap_pmdp_idte_global()
2410 __pmdp_idte(gaddr, pmdp, IDTE_GUEST_ASCE, in gmap_pmdp_idte_global()
2413 __pmdp_idte(gaddr, pmdp, 0, 0, IDTE_GLOBAL); in gmap_pmdp_idte_global()
2415 __pmdp_csp(pmdp); in gmap_pmdp_idte_global()
2433 static bool gmap_test_and_clear_dirty_pmd(struct gmap *gmap, pmd_t *pmdp, in gmap_test_and_clear_dirty_pmd() argument
2436 if (pmd_val(*pmdp) & _SEGMENT_ENTRY_INVALID) in gmap_test_and_clear_dirty_pmd()
2440 if (pmd_val(*pmdp) & _SEGMENT_ENTRY_PROTECT && in gmap_test_and_clear_dirty_pmd()
2441 !(pmd_val(*pmdp) & _SEGMENT_ENTRY_GMAP_UC)) in gmap_test_and_clear_dirty_pmd()
2445 pmd_val(*pmdp) &= ~_SEGMENT_ENTRY_GMAP_UC; in gmap_test_and_clear_dirty_pmd()
2446 gmap_protect_pmd(gmap, gaddr, pmdp, PROT_READ, 0); in gmap_test_and_clear_dirty_pmd()
2464 pmd_t *pmdp; in gmap_sync_dirty_log_pmd() local
2468 pmdp = gmap_pmd_op_walk(gmap, gaddr); in gmap_sync_dirty_log_pmd()
2469 if (!pmdp) in gmap_sync_dirty_log_pmd()
2472 if (pmd_large(*pmdp)) { in gmap_sync_dirty_log_pmd()
2473 if (gmap_test_and_clear_dirty_pmd(gmap, pmdp, gaddr)) in gmap_sync_dirty_log_pmd()
2477 ptep = pte_alloc_map_lock(gmap->mm, pmdp, vmaddr, &ptl); in gmap_sync_dirty_log_pmd()
2485 gmap_pmd_op_end(gmap, pmdp); in gmap_sync_dirty_log_pmd()