|
108 | 108 | /** End of direct physical mapping in Linux between 2.6.11 and 2.6.27 */
|
109 | 109 | #define LINUX_DIRECTMAP_END_2_6_11 0xffffc0ffffffffff
|
110 | 110 |
|
111 |
| -/** Start of direct physical mapping in Linux 2.6.27+ */ |
| 111 | +/** Start of direct physical mapping in Linux between 2.6.27 and 2.6.31 */ |
112 | 112 | #define LINUX_DIRECTMAP_START_2_6_27 0xffff880000000000
|
113 | 113 | /** End of direct physical mapping in Linux between 2.6.27 and 2.6.31 */
|
114 | 114 | #define LINUX_DIRECTMAP_END_2_6_27 0xffffc0ffffffffff
|
115 | 115 |
|
116 |
| -/** Start of direct physical mapping in Linux 2.6.31+ */ |
| 116 | +/** Start of direct physical mapping in Linux between 2.6.31 and 4.2 */ |
117 | 117 | #define LINUX_DIRECTMAP_START_2_6_31 LINUX_DIRECTMAP_START_2_6_27
|
118 |
| -/** End of direct physical mapping in Linux 2.6.31+ */ |
| 118 | +/** End of direct physical mapping in Linux between 2.6.31 and 4.2 */ |
119 | 119 | #define LINUX_DIRECTMAP_END_2_6_31 0xffffc7ffffffffff
|
120 | 120 |
|
121 |
| -/** Start of direct physical mapping with 5-level paging */ |
122 |
| -#define LINUX_DIRECTMAP_START_5LEVEL 0xff11000000000000 |
| 121 | +/** Start of direct physical mapping in Linux 4.2+ */ |
| 122 | +#define LINUX_DIRECTMAP_START_4_2 0xffff888000000000 |
| 123 | +/** End of direct physical mapping in Linux 4.2+ */ |
| 124 | +#define LINUX_DIRECTMAP_END_4_2 0xffffc8ffffffffff |
123 | 125 |
|
124 |
| -/** End of direct physical mapping with 5-level paging */ |
125 |
| -#define LINUX_DIRECTMAP_END_5LEVEL 0xff90ffffffffffff |
| 126 | +/** Start of direct physical mapping with 5-level paging before 4.2 */ |
| 127 | +#define LINUX_DIRECTMAP_START_5L 0xff10000000000000 |
| 128 | +/** End of direct physical mapping with 5-level paging before 4.2 */ |
| 129 | +#define LINUX_DIRECTMAP_END_5L 0xff8fffffffffffff |
| 130 | + |
| 131 | +/** Start of direct physical mapping with 5-level paging in 4.2+ */ |
| 132 | +#define LINUX_DIRECTMAP_START_5L_4_2 0xff11000000000000 |
| 133 | +/** End of direct physical mapping with 5-level paging in 4.2+ */ |
| 134 | +#define LINUX_DIRECTMAP_END_5L_4_2 0xff90ffffffffffff |
126 | 135 |
|
127 | 136 | /** AMD64 (Intel 64) page table step function.
|
128 | 137 | * @param step Current step state.
|
@@ -306,11 +315,11 @@ linux_directmap_by_pgt(struct sys_region *rgn,
|
306 | 315 | }
|
307 | 316 |
|
308 | 317 | if (step.meth->param.pgt.pf.nfields == 6) {
|
309 |
| - rgn->first = LINUX_DIRECTMAP_START_5LEVEL; |
310 |
| - end = LINUX_DIRECTMAP_END_5LEVEL; |
| 318 | + rgn->first = LINUX_DIRECTMAP_START_5L; |
| 319 | + end = LINUX_DIRECTMAP_END_5L_4_2; |
311 | 320 | } else {
|
312 | 321 | rgn->first = LINUX_DIRECTMAP_START_2_6_31;
|
313 |
| - end = LINUX_DIRECTMAP_END_2_6_31; |
| 322 | + end = LINUX_DIRECTMAP_END_4_2; |
314 | 323 | }
|
315 | 324 | status = lowest_mapped(&step, &rgn->first, end);
|
316 | 325 | if (status == ADDRXLAT_OK) {
|
@@ -408,6 +417,7 @@ linux_rdirect_map(struct os_init_data *ctl)
|
408 | 417 | * Try more recent kernels first.
|
409 | 418 | */
|
410 | 419 | static const addrxlat_addr_t fixed_loc[] = {
|
| 420 | + LINUX_DIRECTMAP_START_4_2, |
411 | 421 | LINUX_DIRECTMAP_START_2_6_31,
|
412 | 422 | LINUX_DIRECTMAP_START_2_6_11,
|
413 | 423 | LINUX_DIRECTMAP_START_2_6_0,
|
|
0 commit comments