| 925 | } |
| 926 | |
| 927 | static void |
| 928 | invlpg_pcid_handler(pmap_t smp_tlb_pmap, vm_offset_t smp_tlb_addr1) |
| 929 | { |
| 930 | uint64_t kcr3, ucr3; |
| 931 | uint32_t pcid; |
| 932 | |
| 933 | #ifdef COUNT_XINVLTLB_HITS |
| 934 | xhits_pg[PCPU_GET(cpuid)]++; |
| 935 | #endif /* COUNT_XINVLTLB_HITS */ |
| 936 | #ifdef COUNT_IPIS |
| 937 | (*ipi_invlpg_counts[PCPU_GET(cpuid)])++; |
| 938 | #endif /* COUNT_IPIS */ |
| 939 | |
| 940 | invlpg(smp_tlb_addr1); |
| 941 | if (smp_tlb_pmap == PCPU_GET(curpmap) && |
| 942 | (ucr3 = smp_tlb_pmap->pm_ucr3) != PMAP_NO_CR3 && |
| 943 | PCPU_GET(ucr3_load_mask) == PMAP_UCR3_NOMASK) { |
| 944 | pcid = smp_tlb_pmap->pm_pcids[PCPU_GET(cpuid)].pm_pcid; |
| 945 | kcr3 = smp_tlb_pmap->pm_cr3 | pcid | CR3_PCID_SAVE; |
| 946 | ucr3 |= pcid | PMAP_PCID_USER_PT | CR3_PCID_SAVE; |
| 947 | pmap_pti_pcid_invlpg(ucr3, kcr3, smp_tlb_addr1); |
| 948 | } |
| 949 | } |
| 950 | |
| 951 | static void |
| 952 | invlrng_handler(vm_offset_t smp_tlb_addr1, vm_offset_t smp_tlb_addr2) |
no test coverage detected