cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

book3s64.c (2345B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * From split of dump_linuxpagetables.c
      4 * Copyright 2016, Rashmica Gupta, IBM Corp.
      5 *
      6 */
      7#include <linux/kernel.h>
      8#include <linux/pgtable.h>
      9
     10#include "ptdump.h"
     11
     12static const struct flag_info flag_array[] = {
     13	{
     14		.mask	= _PAGE_PRIVILEGED,
     15		.val	= 0,
     16		.set	= "user",
     17		.clear	= "    ",
     18	}, {
     19		.mask	= _PAGE_READ,
     20		.val	= _PAGE_READ,
     21		.set	= "r",
     22		.clear	= " ",
     23	}, {
     24		.mask	= _PAGE_WRITE,
     25		.val	= _PAGE_WRITE,
     26		.set	= "w",
     27		.clear	= " ",
     28	}, {
     29		.mask	= _PAGE_EXEC,
     30		.val	= _PAGE_EXEC,
     31		.set	= " X ",
     32		.clear	= "   ",
     33	}, {
     34		.mask	= _PAGE_PTE,
     35		.val	= _PAGE_PTE,
     36		.set	= "pte",
     37		.clear	= "   ",
     38	}, {
     39		.mask	= _PAGE_PRESENT,
     40		.val	= _PAGE_PRESENT,
     41		.set	= "valid",
     42		.clear	= "     ",
     43	}, {
     44		.mask	= _PAGE_PRESENT | _PAGE_INVALID,
     45		.val	= 0,
     46		.set	= "       ",
     47		.clear	= "present",
     48	}, {
     49		.mask	= H_PAGE_HASHPTE,
     50		.val	= H_PAGE_HASHPTE,
     51		.set	= "hpte",
     52		.clear	= "    ",
     53	}, {
     54		.mask	= _PAGE_DIRTY,
     55		.val	= _PAGE_DIRTY,
     56		.set	= "dirty",
     57		.clear	= "     ",
     58	}, {
     59		.mask	= _PAGE_ACCESSED,
     60		.val	= _PAGE_ACCESSED,
     61		.set	= "accessed",
     62		.clear	= "        ",
     63	}, {
     64		.mask	= _PAGE_NON_IDEMPOTENT,
     65		.val	= _PAGE_NON_IDEMPOTENT,
     66		.set	= "non-idempotent",
     67		.clear	= "              ",
     68	}, {
     69		.mask	= _PAGE_TOLERANT,
     70		.val	= _PAGE_TOLERANT,
     71		.set	= "tolerant",
     72		.clear	= "        ",
     73	}, {
     74		.mask	= H_PAGE_BUSY,
     75		.val	= H_PAGE_BUSY,
     76		.set	= "busy",
     77	}, {
     78#ifdef CONFIG_PPC_64K_PAGES
     79		.mask	= H_PAGE_COMBO,
     80		.val	= H_PAGE_COMBO,
     81		.set	= "combo",
     82	}, {
     83		.mask	= H_PAGE_4K_PFN,
     84		.val	= H_PAGE_4K_PFN,
     85		.set	= "4K_pfn",
     86	}, {
     87#else /* CONFIG_PPC_64K_PAGES */
     88		.mask	= H_PAGE_F_GIX,
     89		.val	= H_PAGE_F_GIX,
     90		.set	= "f_gix",
     91		.is_val	= true,
     92		.shift	= H_PAGE_F_GIX_SHIFT,
     93	}, {
     94		.mask	= H_PAGE_F_SECOND,
     95		.val	= H_PAGE_F_SECOND,
     96		.set	= "f_second",
     97	}, {
     98#endif /* CONFIG_PPC_64K_PAGES */
     99		.mask	= _PAGE_SPECIAL,
    100		.val	= _PAGE_SPECIAL,
    101		.set	= "special",
    102	}
    103};
    104
    105struct pgtable_level pg_level[5] = {
    106	{ /* pgd */
    107		.flag	= flag_array,
    108		.num	= ARRAY_SIZE(flag_array),
    109	}, { /* p4d */
    110		.flag	= flag_array,
    111		.num	= ARRAY_SIZE(flag_array),
    112	}, { /* pud */
    113		.flag	= flag_array,
    114		.num	= ARRAY_SIZE(flag_array),
    115	}, { /* pmd */
    116		.flag	= flag_array,
    117		.num	= ARRAY_SIZE(flag_array),
    118	}, { /* pte */
    119		.flag	= flag_array,
    120		.num	= ARRAY_SIZE(flag_array),
    121	},
    122};