| 3119 | } |
| 3120 | |
| 3121 | void |
| 3122 | pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) |
| 3123 | { |
| 3124 | if (eva - sva >= PMAP_INVLPG_THRESHOLD) { |
| 3125 | pmap_invalidate_all(pmap); |
| 3126 | return; |
| 3127 | } |
| 3128 | |
| 3129 | if (pmap_type_guest(pmap)) { |
| 3130 | pmap_invalidate_ept(pmap); |
| 3131 | return; |
| 3132 | } |
| 3133 | |
| 3134 | KASSERT(pmap->pm_type == PT_X86, |
| 3135 | ("pmap_invalidate_range: invalid type %d", pmap->pm_type)); |
| 3136 | |
| 3137 | pmap_invalidate_preipi(pmap); |
| 3138 | smp_masked_invlpg_range(pmap_invalidate_cpu_mask(pmap), sva, eva, pmap, |
| 3139 | pmap_invalidate_range_curcpu_cb); |
| 3140 | } |
| 3141 | |
| 3142 | static inline void |
| 3143 | pmap_invalidate_all_pcid_cb(pmap_t pmap, bool invpcid_works1) |
no test coverage detected