Release 4.11 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 *);
struct page *page_table_alloc_pgste(struct mm_struct *mm);
void page_table_free(struct mm_struct *, unsigned long *);
void page_table_free_rcu(struct mmu_gather *, unsigned long *, unsigned long);
void page_table_free_pgste(struct page *page);
extern int page_table_allocate_pgste;
static inline void clear_table(unsigned long *s, unsigned long val, size_t n)
{
struct addrtype { char _[256]; };
int i;
for (i = 0; i < n; i += 256) {
*s = val;
asm volatile(
"mvc 8(248,%[s]),0(%[s])\n"
: "+m" (*(struct addrtype *) s)
: [s] "a" (s));
s += 256 / sizeof(long);
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Michael Holzheu | 32 | 48.48% | 1 | 20.00% |
Martin Schwidefsky | 29 | 43.94% | 2 | 40.00% |
Gerald Schaefer | 4 | 6.06% | 1 | 20.00% |
Linus Torvalds (pre-git) | 1 | 1.52% | 1 | 20.00% |
Total | 66 | 100.00% | 5 | 100.00% |
static inline void crst_table_init(unsigned long *crst, unsigned long entry)
{
clear_table(crst, entry, sizeof(unsigned long)*2048);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Martin Schwidefsky | 20 | 64.52% | 2 | 50.00% |
Linus Torvalds (pre-git) | 6 | 19.35% | 1 | 25.00% |
Gerald Schaefer | 5 | 16.13% | 1 | 25.00% |
Total | 31 | 100.00% | 4 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
Martin Schwidefsky | 50 | 100.00% | 3 | 100.00% |
Total | 50 | 100.00% | 3 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
Martin Schwidefsky | 45 | 100.00% | 2 | 100.00% |
Total | 45 | 100.00% | 2 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
Martin Schwidefsky | 58 | 80.56% | 4 | 66.67% |
Gerald Schaefer | 14 | 19.44% | 2 | 33.33% |
Total | 72 | 100.00% | 6 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
Martin Schwidefsky | 34 | 94.44% | 2 | 66.67% |
Benjamin Herrenschmidt | 2 | 5.56% | 1 | 33.33% |
Total | 36 | 100.00% | 3 | 100.00% |
static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
{
pgd_val(*pgd) = _REGION2_ENTRY | __pa(pud);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Martin Schwidefsky | 33 | 100.00% | 3 | 100.00% |
Total | 33 | 100.00% | 3 | 100.00% |
static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
{
pud_val(*pud) = _REGION3_ENTRY | __pa(pmd);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Martin Schwidefsky | 33 | 100.00% | 4 | 100.00% |
Total | 33 | 100.00% | 4 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
Martin Schwidefsky | 77 | 98.72% | 6 | 85.71% |
Gerald Schaefer | 1 | 1.28% | 1 | 14.29% |
Total | 78 | 100.00% | 7 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
Martin Schwidefsky | 48 | 96.00% | 2 | 66.67% |
Benjamin Herrenschmidt | 2 | 4.00% | 1 | 33.33% |
Total | 50 | 100.00% | 3 | 100.00% |
static inline void pmd_populate(struct mm_struct *mm,
pmd_t *pmd, pgtable_t pte)
{
pmd_val(*pmd) = _SEGMENT_ENTRY + __pa(pte);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Martin Schwidefsky | 16 | 50.00% | 4 | 57.14% |
Linus Torvalds | 12 | 37.50% | 2 | 28.57% |
Linus Torvalds (pre-git) | 4 | 12.50% | 1 | 14.29% |
Total | 32 | 100.00% | 7 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
Martin Schwidefsky | 593 | 82.82% | 21 | 72.41% |
Linus Torvalds (pre-git) | 34 | 4.75% | 1 | 3.45% |
Michael Holzheu | 32 | 4.47% | 1 | 3.45% |
Gerald Schaefer | 25 | 3.49% | 2 | 6.90% |
Linus Torvalds | 21 | 2.93% | 2 | 6.90% |
Benjamin Herrenschmidt | 10 | 1.40% | 1 | 3.45% |
Heiko Carstens | 1 | 0.14% | 1 | 3.45% |
Total | 716 | 100.00% | 29 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.