cregit-Linux how code gets into the kernel

Release 4.12 include/linux/swapops.h

Directory: include/linux
#ifndef _LINUX_SWAPOPS_H

#define _LINUX_SWAPOPS_H

#include <linux/radix-tree.h>
#include <linux/bug.h>

/*
 * swapcache pages are stored in the swapper_space radix tree.  We want to
 * get good packing density in that tree, so the index should be dense in
 * the low-order bits.
 *
 * We arrange the `type' and `offset' fields so that `type' is at the seven
 * high-order bits of the swp_entry_t and `offset' is right-aligned in the
 * remaining bits.  Although `type' itself needs only five bits, we allow for
 * shmem/tmpfs to shift it all up a further two bits: see swp_to_radix_entry().
 *
 * swp_entry_t's are *never* stored anywhere in their arch-dependent format.
 */

#define SWP_TYPE_SHIFT(e)	((sizeof(e.val) * 8) - \
                        (MAX_SWAPFILES_SHIFT + RADIX_TREE_EXCEPTIONAL_SHIFT))

#define SWP_OFFSET_MASK(e)	((1UL << SWP_TYPE_SHIFT(e)) - 1)

/*
 * Store a type+offset into a swp_entry_t in an arch-independent format
 */

static inline swp_entry_t swp_entry(unsigned long type, pgoff_t offset) { swp_entry_t ret; ret.val = (type << SWP_TYPE_SHIFT(ret)) | (offset & SWP_OFFSET_MASK(ret)); return ret; }

Contributors

PersonTokensPropCommitsCommitProp
Andrew Morton42100.00%2100.00%
Total42100.00%2100.00%

/* * Extract the `type' field from a swp_entry_t. The swp_entry_t is in * arch-independent format */
static inline unsigned swp_type(swp_entry_t entry) { return (entry.val >> SWP_TYPE_SHIFT(entry)); }

Contributors

PersonTokensPropCommitsCommitProp
Andrew Morton22100.00%1100.00%
Total22100.00%1100.00%

/* * Extract the `offset' field from a swp_entry_t. The swp_entry_t is in * arch-independent format */
static inline pgoff_t swp_offset(swp_entry_t entry) { return entry.val & SWP_OFFSET_MASK(entry); }

Contributors

PersonTokensPropCommitsCommitProp
Andrew Morton20100.00%1100.00%
Total20100.00%1100.00%

#ifdef CONFIG_MMU /* check whether a pte points to a swap entry */
static inline int is_swap_pte(pte_t pte) { return !pte_none(pte) && !pte_present(pte); }

Contributors

PersonTokensPropCommitsCommitProp
Matt Mackall2295.65%150.00%
Mel Gorman14.35%150.00%
Total23100.00%2100.00%

#endif /* * Convert the arch-dependent pte representation of a swp_entry_t into an * arch-independent swp_entry_t. */
static inline swp_entry_t pte_to_swp_entry(pte_t pte) { swp_entry_t arch_entry; if (pte_swp_soft_dirty(pte)) pte = pte_swp_clear_soft_dirty(pte); arch_entry = __pte_to_swp_entry(pte); return swp_entry(__swp_type(arch_entry), __swp_offset(arch_entry)); }

Contributors

PersonTokensPropCommitsCommitProp
Andrew Morton3470.83%150.00%
Cyrill V. Gorcunov1429.17%150.00%
Total48100.00%2100.00%

/* * Convert the arch-independent representation of a swp_entry_t into the * arch-dependent pte representation. */
static inline pte_t swp_entry_to_pte(swp_entry_t entry) { swp_entry_t arch_entry; arch_entry = __swp_entry(swp_type(entry), swp_offset(entry)); return __swp_entry_to_pte(arch_entry); }

Contributors

PersonTokensPropCommitsCommitProp
Andrew Morton34100.00%1100.00%
Total34100.00%1100.00%


static inline swp_entry_t radix_to_swp_entry(void *arg) { swp_entry_t entry; entry.val = (unsigned long)arg >> RADIX_TREE_EXCEPTIONAL_SHIFT; return entry; }

Contributors

PersonTokensPropCommitsCommitProp
Hugh Dickins29100.00%1100.00%
Total29100.00%1100.00%


static inline void *swp_to_radix_entry(swp_entry_t entry) { unsigned long value; value = entry.val << RADIX_TREE_EXCEPTIONAL_SHIFT; return (void *)(value | RADIX_TREE_EXCEPTIONAL_ENTRY); }

Contributors

PersonTokensPropCommitsCommitProp
Hugh Dickins34100.00%1100.00%
Total34100.00%1100.00%

#ifdef CONFIG_MIGRATION
static inline swp_entry_t make_migration_entry(struct page *page, int write) { BUG_ON(!PageLocked(page)); return swp_entry(write ? SWP_MIGRATION_WRITE : SWP_MIGRATION_READ, page_to_pfn(page)); }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Lameter39100.00%1100.00%
Total39100.00%1100.00%


static inline int is_migration_entry(swp_entry_t entry) { return unlikely(swp_type(entry) == SWP_MIGRATION_READ || swp_type(entry) == SWP_MIGRATION_WRITE); }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Lameter28100.00%1100.00%
Total28100.00%1100.00%


static inline int is_write_migration_entry(swp_entry_t entry) { return unlikely(swp_type(entry) == SWP_MIGRATION_WRITE); }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Lameter21100.00%1100.00%
Total21100.00%1100.00%


static inline struct page *migration_entry_to_page(swp_entry_t entry) { struct page *p = pfn_to_page(swp_offset(entry)); /* * Any use of migration entries may only occur while the * corresponding page is locked */ BUG_ON(!PageLocked(p)); return p; }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Lameter38100.00%1100.00%
Total38100.00%1100.00%


static inline void make_migration_entry_read(swp_entry_t *entry) { *entry = swp_entry(SWP_MIGRATION_READ, swp_offset(*entry)); }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Lameter25100.00%1100.00%
Total25100.00%1100.00%

extern void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep, spinlock_t *ptl); extern void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, unsigned long address); extern void migration_entry_wait_huge(struct vm_area_struct *vma, struct mm_struct *mm, pte_t *pte); #else #define make_migration_entry(page, write) swp_entry(0, 0)
static inline int is_migration_entry(swp_entry_t swp) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Andrew Morton969.23%150.00%
Christoph Lameter430.77%150.00%
Total13100.00%2100.00%

#define migration_entry_to_page(swp) NULL
static inline void make_migration_entry_read(swp_entry_t *entryp) { }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Lameter10100.00%1100.00%
Total10100.00%1100.00%


static inline void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep, spinlock_t *ptl) { }

Contributors

PersonTokensPropCommitsCommitProp
Naoya Horiguchi19100.00%1100.00%
Total19100.00%1100.00%


static inline void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, unsigned long address) { }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Lameter19100.00%1100.00%
Total19100.00%1100.00%


static inline void migration_entry_wait_huge(struct vm_area_struct *vma, struct mm_struct *mm, pte_t *pte) { }

Contributors

PersonTokensPropCommitsCommitProp
Naoya Horiguchi1575.00%150.00%
Kirill A. Shutemov525.00%150.00%
Total20100.00%2100.00%


static inline int is_write_migration_entry(swp_entry_t entry) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Christoph Lameter13100.00%1100.00%
Total13100.00%1100.00%

#endif #ifdef CONFIG_MEMORY_FAILURE extern atomic_long_t num_poisoned_pages __read_mostly; /* * Support for hardware poisoned pages */
static inline swp_entry_t make_hwpoison_entry(struct page *page) { BUG_ON(!PageLocked(page)); return swp_entry(SWP_HWPOISON, page_to_pfn(page)); }

Contributors

PersonTokensPropCommitsCommitProp
Andi Kleen32100.00%1100.00%
Total32100.00%1100.00%


static inline int is_hwpoison_entry(swp_entry_t entry) { return swp_type(entry) == SWP_HWPOISON; }

Contributors

PersonTokensPropCommitsCommitProp
Andi Kleen18100.00%1100.00%
Total18100.00%1100.00%


static inline bool test_set_page_hwpoison(struct page *page) { return TestSetPageHWPoison(page); }

Contributors

PersonTokensPropCommitsCommitProp
Wanpeng Li18100.00%1100.00%
Total18100.00%1100.00%


static inline void num_poisoned_pages_inc(void) { atomic_long_inc(&num_poisoned_pages); }

Contributors

PersonTokensPropCommitsCommitProp
Naoya Horiguchi15100.00%1100.00%
Total15100.00%1100.00%


static inline void num_poisoned_pages_dec(void) { atomic_long_dec(&num_poisoned_pages); }

Contributors

PersonTokensPropCommitsCommitProp
Naoya Horiguchi15100.00%1100.00%
Total15100.00%1100.00%


static inline void num_poisoned_pages_add(long num) { atomic_long_add(num, &num_poisoned_pages); }

Contributors

PersonTokensPropCommitsCommitProp
Naoya Horiguchi18100.00%1100.00%
Total18100.00%1100.00%


static inline void num_poisoned_pages_sub(long num) { atomic_long_sub(num, &num_poisoned_pages); }

Contributors

PersonTokensPropCommitsCommitProp
Naoya Horiguchi18100.00%1100.00%
Total18100.00%1100.00%

#else
static inline swp_entry_t make_hwpoison_entry(struct page *page) { return swp_entry(0, 0); }

Contributors

PersonTokensPropCommitsCommitProp
Andi Kleen20100.00%1100.00%
Total20100.00%1100.00%


static inline int is_hwpoison_entry(swp_entry_t swp) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Andi Kleen13100.00%1100.00%
Total13100.00%1100.00%


static inline bool test_set_page_hwpoison(struct page *page) { return false; }

Contributors

PersonTokensPropCommitsCommitProp
Wanpeng Li15100.00%1100.00%
Total15100.00%1100.00%


static inline void num_poisoned_pages_inc(void) { }

Contributors

PersonTokensPropCommitsCommitProp
Wanpeng Li8100.00%1100.00%
Total8100.00%1100.00%

#endif #if defined(CONFIG_MEMORY_FAILURE) || defined(CONFIG_MIGRATION)
static inline int non_swap_entry(swp_entry_t entry) { return swp_type(entry) >= MAX_SWAPFILES; }

Contributors

PersonTokensPropCommitsCommitProp
Andi Kleen18100.00%1100.00%
Total18100.00%1100.00%

#else
static inline int non_swap_entry(swp_entry_t entry) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Andi Kleen13100.00%1100.00%
Total13100.00%1100.00%

#endif #endif /* _LINUX_SWAPOPS_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Christoph Lameter23827.51%15.56%
Andrew Morton17820.58%316.67%
Naoya Horiguchi13715.84%316.67%
Andi Kleen13715.84%15.56%
Hugh Dickins778.90%211.11%
Wanpeng Li414.74%15.56%
Matt Mackall283.24%211.11%
Cyrill V. Gorcunov141.62%15.56%
Kirill A. Shutemov101.16%15.56%
Paul Gortmaker30.35%15.56%
Anton Blanchard10.12%15.56%
Mel Gorman10.12%15.56%
Total865100.00%18100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.