cregit-Linux how code gets into the kernel

Release 4.7 arch/s390/include/asm/pgalloc.h

/*
 *  S390 version
 *    Copyright IBM Corp. 1999, 2000
 *    Author(s): Hartmut Penner (hp@de.ibm.com)
 *               Martin Schwidefsky (schwidefsky@de.ibm.com)
 *
 *  Derived from "include/asm-i386/pgalloc.h"
 *    Copyright (C) 1994  Linus Torvalds
 */

#ifndef _S390_PGALLOC_H

#define _S390_PGALLOC_H

#include <linux/threads.h>
#include <linux/gfp.h>
#include <linux/mm.h>

unsigned long *crst_table_alloc(struct mm_struct *);
void crst_table_free(struct mm_struct *, unsigned long *);

unsigned long *page_table_alloc(struct mm_struct *);
void page_table_free(struct mm_struct *, unsigned long *);
void page_table_free_rcu(struct mmu_gather *, unsigned long *, unsigned long);
extern int page_table_allocate_pgste;


static inline void clear_table(unsigned long *s, unsigned long val, size_t n) { typedef struct { char _[n]; } addrtype; *s = val; n = (n / 256) - 1; asm volatile( " mvc 8(248,%0),0(%0)\n" "0: mvc 256(256,%0),0(%0)\n" " la %0,256(%0)\n" " brct %1,0b\n" : "+a" (s), "+d" (n), "=m" (*(addrtype *) s) : "m" (*(addrtype *) s)); }

Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky3979.59%240.00%
gerald schaefergerald schaefer714.29%120.00%
pre-gitpre-git24.08%120.00%
heiko carstensheiko carstens12.04%120.00%
Total49100.00%5100.00%


static inline void crst_table_init(unsigned long *crst, unsigned long entry) { clear_table(crst, entry, sizeof(unsigned long)*2048); }

Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky2064.52%250.00%
pre-gitpre-git619.35%125.00%
gerald schaefergerald schaefer516.13%125.00%
Total31100.00%4100.00%


static inline unsigned long pgd_entry_type(struct mm_struct *mm) { if (mm->context.asce_limit <= (1UL << 31)) return _SEGMENT_ENTRY_EMPTY; if (mm->context.asce_limit <= (1UL << 42)) return _REGION3_ENTRY_EMPTY; return _REGION2_ENTRY_EMPTY; }

Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky50100.00%3100.00%
Total50100.00%3100.00%

int crst_table_upgrade(struct mm_struct *); void crst_table_downgrade(struct mm_struct *);
static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address) { unsigned long *table = crst_table_alloc(mm); if (table) crst_table_init(table, _REGION3_ENTRY_EMPTY); return (pud_t *) table; }

Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky45100.00%2100.00%
Total45100.00%2100.00%

#define pud_free(mm, pud) crst_table_free(mm, (unsigned long *) pud)
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr) { unsigned long *table = crst_table_alloc(mm); if (!table) return NULL; crst_table_init(table, _SEGMENT_ENTRY_EMPTY); if (!pgtable_pmd_page_ctor(virt_to_page(table))) { crst_table_free(mm, table); return NULL; } return (pmd_t *) table; }

Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky5880.56%466.67%
gerald schaefergerald schaefer1419.44%233.33%
Total72100.00%6100.00%


static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) { pgtable_pmd_page_dtor(virt_to_page(pmd)); crst_table_free(mm, (unsigned long *) pmd); }

Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky3494.44%266.67%
benjamin herrenschmidtbenjamin herrenschmidt25.56%133.33%
Total36100.00%3100.00%


static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud) { pgd_val(*pgd) = _REGION2_ENTRY | __pa(pud); }

Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky33100.00%3100.00%
Total33100.00%3100.00%


static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) { pud_val(*pud) = _REGION3_ENTRY | __pa(pmd); }

Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky33100.00%4100.00%
Total33100.00%4100.00%


static inline pgd_t *pgd_alloc(struct mm_struct *mm) { unsigned long *table = crst_table_alloc(mm); if (!table) return NULL; if (mm->context.asce_limit == (1UL << 31)) { /* Forking a compat process with 2 page table levels */ if (!pgtable_pmd_page_ctor(virt_to_page(table))) { crst_table_free(mm, table); return NULL; } } return (pgd_t *) table; }

Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky7798.72%685.71%
gerald schaefergerald schaefer11.28%114.29%
Total78100.00%7100.00%


static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) { if (mm->context.asce_limit == (1UL << 31)) pgtable_pmd_page_dtor(virt_to_page(pgd)); crst_table_free(mm, (unsigned long *) pgd); }

Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky4896.00%266.67%
benjamin herrenschmidtbenjamin herrenschmidt24.00%133.33%
Total50100.00%3100.00%


static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, pgtable_t pte) { pmd_val(*pmd) = _SEGMENT_ENTRY + __pa(pte); }

Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky1650.00%457.14%
linus torvaldslinus torvalds1237.50%228.57%
pre-gitpre-git412.50%114.29%
Total32100.00%7100.00%

#define pmd_populate_kernel(mm, pmd, pte) pmd_populate(mm, pmd, pte) #define pmd_pgtable(pmd) \ (pgtable_t)(pmd_val(pmd) & -sizeof(pte_t)*PTRS_PER_PTE) /* * page table entry allocation/free routines. */ #define pte_alloc_one_kernel(mm, vmaddr) ((pte_t *) page_table_alloc(mm)) #define pte_alloc_one(mm, vmaddr) ((pte_t *) page_table_alloc(mm)) #define pte_free_kernel(mm, pte) page_table_free(mm, (unsigned long *) pte) #define pte_free(mm, pte) page_table_free(mm, (unsigned long *) pte) extern void rcu_table_freelist_finish(void); #endif /* _S390_PGALLOC_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
martin schwidefskymartin schwidefsky58385.86%2071.43%
pre-gitpre-git355.15%13.57%
gerald schaefergerald schaefer284.12%27.14%
linus torvaldslinus torvalds213.09%27.14%
benjamin herrenschmidtbenjamin herrenschmidt101.47%13.57%
heiko carstensheiko carstens20.29%27.14%
Total679100.00%28100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}