mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge branch 'akpm' (patches from Andrew)
Merge second patchbomb from Andrew Morton:
- the rest of MM
- various misc bits
- add ability to run /sbin/reboot at reboot time
- printk/vsprintf changes
- fiddle with seq_printf() return value
* akpm: (114 commits)
parisc: remove use of seq_printf return value
lru_cache: remove use of seq_printf return value
tracing: remove use of seq_printf return value
cgroup: remove use of seq_printf return value
proc: remove use of seq_printf return value
s390: remove use of seq_printf return value
cris fasttimer: remove use of seq_printf return value
cris: remove use of seq_printf return value
openrisc: remove use of seq_printf return value
ARM: plat-pxa: remove use of seq_printf return value
nios2: cpuinfo: remove use of seq_printf return value
microblaze: mb: remove use of seq_printf return value
ipc: remove use of seq_printf return value
rtc: remove use of seq_printf return value
power: wakeup: remove use of seq_printf return value
x86: mtrr: if: remove use of seq_printf return value
linux/bitmap.h: improve BITMAP_{LAST,FIRST}_WORD_MASK
MAINTAINERS: CREDITS: remove Stefano Brivio from B43
.mailmap: add Ricardo Ribalda
CREDITS: add Ricardo Ribalda Delgado
...
This commit is contained in:
commit
eea3a00264
136 changed files with 3299 additions and 1834 deletions
|
|
@ -4,44 +4,6 @@
|
|||
#include <uapi/linux/a.out.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#if defined (M_OLDSUN2)
|
||||
#else
|
||||
#endif
|
||||
#if defined (M_68010)
|
||||
#else
|
||||
#endif
|
||||
#if defined (M_68020)
|
||||
#else
|
||||
#endif
|
||||
#if defined (M_SPARC)
|
||||
#else
|
||||
#endif
|
||||
#if !defined (N_MAGIC)
|
||||
#endif
|
||||
#if !defined (N_BADMAG)
|
||||
#endif
|
||||
#if !defined (N_TXTOFF)
|
||||
#endif
|
||||
#if !defined (N_DATOFF)
|
||||
#endif
|
||||
#if !defined (N_TRELOFF)
|
||||
#endif
|
||||
#if !defined (N_DRELOFF)
|
||||
#endif
|
||||
#if !defined (N_SYMOFF)
|
||||
#endif
|
||||
#if !defined (N_STROFF)
|
||||
#endif
|
||||
#if !defined (N_TXTADDR)
|
||||
#endif
|
||||
#if defined(vax) || defined(hp300) || defined(pyr)
|
||||
#endif
|
||||
#ifdef sony
|
||||
#endif /* Sony. */
|
||||
#ifdef is68k
|
||||
#endif
|
||||
#if defined(m68k) && defined(PORTAR)
|
||||
#endif
|
||||
#ifdef linux
|
||||
#include <asm/page.h>
|
||||
#if defined(__i386__) || defined(__mc68000__)
|
||||
|
|
@ -51,34 +13,5 @@
|
|||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#ifndef N_DATADDR
|
||||
#endif
|
||||
#if !defined (N_BSSADDR)
|
||||
#endif
|
||||
#if !defined (N_NLIST_DECLARED)
|
||||
#endif /* no N_NLIST_DECLARED. */
|
||||
#if !defined (N_UNDF)
|
||||
#endif
|
||||
#if !defined (N_ABS)
|
||||
#endif
|
||||
#if !defined (N_TEXT)
|
||||
#endif
|
||||
#if !defined (N_DATA)
|
||||
#endif
|
||||
#if !defined (N_BSS)
|
||||
#endif
|
||||
#if !defined (N_FN)
|
||||
#endif
|
||||
#if !defined (N_EXT)
|
||||
#endif
|
||||
#if !defined (N_TYPE)
|
||||
#endif
|
||||
#if !defined (N_STAB)
|
||||
#endif
|
||||
#if !defined (N_RELOCATION_INFO_DECLARED)
|
||||
#ifdef NS32K
|
||||
#else
|
||||
#endif
|
||||
#endif /* no N_RELOCATION_INFO_DECLARED. */
|
||||
#endif /*__ASSEMBLY__ */
|
||||
#endif /* __A_OUT_GNU_H__ */
|
||||
|
|
|
|||
|
|
@ -172,12 +172,8 @@ extern unsigned int bitmap_ord_to_pos(const unsigned long *bitmap, unsigned int
|
|||
extern int bitmap_print_to_pagebuf(bool list, char *buf,
|
||||
const unsigned long *maskp, int nmaskbits);
|
||||
|
||||
#define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) % BITS_PER_LONG))
|
||||
#define BITMAP_LAST_WORD_MASK(nbits) \
|
||||
( \
|
||||
((nbits) % BITS_PER_LONG) ? \
|
||||
(1UL<<((nbits) % BITS_PER_LONG))-1 : ~0UL \
|
||||
)
|
||||
#define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1)))
|
||||
#define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1)))
|
||||
|
||||
#define small_const_nbits(nbits) \
|
||||
(__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG)
|
||||
|
|
|
|||
|
|
@ -205,6 +205,7 @@ static inline kernel_cap_t cap_raise_nfsd_set(const kernel_cap_t a,
|
|||
cap_intersect(permitted, __cap_nfsd_set));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MULTIUSER
|
||||
extern bool has_capability(struct task_struct *t, int cap);
|
||||
extern bool has_ns_capability(struct task_struct *t,
|
||||
struct user_namespace *ns, int cap);
|
||||
|
|
@ -213,6 +214,34 @@ extern bool has_ns_capability_noaudit(struct task_struct *t,
|
|||
struct user_namespace *ns, int cap);
|
||||
extern bool capable(int cap);
|
||||
extern bool ns_capable(struct user_namespace *ns, int cap);
|
||||
#else
|
||||
static inline bool has_capability(struct task_struct *t, int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
static inline bool has_ns_capability(struct task_struct *t,
|
||||
struct user_namespace *ns, int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
static inline bool has_capability_noaudit(struct task_struct *t, int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
static inline bool has_ns_capability_noaudit(struct task_struct *t,
|
||||
struct user_namespace *ns, int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
static inline bool capable(int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
static inline bool ns_capable(struct user_namespace *ns, int cap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif /* CONFIG_MULTIUSER */
|
||||
extern bool capable_wrt_inode_uidgid(const struct inode *inode, int cap);
|
||||
extern bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap);
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ extern int sysctl_compaction_handler(struct ctl_table *table, int write,
|
|||
extern int sysctl_extfrag_threshold;
|
||||
extern int sysctl_extfrag_handler(struct ctl_table *table, int write,
|
||||
void __user *buffer, size_t *length, loff_t *ppos);
|
||||
extern int sysctl_compact_unevictable_allowed;
|
||||
|
||||
extern int fragmentation_index(struct zone *zone, unsigned int order);
|
||||
extern unsigned long try_to_compact_pages(gfp_t gfp_mask, unsigned int order,
|
||||
|
|
|
|||
|
|
@ -62,9 +62,27 @@ do { \
|
|||
groups_free(group_info); \
|
||||
} while (0)
|
||||
|
||||
extern struct group_info *groups_alloc(int);
|
||||
extern struct group_info init_groups;
|
||||
#ifdef CONFIG_MULTIUSER
|
||||
extern struct group_info *groups_alloc(int);
|
||||
extern void groups_free(struct group_info *);
|
||||
|
||||
extern int in_group_p(kgid_t);
|
||||
extern int in_egroup_p(kgid_t);
|
||||
#else
|
||||
static inline void groups_free(struct group_info *group_info)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int in_group_p(kgid_t grp)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
static inline int in_egroup_p(kgid_t grp)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
extern int set_current_groups(struct group_info *);
|
||||
extern void set_groups(struct cred *, struct group_info *);
|
||||
extern int groups_search(const struct group_info *, kgid_t);
|
||||
|
|
@ -74,9 +92,6 @@ extern bool may_setgroups(void);
|
|||
#define GROUP_AT(gi, i) \
|
||||
((gi)->blocks[(i) / NGROUPS_PER_BLOCK][(i) % NGROUPS_PER_BLOCK])
|
||||
|
||||
extern int in_group_p(kgid_t);
|
||||
extern int in_egroup_p(kgid_t);
|
||||
|
||||
/*
|
||||
* The security context of a task
|
||||
*
|
||||
|
|
|
|||
|
|
@ -2615,6 +2615,7 @@ int dax_clear_blocks(struct inode *, sector_t block, long size);
|
|||
int dax_zero_page_range(struct inode *, loff_t from, unsigned len, get_block_t);
|
||||
int dax_truncate_page(struct inode *, loff_t from, get_block_t);
|
||||
int dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t);
|
||||
int dax_pfn_mkwrite(struct vm_area_struct *, struct vm_fault *);
|
||||
#define dax_mkwrite(vma, vmf, gb) dax_fault(vma, vmf, gb)
|
||||
|
||||
#ifdef CONFIG_BLOCK
|
||||
|
|
@ -2679,7 +2680,6 @@ void inode_sub_bytes(struct inode *inode, loff_t bytes);
|
|||
loff_t inode_get_bytes(struct inode *inode);
|
||||
void inode_set_bytes(struct inode *inode, loff_t bytes);
|
||||
|
||||
extern int vfs_readdir(struct file *, filldir_t, void *);
|
||||
extern int iterate_dir(struct file *, struct dir_context *);
|
||||
|
||||
extern int vfs_stat(const char __user *, struct kstat *);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,13 @@ struct mmu_gather;
|
|||
struct hugepage_subpool {
|
||||
spinlock_t lock;
|
||||
long count;
|
||||
long max_hpages, used_hpages;
|
||||
long max_hpages; /* Maximum huge pages or -1 if no maximum. */
|
||||
long used_hpages; /* Used count against maximum, includes */
|
||||
/* both alloced and reserved pages. */
|
||||
struct hstate *hstate;
|
||||
long min_hpages; /* Minimum huge pages or -1 if no minimum. */
|
||||
long rsv_hpages; /* Pages reserved against global pool to */
|
||||
/* sasitfy minimum size. */
|
||||
};
|
||||
|
||||
struct resv_map {
|
||||
|
|
@ -38,11 +44,10 @@ extern int hugetlb_max_hstate __read_mostly;
|
|||
#define for_each_hstate(h) \
|
||||
for ((h) = hstates; (h) < &hstates[hugetlb_max_hstate]; (h)++)
|
||||
|
||||
struct hugepage_subpool *hugepage_new_subpool(long nr_blocks);
|
||||
struct hugepage_subpool *hugepage_new_subpool(struct hstate *h, long max_hpages,
|
||||
long min_hpages);
|
||||
void hugepage_put_subpool(struct hugepage_subpool *spool);
|
||||
|
||||
int PageHuge(struct page *page);
|
||||
|
||||
void reset_vma_resv_huge_pages(struct vm_area_struct *vma);
|
||||
int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
|
||||
int hugetlb_overcommit_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
|
||||
|
|
@ -79,7 +84,6 @@ void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed);
|
|||
int dequeue_hwpoisoned_huge_page(struct page *page);
|
||||
bool isolate_huge_page(struct page *page, struct list_head *list);
|
||||
void putback_active_hugepage(struct page *page);
|
||||
bool is_hugepage_active(struct page *page);
|
||||
void free_huge_page(struct page *page);
|
||||
|
||||
#ifdef CONFIG_ARCH_WANT_HUGE_PMD_SHARE
|
||||
|
|
@ -109,11 +113,6 @@ unsigned long hugetlb_change_protection(struct vm_area_struct *vma,
|
|||
|
||||
#else /* !CONFIG_HUGETLB_PAGE */
|
||||
|
||||
static inline int PageHuge(struct page *page)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void reset_vma_resv_huge_pages(struct vm_area_struct *vma)
|
||||
{
|
||||
}
|
||||
|
|
@ -152,7 +151,6 @@ static inline bool isolate_huge_page(struct page *page, struct list_head *list)
|
|||
return false;
|
||||
}
|
||||
#define putback_active_hugepage(p) do {} while (0)
|
||||
#define is_hugepage_active(x) false
|
||||
|
||||
static inline unsigned long hugetlb_change_protection(struct vm_area_struct *vma,
|
||||
unsigned long address, unsigned long end, pgprot_t newprot)
|
||||
|
|
|
|||
|
|
@ -196,10 +196,8 @@ extern struct resource * __request_region(struct resource *,
|
|||
|
||||
/* Compatibility cruft */
|
||||
#define release_region(start,n) __release_region(&ioport_resource, (start), (n))
|
||||
#define check_mem_region(start,n) __check_region(&iomem_resource, (start), (n))
|
||||
#define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n))
|
||||
|
||||
extern int __check_region(struct resource *, resource_size_t, resource_size_t);
|
||||
extern void __release_region(struct resource *, resource_size_t,
|
||||
resource_size_t);
|
||||
#ifdef CONFIG_MEMORY_HOTREMOVE
|
||||
|
|
@ -207,12 +205,6 @@ extern int release_mem_region_adjustable(struct resource *, resource_size_t,
|
|||
resource_size_t);
|
||||
#endif
|
||||
|
||||
static inline int __deprecated check_region(resource_size_t s,
|
||||
resource_size_t n)
|
||||
{
|
||||
return __check_region(&ioport_resource, s, n);
|
||||
}
|
||||
|
||||
/* Wrappers for managed devices */
|
||||
struct device;
|
||||
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ void kasan_poison_object_data(struct kmem_cache *cache, void *object);
|
|||
|
||||
void kasan_kmalloc_large(const void *ptr, size_t size);
|
||||
void kasan_kfree_large(const void *ptr);
|
||||
void kasan_kfree(void *ptr);
|
||||
void kasan_kmalloc(struct kmem_cache *s, const void *object, size_t size);
|
||||
void kasan_krealloc(const void *object, size_t new_size);
|
||||
|
||||
|
|
@ -71,6 +72,7 @@ static inline void kasan_poison_object_data(struct kmem_cache *cache,
|
|||
|
||||
static inline void kasan_kmalloc_large(void *ptr, size_t size) {}
|
||||
static inline void kasan_kfree_large(const void *ptr) {}
|
||||
static inline void kasan_kfree(void *ptr) {}
|
||||
static inline void kasan_kmalloc(struct kmem_cache *s, const void *object,
|
||||
size_t size) {}
|
||||
static inline void kasan_krealloc(const void *object, size_t new_size) {}
|
||||
|
|
|
|||
|
|
@ -35,18 +35,6 @@ static inline void ksm_exit(struct mm_struct *mm)
|
|||
__ksm_exit(mm);
|
||||
}
|
||||
|
||||
/*
|
||||
* A KSM page is one of those write-protected "shared pages" or "merged pages"
|
||||
* which KSM maps into multiple mms, wherever identical anonymous page content
|
||||
* is found in VM_MERGEABLE vmas. It's a PageAnon page, pointing not to any
|
||||
* anon_vma, but to that page's node of the stable tree.
|
||||
*/
|
||||
static inline int PageKsm(struct page *page)
|
||||
{
|
||||
return ((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) ==
|
||||
(PAGE_MAPPING_ANON | PAGE_MAPPING_KSM);
|
||||
}
|
||||
|
||||
static inline struct stable_node *page_stable_node(struct page *page)
|
||||
{
|
||||
return PageKsm(page) ? page_rmapping(page) : NULL;
|
||||
|
|
@ -87,11 +75,6 @@ static inline void ksm_exit(struct mm_struct *mm)
|
|||
{
|
||||
}
|
||||
|
||||
static inline int PageKsm(struct page *page)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
static inline int ksm_madvise(struct vm_area_struct *vma, unsigned long start,
|
||||
unsigned long end, int advice, unsigned long *vm_flags)
|
||||
|
|
|
|||
|
|
@ -36,7 +36,8 @@ extern void mempool_free(void *element, mempool_t *pool);
|
|||
|
||||
/*
|
||||
* A mempool_alloc_t and mempool_free_t that get the memory from
|
||||
* a slab that is passed in through pool_data.
|
||||
* a slab cache that is passed in through pool_data.
|
||||
* Note: the slab cache may not have a ctor function.
|
||||
*/
|
||||
void *mempool_alloc_slab(gfp_t gfp_mask, void *pool_data);
|
||||
void mempool_free_slab(void *element, void *pool_data);
|
||||
|
|
|
|||
|
|
@ -251,6 +251,9 @@ struct vm_operations_struct {
|
|||
* writable, if an error is returned it will cause a SIGBUS */
|
||||
int (*page_mkwrite)(struct vm_area_struct *vma, struct vm_fault *vmf);
|
||||
|
||||
/* same as page_mkwrite when using VM_PFNMAP|VM_MIXEDMAP */
|
||||
int (*pfn_mkwrite)(struct vm_area_struct *vma, struct vm_fault *vmf);
|
||||
|
||||
/* called by access_process_vm when get_user_pages() fails, typically
|
||||
* for use by special VMAs that can switch between memory and hardware
|
||||
*/
|
||||
|
|
@ -494,18 +497,9 @@ static inline int page_count(struct page *page)
|
|||
return atomic_read(&compound_head(page)->_count);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
extern int PageHeadHuge(struct page *page_head);
|
||||
#else /* CONFIG_HUGETLB_PAGE */
|
||||
static inline int PageHeadHuge(struct page *page_head)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_HUGETLB_PAGE */
|
||||
|
||||
static inline bool __compound_tail_refcounted(struct page *page)
|
||||
{
|
||||
return !PageSlab(page) && !PageHeadHuge(page);
|
||||
return PageAnon(page) && !PageSlab(page) && !PageHeadHuge(page);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -571,53 +565,6 @@ static inline void init_page_count(struct page *page)
|
|||
atomic_set(&page->_count, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* PageBuddy() indicate that the page is free and in the buddy system
|
||||
* (see mm/page_alloc.c).
|
||||
*
|
||||
* PAGE_BUDDY_MAPCOUNT_VALUE must be <= -2 but better not too close to
|
||||
* -2 so that an underflow of the page_mapcount() won't be mistaken
|
||||
* for a genuine PAGE_BUDDY_MAPCOUNT_VALUE. -128 can be created very
|
||||
* efficiently by most CPU architectures.
|
||||
*/
|
||||
#define PAGE_BUDDY_MAPCOUNT_VALUE (-128)
|
||||
|
||||
static inline int PageBuddy(struct page *page)
|
||||
{
|
||||
return atomic_read(&page->_mapcount) == PAGE_BUDDY_MAPCOUNT_VALUE;
|
||||
}
|
||||
|
||||
static inline void __SetPageBuddy(struct page *page)
|
||||
{
|
||||
VM_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page);
|
||||
atomic_set(&page->_mapcount, PAGE_BUDDY_MAPCOUNT_VALUE);
|
||||
}
|
||||
|
||||
static inline void __ClearPageBuddy(struct page *page)
|
||||
{
|
||||
VM_BUG_ON_PAGE(!PageBuddy(page), page);
|
||||
atomic_set(&page->_mapcount, -1);
|
||||
}
|
||||
|
||||
#define PAGE_BALLOON_MAPCOUNT_VALUE (-256)
|
||||
|
||||
static inline int PageBalloon(struct page *page)
|
||||
{
|
||||
return atomic_read(&page->_mapcount) == PAGE_BALLOON_MAPCOUNT_VALUE;
|
||||
}
|
||||
|
||||
static inline void __SetPageBalloon(struct page *page)
|
||||
{
|
||||
VM_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page);
|
||||
atomic_set(&page->_mapcount, PAGE_BALLOON_MAPCOUNT_VALUE);
|
||||
}
|
||||
|
||||
static inline void __ClearPageBalloon(struct page *page)
|
||||
{
|
||||
VM_BUG_ON_PAGE(!PageBalloon(page), page);
|
||||
atomic_set(&page->_mapcount, -1);
|
||||
}
|
||||
|
||||
void put_page(struct page *page);
|
||||
void put_pages_list(struct list_head *pages);
|
||||
|
||||
|
|
@ -1006,34 +953,10 @@ void page_address_init(void);
|
|||
#define page_address_init() do { } while(0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* On an anonymous page mapped into a user virtual memory area,
|
||||
* page->mapping points to its anon_vma, not to a struct address_space;
|
||||
* with the PAGE_MAPPING_ANON bit set to distinguish it. See rmap.h.
|
||||
*
|
||||
* On an anonymous page in a VM_MERGEABLE area, if CONFIG_KSM is enabled,
|
||||
* the PAGE_MAPPING_KSM bit may be set along with the PAGE_MAPPING_ANON bit;
|
||||
* and then page->mapping points, not to an anon_vma, but to a private
|
||||
* structure which KSM associates with that merged page. See ksm.h.
|
||||
*
|
||||
* PAGE_MAPPING_KSM without PAGE_MAPPING_ANON is currently never used.
|
||||
*
|
||||
* Please note that, confusingly, "page_mapping" refers to the inode
|
||||
* address_space which maps the page from disk; whereas "page_mapped"
|
||||
* refers to user virtual address space into which the page is mapped.
|
||||
*/
|
||||
#define PAGE_MAPPING_ANON 1
|
||||
#define PAGE_MAPPING_KSM 2
|
||||
#define PAGE_MAPPING_FLAGS (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM)
|
||||
|
||||
extern void *page_rmapping(struct page *page);
|
||||
extern struct anon_vma *page_anon_vma(struct page *page);
|
||||
extern struct address_space *page_mapping(struct page *page);
|
||||
|
||||
/* Neutral page->mapping pointer to address_space or anon_vma or other */
|
||||
static inline void *page_rmapping(struct page *page)
|
||||
{
|
||||
return (void *)((unsigned long)page->mapping & ~PAGE_MAPPING_FLAGS);
|
||||
}
|
||||
|
||||
extern struct address_space *__page_file_mapping(struct page *);
|
||||
|
||||
static inline
|
||||
|
|
@ -1045,11 +968,6 @@ struct address_space *page_file_mapping(struct page *page)
|
|||
return page->mapping;
|
||||
}
|
||||
|
||||
static inline int PageAnon(struct page *page)
|
||||
{
|
||||
return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the pagecache index of the passed page. Regular pagecache pages
|
||||
* use ->index whereas swapcache pages use ->private
|
||||
|
|
@ -1975,10 +1893,10 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info);
|
|||
static inline unsigned long
|
||||
vm_unmapped_area(struct vm_unmapped_area_info *info)
|
||||
{
|
||||
if (!(info->flags & VM_UNMAPPED_AREA_TOPDOWN))
|
||||
return unmapped_area(info);
|
||||
else
|
||||
if (info->flags & VM_UNMAPPED_AREA_TOPDOWN)
|
||||
return unmapped_area_topdown(info);
|
||||
else
|
||||
return unmapped_area(info);
|
||||
}
|
||||
|
||||
/* truncate.c */
|
||||
|
|
|
|||
|
|
@ -842,16 +842,16 @@ static inline int populated_zone(struct zone *zone)
|
|||
|
||||
extern int movable_zone;
|
||||
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
static inline int zone_movable_is_highmem(void)
|
||||
{
|
||||
#if defined(CONFIG_HIGHMEM) && defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP)
|
||||
#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
|
||||
return movable_zone == ZONE_HIGHMEM;
|
||||
#elif defined(CONFIG_HIGHMEM)
|
||||
return (ZONE_MOVABLE - 1) == ZONE_HIGHMEM;
|
||||
#else
|
||||
return 0;
|
||||
return (ZONE_MOVABLE - 1) == ZONE_HIGHMEM;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int is_highmem_idx(enum zone_type idx)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -289,6 +289,47 @@ PAGEFLAG_FALSE(HWPoison)
|
|||
#define __PG_HWPOISON 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* On an anonymous page mapped into a user virtual memory area,
|
||||
* page->mapping points to its anon_vma, not to a struct address_space;
|
||||
* with the PAGE_MAPPING_ANON bit set to distinguish it. See rmap.h.
|
||||
*
|
||||
* On an anonymous page in a VM_MERGEABLE area, if CONFIG_KSM is enabled,
|
||||
* the PAGE_MAPPING_KSM bit may be set along with the PAGE_MAPPING_ANON bit;
|
||||
* and then page->mapping points, not to an anon_vma, but to a private
|
||||
* structure which KSM associates with that merged page. See ksm.h.
|
||||
*
|
||||
* PAGE_MAPPING_KSM without PAGE_MAPPING_ANON is currently never used.
|
||||
*
|
||||
* Please note that, confusingly, "page_mapping" refers to the inode
|
||||
* address_space which maps the page from disk; whereas "page_mapped"
|
||||
* refers to user virtual address space into which the page is mapped.
|
||||
*/
|
||||
#define PAGE_MAPPING_ANON 1
|
||||
#define PAGE_MAPPING_KSM 2
|
||||
#define PAGE_MAPPING_FLAGS (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM)
|
||||
|
||||
static inline int PageAnon(struct page *page)
|
||||
{
|
||||
return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_KSM
|
||||
/*
|
||||
* A KSM page is one of those write-protected "shared pages" or "merged pages"
|
||||
* which KSM maps into multiple mms, wherever identical anonymous page content
|
||||
* is found in VM_MERGEABLE vmas. It's a PageAnon page, pointing not to any
|
||||
* anon_vma, but to that page's node of the stable tree.
|
||||
*/
|
||||
static inline int PageKsm(struct page *page)
|
||||
{
|
||||
return ((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) ==
|
||||
(PAGE_MAPPING_ANON | PAGE_MAPPING_KSM);
|
||||
}
|
||||
#else
|
||||
TESTPAGEFLAG_FALSE(Ksm)
|
||||
#endif
|
||||
|
||||
u64 stable_page_flags(struct page *page);
|
||||
|
||||
static inline int PageUptodate(struct page *page)
|
||||
|
|
@ -426,6 +467,21 @@ static inline void ClearPageCompound(struct page *page)
|
|||
|
||||
#endif /* !PAGEFLAGS_EXTENDED */
|
||||
|
||||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
int PageHuge(struct page *page);
|
||||
int PageHeadHuge(struct page *page);
|
||||
bool page_huge_active(struct page *page);
|
||||
#else
|
||||
TESTPAGEFLAG_FALSE(Huge)
|
||||
TESTPAGEFLAG_FALSE(HeadHuge)
|
||||
|
||||
static inline bool page_huge_active(struct page *page)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
/*
|
||||
* PageHuge() only returns true for hugetlbfs pages, but not for
|
||||
|
|
@ -479,6 +535,53 @@ static inline int PageTransTail(struct page *page)
|
|||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PageBuddy() indicate that the page is free and in the buddy system
|
||||
* (see mm/page_alloc.c).
|
||||
*
|
||||
* PAGE_BUDDY_MAPCOUNT_VALUE must be <= -2 but better not too close to
|
||||
* -2 so that an underflow of the page_mapcount() won't be mistaken
|
||||
* for a genuine PAGE_BUDDY_MAPCOUNT_VALUE. -128 can be created very
|
||||
* efficiently by most CPU architectures.
|
||||
*/
|
||||
#define PAGE_BUDDY_MAPCOUNT_VALUE (-128)
|
||||
|
||||
static inline int PageBuddy(struct page *page)
|
||||
{
|
||||
return atomic_read(&page->_mapcount) == PAGE_BUDDY_MAPCOUNT_VALUE;
|
||||
}
|
||||
|
||||
static inline void __SetPageBuddy(struct page *page)
|
||||
{
|
||||
VM_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page);
|
||||
atomic_set(&page->_mapcount, PAGE_BUDDY_MAPCOUNT_VALUE);
|
||||
}
|
||||
|
||||
static inline void __ClearPageBuddy(struct page *page)
|
||||
{
|
||||
VM_BUG_ON_PAGE(!PageBuddy(page), page);
|
||||
atomic_set(&page->_mapcount, -1);
|
||||
}
|
||||
|
||||
#define PAGE_BALLOON_MAPCOUNT_VALUE (-256)
|
||||
|
||||
static inline int PageBalloon(struct page *page)
|
||||
{
|
||||
return atomic_read(&page->_mapcount) == PAGE_BALLOON_MAPCOUNT_VALUE;
|
||||
}
|
||||
|
||||
static inline void __SetPageBalloon(struct page *page)
|
||||
{
|
||||
VM_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page);
|
||||
atomic_set(&page->_mapcount, PAGE_BALLOON_MAPCOUNT_VALUE);
|
||||
}
|
||||
|
||||
static inline void __ClearPageBalloon(struct page *page)
|
||||
{
|
||||
VM_BUG_ON_PAGE(!PageBalloon(page), page);
|
||||
atomic_set(&page->_mapcount, -1);
|
||||
}
|
||||
|
||||
/*
|
||||
* If network-based swap is enabled, sl*b must keep track of whether pages
|
||||
* were allocated from pfmemalloc reserves.
|
||||
|
|
|
|||
|
|
@ -255,6 +255,11 @@ extern asmlinkage void dump_stack(void) __cold;
|
|||
printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
|
||||
#define pr_info(fmt, ...) \
|
||||
printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
|
||||
/*
|
||||
* Like KERN_CONT, pr_cont() should only be used when continuing
|
||||
* a line with no newline ('\n') enclosed. Otherwise it defaults
|
||||
* back to KERN_DEFAULT.
|
||||
*/
|
||||
#define pr_cont(fmt, ...) \
|
||||
printk(KERN_CONT fmt, ##__VA_ARGS__)
|
||||
|
||||
|
|
|
|||
|
|
@ -70,7 +70,8 @@ void ctrl_alt_del(void);
|
|||
#define POWEROFF_CMD_PATH_LEN 256
|
||||
extern char poweroff_cmd[POWEROFF_CMD_PATH_LEN];
|
||||
|
||||
extern int orderly_poweroff(bool force);
|
||||
extern void orderly_poweroff(bool force);
|
||||
extern void orderly_reboot(void);
|
||||
|
||||
/*
|
||||
* Emergency restart, callable from an interrupt handler.
|
||||
|
|
|
|||
|
|
@ -105,14 +105,6 @@ static inline void put_anon_vma(struct anon_vma *anon_vma)
|
|||
__put_anon_vma(anon_vma);
|
||||
}
|
||||
|
||||
static inline struct anon_vma *page_anon_vma(struct page *page)
|
||||
{
|
||||
if (((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) !=
|
||||
PAGE_MAPPING_ANON)
|
||||
return NULL;
|
||||
return page_rmapping(page);
|
||||
}
|
||||
|
||||
static inline void vma_lock_anon_vma(struct vm_area_struct *vma)
|
||||
{
|
||||
struct anon_vma *anon_vma = vma->anon_vma;
|
||||
|
|
|
|||
|
|
@ -47,22 +47,22 @@ static inline int string_unescape_any_inplace(char *buf)
|
|||
#define ESCAPE_ANY_NP (ESCAPE_ANY | ESCAPE_NP)
|
||||
#define ESCAPE_HEX 0x20
|
||||
|
||||
int string_escape_mem(const char *src, size_t isz, char **dst, size_t osz,
|
||||
int string_escape_mem(const char *src, size_t isz, char *dst, size_t osz,
|
||||
unsigned int flags, const char *esc);
|
||||
|
||||
static inline int string_escape_mem_any_np(const char *src, size_t isz,
|
||||
char **dst, size_t osz, const char *esc)
|
||||
char *dst, size_t osz, const char *esc)
|
||||
{
|
||||
return string_escape_mem(src, isz, dst, osz, ESCAPE_ANY_NP, esc);
|
||||
}
|
||||
|
||||
static inline int string_escape_str(const char *src, char **dst, size_t sz,
|
||||
static inline int string_escape_str(const char *src, char *dst, size_t sz,
|
||||
unsigned int flags, const char *esc)
|
||||
{
|
||||
return string_escape_mem(src, strlen(src), dst, sz, flags, esc);
|
||||
}
|
||||
|
||||
static inline int string_escape_str_any_np(const char *src, char **dst,
|
||||
static inline int string_escape_str_any_np(const char *src, char *dst,
|
||||
size_t sz, const char *esc)
|
||||
{
|
||||
return string_escape_str(src, dst, sz, ESCAPE_ANY_NP, esc);
|
||||
|
|
|
|||
|
|
@ -307,7 +307,7 @@ extern void lru_add_drain(void);
|
|||
extern void lru_add_drain_cpu(int cpu);
|
||||
extern void lru_add_drain_all(void);
|
||||
extern void rotate_reclaimable_page(struct page *page);
|
||||
extern void deactivate_page(struct page *page);
|
||||
extern void deactivate_file_page(struct page *page);
|
||||
extern void swap_setup(void);
|
||||
|
||||
extern void add_page_to_unevictable_list(struct page *page);
|
||||
|
|
|
|||
|
|
@ -146,12 +146,6 @@ typedef u64 dma_addr_t;
|
|||
typedef u32 dma_addr_t;
|
||||
#endif /* dma_addr_t */
|
||||
|
||||
#ifdef __CHECKER__
|
||||
#else
|
||||
#endif
|
||||
#ifdef __CHECK_ENDIAN__
|
||||
#else
|
||||
#endif
|
||||
typedef unsigned __bitwise__ gfp_t;
|
||||
typedef unsigned __bitwise__ fmode_t;
|
||||
typedef unsigned __bitwise__ oom_flags_t;
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ typedef struct {
|
|||
#define KUIDT_INIT(value) (kuid_t){ value }
|
||||
#define KGIDT_INIT(value) (kgid_t){ value }
|
||||
|
||||
#ifdef CONFIG_MULTIUSER
|
||||
static inline uid_t __kuid_val(kuid_t uid)
|
||||
{
|
||||
return uid.val;
|
||||
|
|
@ -38,6 +39,17 @@ static inline gid_t __kgid_val(kgid_t gid)
|
|||
{
|
||||
return gid.val;
|
||||
}
|
||||
#else
|
||||
static inline uid_t __kuid_val(kuid_t uid)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline gid_t __kgid_val(kgid_t gid)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#define GLOBAL_ROOT_UID KUIDT_INIT(0)
|
||||
#define GLOBAL_ROOT_GID KGIDT_INIT(0)
|
||||
|
|
|
|||
|
|
@ -47,5 +47,6 @@ void *zs_map_object(struct zs_pool *pool, unsigned long handle,
|
|||
void zs_unmap_object(struct zs_pool *pool, unsigned long handle);
|
||||
|
||||
unsigned long zs_get_total_pages(struct zs_pool *pool);
|
||||
unsigned long zs_compact(struct zs_pool *pool);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue