|
@@ -358,6 +358,21 @@ static void walk_pud_level(struct seq_file *m, struct pg_state *st, pgd_t addr,
|
|
|
#define pgd_none(a) pud_none(__pud(pgd_val(a)))
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_X86_64
|
|
|
+static inline bool is_hypervisor_range(int idx)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * ffff800000000000 - ffff87ffffffffff is reserved for
|
|
|
+ * the hypervisor.
|
|
|
+ */
|
|
|
+ return paravirt_enabled() &&
|
|
|
+ (idx >= pgd_index(__PAGE_OFFSET) - 16) &&
|
|
|
+ (idx < pgd_index(__PAGE_OFFSET));
|
|
|
+}
|
|
|
+#else
|
|
|
+static inline bool is_hypervisor_range(int idx) { return false; }
|
|
|
+#endif
|
|
|
+
|
|
|
static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd,
|
|
|
bool checkwx)
|
|
|
{
|
|
@@ -381,7 +396,7 @@ static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd,
|
|
|
|
|
|
for (i = 0; i < PTRS_PER_PGD; i++) {
|
|
|
st.current_address = normalize_addr(i * PGD_LEVEL_MULT);
|
|
|
- if (!pgd_none(*start)) {
|
|
|
+ if (!pgd_none(*start) && !is_hypervisor_range(i)) {
|
|
|
if (pgd_large(*start) || !pgd_present(*start)) {
|
|
|
prot = pgd_flags(*start);
|
|
|
note_page(m, &st, __pgprot(prot), 1);
|