| 7024 | }; |
| 7025 | |
| 7026 | static void |
| 7027 | sysctl_kmaps_dump(struct sbuf *sb, struct pmap_kernel_map_range *range, |
| 7028 | vm_offset_t eva) |
| 7029 | { |
| 7030 | const char *mode; |
| 7031 | int index; |
| 7032 | |
| 7033 | if (eva <= range->sva) |
| 7034 | return; |
| 7035 | |
| 7036 | index = range->attrs & ATTR_S1_IDX_MASK; |
| 7037 | switch (index) { |
| 7038 | case ATTR_S1_IDX(VM_MEMATTR_DEVICE): |
| 7039 | mode = "DEV"; |
| 7040 | break; |
| 7041 | case ATTR_S1_IDX(VM_MEMATTR_UNCACHEABLE): |
| 7042 | mode = "UC"; |
| 7043 | break; |
| 7044 | case ATTR_S1_IDX(VM_MEMATTR_WRITE_BACK): |
| 7045 | mode = "WB"; |
| 7046 | break; |
| 7047 | case ATTR_S1_IDX(VM_MEMATTR_WRITE_THROUGH): |
| 7048 | mode = "WT"; |
| 7049 | break; |
| 7050 | default: |
| 7051 | printf( |
| 7052 | "%s: unknown memory type %x for range 0x%016lx-0x%016lx\n", |
| 7053 | __func__, index, range->sva, eva); |
| 7054 | mode = "??"; |
| 7055 | break; |
| 7056 | } |
| 7057 | |
| 7058 | sbuf_printf(sb, "0x%016lx-0x%016lx r%c%c%c %3s %d %d %d %d\n", |
| 7059 | range->sva, eva, |
| 7060 | (range->attrs & ATTR_S1_AP_RW_BIT) == ATTR_S1_AP_RW ? 'w' : '-', |
| 7061 | (range->attrs & ATTR_S1_PXN) != 0 ? '-' : 'x', |
| 7062 | (range->attrs & ATTR_S1_AP_USER) != 0 ? 'u' : 's', |
| 7063 | mode, range->l1blocks, range->l2blocks, range->l3contig, |
| 7064 | range->l3pages); |
| 7065 | |
| 7066 | /* Reset to sentinel value. */ |
| 7067 | range->sva = 0xfffffffffffffffful; |
| 7068 | } |
| 7069 | |
| 7070 | /* |
| 7071 | * Determine whether the attributes specified by a page table entry match those |
no test coverage detected