* Create the PV entry for a 2MB page mapping. Always returns true unless the * flag PMAP_ENTER_NORECLAIM is specified. If that flag is specified, returns * false if the PV entry cannot be allocated without resorting to reclamation. */
| 2792 | * false if the PV entry cannot be allocated without resorting to reclamation. |
| 2793 | */ |
| 2794 | static bool |
| 2795 | pmap_pv_insert_l2(pmap_t pmap, vm_offset_t va, pd_entry_t l2e, u_int flags, |
| 2796 | struct rwlock **lockp) |
| 2797 | { |
| 2798 | struct md_page *pvh; |
| 2799 | pv_entry_t pv; |
| 2800 | vm_paddr_t pa; |
| 2801 | |
| 2802 | PMAP_LOCK_ASSERT(pmap, MA_OWNED); |
| 2803 | /* Pass NULL instead of the lock pointer to disable reclamation. */ |
| 2804 | if ((pv = get_pv_entry(pmap, (flags & PMAP_ENTER_NORECLAIM) != 0 ? |
| 2805 | NULL : lockp)) == NULL) |
| 2806 | return (false); |
| 2807 | pv->pv_va = va; |
| 2808 | pa = l2e & ~ATTR_MASK; |
| 2809 | CHANGE_PV_LIST_LOCK_TO_PHYS(lockp, pa); |
| 2810 | pvh = pa_to_pvh(pa); |
| 2811 | TAILQ_INSERT_TAIL(&pvh->pv_list, pv, pv_next); |
| 2812 | pvh->pv_gen++; |
| 2813 | return (true); |
| 2814 | } |
| 2815 | |
| 2816 | static void |
| 2817 | pmap_remove_kernel_l2(pmap_t pmap, pt_entry_t *l2, vm_offset_t va) |
no test coverage detected