LCOV - code coverage report
Current view: top level - arch/um/include/asm - pgtable-3level.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 4 0.0 %
Date: 2023-04-06 08:38:28 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /*
       3             :  * Copyright 2003 PathScale Inc
       4             :  * Derived from include/asm-i386/pgtable.h
       5             :  */
       6             : 
       7             : #ifndef __UM_PGTABLE_3LEVEL_H
       8             : #define __UM_PGTABLE_3LEVEL_H
       9             : 
      10             : #include <asm-generic/pgtable-nopud.h>
      11             : 
      12             : /* PGDIR_SHIFT determines what a third-level page table entry can map */
      13             : 
      14             : #ifdef CONFIG_64BIT
      15             : #define PGDIR_SHIFT     30
      16             : #else
      17             : #define PGDIR_SHIFT     31
      18             : #endif
      19             : #define PGDIR_SIZE      (1UL << PGDIR_SHIFT)
      20             : #define PGDIR_MASK      (~(PGDIR_SIZE-1))
      21             : 
      22             : /* PMD_SHIFT determines the size of the area a second-level page table can
      23             :  * map
      24             :  */
      25             : 
      26             : #define PMD_SHIFT       21
      27             : #define PMD_SIZE        (1UL << PMD_SHIFT)
      28             : #define PMD_MASK        (~(PMD_SIZE-1))
      29             : 
      30             : /*
      31             :  * entries per page directory level
      32             :  */
      33             : 
      34             : #define PTRS_PER_PTE 512
      35             : #ifdef CONFIG_64BIT
      36             : #define PTRS_PER_PMD 512
      37             : #define PTRS_PER_PGD 512
      38             : #else
      39             : #define PTRS_PER_PMD 1024
      40             : #define PTRS_PER_PGD 1024
      41             : #endif
      42             : 
      43             : #define USER_PTRS_PER_PGD ((TASK_SIZE + (PGDIR_SIZE - 1)) / PGDIR_SIZE)
      44             : 
      45             : #define pte_ERROR(e) \
      46             :         printk("%s:%d: bad pte %p(%016lx).\n", __FILE__, __LINE__, &(e), \
      47             :                pte_val(e))
      48             : #define pmd_ERROR(e) \
      49             :         printk("%s:%d: bad pmd %p(%016lx).\n", __FILE__, __LINE__, &(e), \
      50             :                pmd_val(e))
      51             : #define pgd_ERROR(e) \
      52             :         printk("%s:%d: bad pgd %p(%016lx).\n", __FILE__, __LINE__, &(e), \
      53             :                pgd_val(e))
      54             : 
      55             : #define pud_none(x)     (!(pud_val(x) & ~_PAGE_NEWPAGE))
      56             : #define pud_bad(x)      ((pud_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
      57             : #define pud_present(x)  (pud_val(x) & _PAGE_PRESENT)
      58             : #define pud_populate(mm, pud, pmd) \
      59             :         set_pud(pud, __pud(_PAGE_TABLE + __pa(pmd)))
      60             : 
      61             : #define set_pud(pudptr, pudval) (*(pudptr) = (pudval))
      62             : 
      63             : static inline int pgd_newpage(pgd_t pgd)
      64             : {
      65             :         return(pgd_val(pgd) & _PAGE_NEWPAGE);
      66             : }
      67             : 
      68             : static inline void pgd_mkuptodate(pgd_t pgd) { pgd_val(pgd) &= ~_PAGE_NEWPAGE; }
      69             : 
      70             : #define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
      71             : 
      72             : static inline void pud_clear (pud_t *pud)
      73             : {
      74           0 :         set_pud(pud, __pud(_PAGE_NEWPAGE));
      75             : }
      76             : 
      77             : #define pud_page(pud) phys_to_page(pud_val(pud) & PAGE_MASK)
      78             : #define pud_pgtable(pud) ((pmd_t *) __va(pud_val(pud) & PAGE_MASK))
      79             : 
      80             : static inline unsigned long pte_pfn(pte_t pte)
      81             : {
      82           0 :         return phys_to_pfn(pte_val(pte));
      83             : }
      84             : 
      85             : static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
      86             : {
      87             :         pte_t pte;
      88           0 :         phys_t phys = pfn_to_phys(page_nr);
      89             : 
      90           0 :         pte_set_val(pte, phys, pgprot);
      91             :         return pte;
      92             : }
      93             : 
      94             : static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
      95             : {
      96             :         return __pmd((page_nr << PAGE_SHIFT) | pgprot_val(pgprot));
      97             : }
      98             : 
      99             : #endif
     100             : 

Generated by: LCOV version 1.14