Changeset a35b458 in mainline for kernel/arch/ppc32/src/mm/pht.c
- Timestamp:
- 2018-03-02T20:10:49Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
-
kernel/arch/ppc32/src/mm/pht.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ppc32/src/mm/pht.c
r3061bc1 ra35b458 93 93 uint32_t page = (vaddr >> 12) & 0xffff; 94 94 uint32_t api = (vaddr >> 22) & 0x3f; 95 95 96 96 uint32_t vsid = sr_get(vaddr); 97 97 uint32_t sdr1 = sdr1_get(); 98 98 99 99 // FIXME: compute size of PHT exactly 100 100 phte_t *phte = (phte_t *) PA2KA(sdr1 & 0xffff0000); 101 101 102 102 /* Primary hash (xor) */ 103 103 uint32_t h = 0; … … 106 106 uint32_t i; 107 107 bool found = false; 108 108 109 109 /* Find colliding PTE in PTEG */ 110 110 for (i = 0; i < 8; i++) { … … 117 117 } 118 118 } 119 119 120 120 if (!found) { 121 121 /* Find unused PTE in PTEG */ … … 127 127 } 128 128 } 129 129 130 130 if (!found) { 131 131 /* Secondary hash (not) */ 132 132 uint32_t base2 = (~hash & 0x3ff) << 3; 133 133 134 134 /* Find colliding PTE in PTEG */ 135 135 for (i = 0; i < 8; i++) { … … 144 144 } 145 145 } 146 146 147 147 if (!found) { 148 148 /* Find unused PTE in PTEG */ … … 156 156 } 157 157 } 158 158 159 159 if (!found) 160 160 i = RANDI(seed) % 8; 161 161 } 162 162 163 163 phte[base + i].v = 1; 164 164 phte[base + i].vsid = vsid; … … 181 181 { 182 182 uintptr_t badvaddr; 183 183 184 184 if (n == VECTOR_DATA_STORAGE) 185 185 badvaddr = istate->dar; 186 186 else 187 187 badvaddr = istate->pc; 188 188 189 189 pte_t pte; 190 190 bool found = find_mapping_and_check(AS, badvaddr, 191 191 PF_ACCESS_READ /* FIXME */, istate, &pte); 192 192 193 193 if (found) { 194 194 /* Record access to PTE */ … … 201 201 { 202 202 uint32_t sdr1 = sdr1_get(); 203 203 204 204 // FIXME: compute size of PHT exactly 205 205 phte_t *phte = (phte_t *) PA2KA(sdr1 & 0xffff0000); 206 206 207 207 // FIXME: this invalidates all PHT entries, 208 208 // which is an overkill, invalidate only
Note:
See TracChangeset
for help on using the changeset viewer.
