diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-15 19:39:15 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-15 19:39:15 -0400 |
| commit | eea3a00264cf243a28e4331566ce67b86059339d (patch) | |
| tree | 487f16389e0dfa32e9caa7604d1274a7dcda8f04 /include | |
| parent | e7c82412433a8039616c7314533a0a1c025d99bf (diff) | |
| parent | e693d73c20ffdb06840c9378f367bad849ac0d5d (diff) | |
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
...
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/a.out.h | 67 | ||||
| -rw-r--r-- | include/linux/bitmap.h | 8 | ||||
| -rw-r--r-- | include/linux/capability.h | 29 | ||||
| -rw-r--r-- | include/linux/compaction.h | 1 | ||||
| -rw-r--r-- | include/linux/cred.h | 23 | ||||
| -rw-r--r-- | include/linux/fs.h | 2 | ||||
| -rw-r--r-- | include/linux/hugetlb.h | 20 | ||||
| -rw-r--r-- | include/linux/ioport.h | 8 | ||||
| -rw-r--r-- | include/linux/kasan.h | 2 | ||||
| -rw-r--r-- | include/linux/ksm.h | 17 | ||||
| -rw-r--r-- | include/linux/mempool.h | 3 | ||||
| -rw-r--r-- | include/linux/mm.h | 100 | ||||
| -rw-r--r-- | include/linux/mmzone.h | 8 | ||||
| -rw-r--r-- | include/linux/page-flags.h | 103 | ||||
| -rw-r--r-- | include/linux/printk.h | 5 | ||||
| -rw-r--r-- | include/linux/reboot.h | 3 | ||||
| -rw-r--r-- | include/linux/rmap.h | 8 | ||||
| -rw-r--r-- | include/linux/string_helpers.h | 8 | ||||
| -rw-r--r-- | include/linux/swap.h | 2 | ||||
| -rw-r--r-- | include/linux/types.h | 6 | ||||
| -rw-r--r-- | include/linux/uidgid.h | 12 | ||||
| -rw-r--r-- | include/linux/zsmalloc.h | 1 | ||||
| -rw-r--r-- | include/trace/events/cma.h | 66 |
23 files changed, 272 insertions, 230 deletions
diff --git a/include/linux/a.out.h b/include/linux/a.out.h index 220f14338895..ee884168989f 100644 --- a/include/linux/a.out.h +++ b/include/linux/a.out.h | |||
| @@ -4,44 +4,6 @@ | |||
| 4 | #include <uapi/linux/a.out.h> | 4 | #include <uapi/linux/a.out.h> |
| 5 | 5 | ||
| 6 | #ifndef __ASSEMBLY__ | 6 | #ifndef __ASSEMBLY__ |
| 7 | #if defined (M_OLDSUN2) | ||
| 8 | #else | ||
| 9 | #endif | ||
| 10 | #if defined (M_68010) | ||
| 11 | #else | ||
| 12 | #endif | ||
| 13 | #if defined (M_68020) | ||
| 14 | #else | ||
| 15 | #endif | ||
| 16 | #if defined (M_SPARC) | ||
| 17 | #else | ||
| 18 | #endif | ||
| 19 | #if !defined (N_MAGIC) | ||
| 20 | #endif | ||
| 21 | #if !defined (N_BADMAG) | ||
| 22 | #endif | ||
| 23 | #if !defined (N_TXTOFF) | ||
| 24 | #endif | ||
| 25 | #if !defined (N_DATOFF) | ||
| 26 | #endif | ||
| 27 | #if !defined (N_TRELOFF) | ||
| 28 | #endif | ||
| 29 | #if !defined (N_DRELOFF) | ||
| 30 | #endif | ||
| 31 | #if !defined (N_SYMOFF) | ||
| 32 | #endif | ||
| 33 | #if !defined (N_STROFF) | ||
| 34 | #endif | ||
| 35 | #if !defined (N_TXTADDR) | ||
| 36 | #endif | ||
| 37 | #if defined(vax) || defined(hp300) || defined(pyr) | ||
| 38 | #endif | ||
| 39 | #ifdef sony | ||
| 40 | #endif /* Sony. */ | ||
| 41 | #ifdef is68k | ||
| 42 | #endif | ||
| 43 | #if defined(m68k) && defined(PORTAR) | ||
| 44 | #endif | ||
| 45 | #ifdef linux | 7 | #ifdef linux |
| 46 | #include <asm/page.h> | 8 | #include <asm/page.h> |
| 47 | #if defined(__i386__) || defined(__mc68000__) | 9 | #if defined(__i386__) || defined(__mc68000__) |
| @@ -51,34 +13,5 @@ | |||
| 51 | #endif | 13 | #endif |
| 52 | #endif | 14 | #endif |
| 53 | #endif | 15 | #endif |
| 54 | #ifndef N_DATADDR | ||
| 55 | #endif | ||
| 56 | #if !defined (N_BSSADDR) | ||
| 57 | #endif | ||
| 58 | #if !defined (N_NLIST_DECLARED) | ||
| 59 | #endif /* no N_NLIST_DECLARED. */ | ||
| 60 | #if !defined (N_UNDF) | ||
| 61 | #endif | ||
| 62 | #if !defined (N_ABS) | ||
| 63 | #endif | ||
| 64 | #if !defined (N_TEXT) | ||
| 65 | #endif | ||
| 66 | #if !defined (N_DATA) | ||
| 67 | #endif | ||
| 68 | #if !defined (N_BSS) | ||
| 69 | #endif | ||
| 70 | #if !defined (N_FN) | ||
| 71 | #endif | ||
| 72 | #if !defined (N_EXT) | ||
| 73 | #endif | ||
| 74 | #if !defined (N_TYPE) | ||
| 75 | #endif | ||
| 76 | #if !defined (N_STAB) | ||
| 77 | #endif | ||
| 78 | #if !defined (N_RELOCATION_INFO_DECLARED) | ||
| 79 | #ifdef NS32K | ||
| 80 | #else | ||
| 81 | #endif | ||
| 82 | #endif /* no N_RELOCATION_INFO_DECLARED. */ | ||
| 83 | #endif /*__ASSEMBLY__ */ | 16 | #endif /*__ASSEMBLY__ */ |
| 84 | #endif /* __A_OUT_GNU_H__ */ | 17 | #endif /* __A_OUT_GNU_H__ */ |
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index dbfbf4990005..be4fa5ddf36c 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h | |||
| @@ -172,12 +172,8 @@ extern unsigned int bitmap_ord_to_pos(const unsigned long *bitmap, unsigned int | |||
| 172 | extern int bitmap_print_to_pagebuf(bool list, char *buf, | 172 | extern int bitmap_print_to_pagebuf(bool list, char *buf, |
| 173 | const unsigned long *maskp, int nmaskbits); | 173 | const unsigned long *maskp, int nmaskbits); |
| 174 | 174 | ||
| 175 | #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) % BITS_PER_LONG)) | 175 | #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1))) |
| 176 | #define BITMAP_LAST_WORD_MASK(nbits) \ | 176 | #define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1))) |
| 177 | ( \ | ||
| 178 | ((nbits) % BITS_PER_LONG) ? \ | ||
| 179 | (1UL<<((nbits) % BITS_PER_LONG))-1 : ~0UL \ | ||
| 180 | ) | ||
| 181 | 177 | ||
| 182 | #define small_const_nbits(nbits) \ | 178 | #define small_const_nbits(nbits) \ |
| 183 | (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG) | 179 | (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG) |
diff --git a/include/linux/capability.h b/include/linux/capability.h index aa93e5ef594c..af9f0b9e80e6 100644 --- a/include/linux/capability.h +++ b/include/linux/capability.h | |||
| @@ -205,6 +205,7 @@ static inline kernel_cap_t cap_raise_nfsd_set(const kernel_cap_t a, | |||
| 205 | cap_intersect(permitted, __cap_nfsd_set)); | 205 | cap_intersect(permitted, __cap_nfsd_set)); |
| 206 | } | 206 | } |
| 207 | 207 | ||
| 208 | #ifdef CONFIG_MULTIUSER | ||
| 208 | extern bool has_capability(struct task_struct *t, int cap); | 209 | extern bool has_capability(struct task_struct *t, int cap); |
| 209 | extern bool has_ns_capability(struct task_struct *t, | 210 | extern bool has_ns_capability(struct task_struct *t, |
| 210 | struct user_namespace *ns, int cap); | 211 | struct user_namespace *ns, int cap); |
| @@ -213,6 +214,34 @@ extern bool has_ns_capability_noaudit(struct task_struct *t, | |||
| 213 | struct user_namespace *ns, int cap); | 214 | struct user_namespace *ns, int cap); |
| 214 | extern bool capable(int cap); | 215 | extern bool capable(int cap); |
| 215 | extern bool ns_capable(struct user_namespace *ns, int cap); | 216 | extern bool ns_capable(struct user_namespace *ns, int cap); |
| 217 | #else | ||
| 218 | static inline bool has_capability(struct task_struct *t, int cap) | ||
| 219 | { | ||
| 220 | return true; | ||
| 221 | } | ||
| 222 | static inline bool has_ns_capability(struct task_struct *t, | ||
| 223 | struct user_namespace *ns, int cap) | ||
| 224 | { | ||
| 225 | return true; | ||
| 226 | } | ||
| 227 | static inline bool has_capability_noaudit(struct task_struct *t, int cap) | ||
| 228 | { | ||
| 229 | return true; | ||
| 230 | } | ||
| 231 | static inline bool has_ns_capability_noaudit(struct task_struct *t, | ||
| 232 | struct user_namespace *ns, int cap) | ||
| 233 | { | ||
| 234 | return true; | ||
| 235 | } | ||
| 236 | static inline bool capable(int cap) | ||
| 237 | { | ||
| 238 | return true; | ||
| 239 | } | ||
| 240 | static inline bool ns_capable(struct user_namespace *ns, int cap) | ||
| 241 | { | ||
| 242 | return true; | ||
| 243 | } | ||
| 244 | #endif /* CONFIG_MULTIUSER */ | ||
| 216 | extern bool capable_wrt_inode_uidgid(const struct inode *inode, int cap); | 245 | extern bool capable_wrt_inode_uidgid(const struct inode *inode, int cap); |
| 217 | extern bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap); | 246 | extern bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap); |
| 218 | 247 | ||
diff --git a/include/linux/compaction.h b/include/linux/compaction.h index a014559e4a49..aa8f61cf3a19 100644 --- a/include/linux/compaction.h +++ b/include/linux/compaction.h | |||
| @@ -34,6 +34,7 @@ extern int sysctl_compaction_handler(struct ctl_table *table, int write, | |||
| 34 | extern int sysctl_extfrag_threshold; | 34 | extern int sysctl_extfrag_threshold; |
| 35 | extern int sysctl_extfrag_handler(struct ctl_table *table, int write, | 35 | extern int sysctl_extfrag_handler(struct ctl_table *table, int write, |
| 36 | void __user *buffer, size_t *length, loff_t *ppos); | 36 | void __user *buffer, size_t *length, loff_t *ppos); |
| 37 | extern int sysctl_compact_unevictable_allowed; | ||
| 37 | 38 | ||
| 38 | extern int fragmentation_index(struct zone *zone, unsigned int order); | 39 | extern int fragmentation_index(struct zone *zone, unsigned int order); |
| 39 | extern unsigned long try_to_compact_pages(gfp_t gfp_mask, unsigned int order, | 40 | extern unsigned long try_to_compact_pages(gfp_t gfp_mask, unsigned int order, |
diff --git a/include/linux/cred.h b/include/linux/cred.h index 2fb2ca2127ed..8b6c083e68a7 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h | |||
| @@ -62,9 +62,27 @@ do { \ | |||
| 62 | groups_free(group_info); \ | 62 | groups_free(group_info); \ |
| 63 | } while (0) | 63 | } while (0) |
| 64 | 64 | ||
| 65 | extern struct group_info *groups_alloc(int); | ||
| 66 | extern struct group_info init_groups; | 65 | extern struct group_info init_groups; |
| 66 | #ifdef CONFIG_MULTIUSER | ||
| 67 | extern struct group_info *groups_alloc(int); | ||
| 67 | extern void groups_free(struct group_info *); | 68 | extern void groups_free(struct group_info *); |
| 69 | |||
| 70 | extern int in_group_p(kgid_t); | ||
| 71 | extern int in_egroup_p(kgid_t); | ||
| 72 | #else | ||
| 73 | static inline void groups_free(struct group_info *group_info) | ||
| 74 | { | ||
| 75 | } | ||
| 76 | |||
| 77 | static inline int in_group_p(kgid_t grp) | ||
| 78 | { | ||
| 79 | return 1; | ||
| 80 | } | ||
| 81 | static inline int in_egroup_p(kgid_t grp) | ||
| 82 | { | ||
| 83 | return 1; | ||
| 84 | } | ||
| 85 | #endif | ||
| 68 | extern int set_current_groups(struct group_info *); | 86 | extern int set_current_groups(struct group_info *); |
| 69 | extern void set_groups(struct cred *, struct group_info *); | 87 | extern void set_groups(struct cred *, struct group_info *); |
| 70 | extern int groups_search(const struct group_info *, kgid_t); | 88 | extern int groups_search(const struct group_info *, kgid_t); |
| @@ -74,9 +92,6 @@ extern bool may_setgroups(void); | |||
| 74 | #define GROUP_AT(gi, i) \ | 92 | #define GROUP_AT(gi, i) \ |
| 75 | ((gi)->blocks[(i) / NGROUPS_PER_BLOCK][(i) % NGROUPS_PER_BLOCK]) | 93 | ((gi)->blocks[(i) / NGROUPS_PER_BLOCK][(i) % NGROUPS_PER_BLOCK]) |
| 76 | 94 | ||
| 77 | extern int in_group_p(kgid_t); | ||
| 78 | extern int in_egroup_p(kgid_t); | ||
| 79 | |||
| 80 | /* | 95 | /* |
| 81 | * The security context of a task | 96 | * The security context of a task |
| 82 | * | 97 | * |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 90a1207231ea..f4fc60727b8d 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -2615,6 +2615,7 @@ int dax_clear_blocks(struct inode *, sector_t block, long size); | |||
| 2615 | int dax_zero_page_range(struct inode *, loff_t from, unsigned len, get_block_t); | 2615 | int dax_zero_page_range(struct inode *, loff_t from, unsigned len, get_block_t); |
| 2616 | int dax_truncate_page(struct inode *, loff_t from, get_block_t); | 2616 | int dax_truncate_page(struct inode *, loff_t from, get_block_t); |
| 2617 | int dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t); | 2617 | int dax_fault(struct vm_area_struct *, struct vm_fault *, get_block_t); |
| 2618 | int dax_pfn_mkwrite(struct vm_area_struct *, struct vm_fault *); | ||
| 2618 | #define dax_mkwrite(vma, vmf, gb) dax_fault(vma, vmf, gb) | 2619 | #define dax_mkwrite(vma, vmf, gb) dax_fault(vma, vmf, gb) |
| 2619 | 2620 | ||
| 2620 | #ifdef CONFIG_BLOCK | 2621 | #ifdef CONFIG_BLOCK |
| @@ -2679,7 +2680,6 @@ void inode_sub_bytes(struct inode *inode, loff_t bytes); | |||
| 2679 | loff_t inode_get_bytes(struct inode *inode); | 2680 | loff_t inode_get_bytes(struct inode *inode); |
| 2680 | void inode_set_bytes(struct inode *inode, loff_t bytes); | 2681 | void inode_set_bytes(struct inode *inode, loff_t bytes); |
| 2681 | 2682 | ||
| 2682 | extern int vfs_readdir(struct file *, filldir_t, void *); | ||
| 2683 | extern int iterate_dir(struct file *, struct dir_context *); | 2683 | extern int iterate_dir(struct file *, struct dir_context *); |
| 2684 | 2684 | ||
| 2685 | extern int vfs_stat(const char __user *, struct kstat *); | 2685 | extern int vfs_stat(const char __user *, struct kstat *); |
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 7b5785032049..205026175c42 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h | |||
| @@ -22,7 +22,13 @@ struct mmu_gather; | |||
| 22 | struct hugepage_subpool { | 22 | struct hugepage_subpool { |
| 23 | spinlock_t lock; | 23 | spinlock_t lock; |
| 24 | long count; | 24 | long count; |
| 25 | long max_hpages, used_hpages; | 25 | long max_hpages; /* Maximum huge pages or -1 if no maximum. */ |
| 26 | long used_hpages; /* Used count against maximum, includes */ | ||
| 27 | /* both alloced and reserved pages. */ | ||
| 28 | struct hstate *hstate; | ||
| 29 | long min_hpages; /* Minimum huge pages or -1 if no minimum. */ | ||
| 30 | long rsv_hpages; /* Pages reserved against global pool to */ | ||
| 31 | /* sasitfy minimum size. */ | ||
| 26 | }; | 32 | }; |
| 27 | 33 | ||
| 28 | struct resv_map { | 34 | struct resv_map { |
| @@ -38,11 +44,10 @@ extern int hugetlb_max_hstate __read_mostly; | |||
| 38 | #define for_each_hstate(h) \ | 44 | #define for_each_hstate(h) \ |
| 39 | for ((h) = hstates; (h) < &hstates[hugetlb_max_hstate]; (h)++) | 45 | for ((h) = hstates; (h) < &hstates[hugetlb_max_hstate]; (h)++) |
| 40 | 46 | ||
| 41 | struct hugepage_subpool *hugepage_new_subpool(long nr_blocks); | 47 | struct hugepage_subpool *hugepage_new_subpool(struct hstate *h, long max_hpages, |
| 48 | long min_hpages); | ||
| 42 | void hugepage_put_subpool(struct hugepage_subpool *spool); | 49 | void hugepage_put_subpool(struct hugepage_subpool *spool); |
| 43 | 50 | ||
| 44 | int PageHuge(struct page *page); | ||
| 45 | |||
| 46 | void reset_vma_resv_huge_pages(struct vm_area_struct *vma); | 51 | void reset_vma_resv_huge_pages(struct vm_area_struct *vma); |
| 47 | int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); | 52 | int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); |
| 48 | int hugetlb_overcommit_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *); | 53 | 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); | |||
| 79 | int dequeue_hwpoisoned_huge_page(struct page *page); | 84 | int dequeue_hwpoisoned_huge_page(struct page *page); |
| 80 | bool isolate_huge_page(struct page *page, struct list_head *list); | 85 | bool isolate_huge_page(struct page *page, struct list_head *list); |
| 81 | void putback_active_hugepage(struct page *page); | 86 | void putback_active_hugepage(struct page *page); |
| 82 | bool is_hugepage_active(struct page *page); | ||
| 83 | void free_huge_page(struct page *page); | 87 | void free_huge_page(struct page *page); |
| 84 | 88 | ||
| 85 | #ifdef CONFIG_ARCH_WANT_HUGE_PMD_SHARE | 89 | #ifdef CONFIG_ARCH_WANT_HUGE_PMD_SHARE |
| @@ -109,11 +113,6 @@ unsigned long hugetlb_change_protection(struct vm_area_struct *vma, | |||
| 109 | 113 | ||
| 110 | #else /* !CONFIG_HUGETLB_PAGE */ | 114 | #else /* !CONFIG_HUGETLB_PAGE */ |
| 111 | 115 | ||
| 112 | static inline int PageHuge(struct page *page) | ||
| 113 | { | ||
| 114 | return 0; | ||
| 115 | } | ||
| 116 | |||
| 117 | static inline void reset_vma_resv_huge_pages(struct vm_area_struct *vma) | 116 | static inline void reset_vma_resv_huge_pages(struct vm_area_struct *vma) |
| 118 | { | 117 | { |
| 119 | } | 118 | } |
| @@ -152,7 +151,6 @@ static inline bool isolate_huge_page(struct page *page, struct list_head *list) | |||
| 152 | return false; | 151 | return false; |
| 153 | } | 152 | } |
| 154 | #define putback_active_hugepage(p) do {} while (0) | 153 | #define putback_active_hugepage(p) do {} while (0) |
| 155 | #define is_hugepage_active(x) false | ||
| 156 | 154 | ||
| 157 | static inline unsigned long hugetlb_change_protection(struct vm_area_struct *vma, | 155 | static inline unsigned long hugetlb_change_protection(struct vm_area_struct *vma, |
| 158 | unsigned long address, unsigned long end, pgprot_t newprot) | 156 | unsigned long address, unsigned long end, pgprot_t newprot) |
diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 2c5250222278..388e3ae94f7a 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h | |||
| @@ -196,10 +196,8 @@ extern struct resource * __request_region(struct resource *, | |||
| 196 | 196 | ||
| 197 | /* Compatibility cruft */ | 197 | /* Compatibility cruft */ |
| 198 | #define release_region(start,n) __release_region(&ioport_resource, (start), (n)) | 198 | #define release_region(start,n) __release_region(&ioport_resource, (start), (n)) |
| 199 | #define check_mem_region(start,n) __check_region(&iomem_resource, (start), (n)) | ||
| 200 | #define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n)) | 199 | #define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n)) |
| 201 | 200 | ||
| 202 | extern int __check_region(struct resource *, resource_size_t, resource_size_t); | ||
| 203 | extern void __release_region(struct resource *, resource_size_t, | 201 | extern void __release_region(struct resource *, resource_size_t, |
| 204 | resource_size_t); | 202 | resource_size_t); |
| 205 | #ifdef CONFIG_MEMORY_HOTREMOVE | 203 | #ifdef CONFIG_MEMORY_HOTREMOVE |
| @@ -207,12 +205,6 @@ extern int release_mem_region_adjustable(struct resource *, resource_size_t, | |||
| 207 | resource_size_t); | 205 | resource_size_t); |
| 208 | #endif | 206 | #endif |
| 209 | 207 | ||
| 210 | static inline int __deprecated check_region(resource_size_t s, | ||
| 211 | resource_size_t n) | ||
| 212 | { | ||
| 213 | return __check_region(&ioport_resource, s, n); | ||
| 214 | } | ||
| 215 | |||
| 216 | /* Wrappers for managed devices */ | 208 | /* Wrappers for managed devices */ |
| 217 | struct device; | 209 | struct device; |
| 218 | 210 | ||
diff --git a/include/linux/kasan.h b/include/linux/kasan.h index 5bb074431eb0..5486d777b706 100644 --- a/include/linux/kasan.h +++ b/include/linux/kasan.h | |||
| @@ -44,6 +44,7 @@ void kasan_poison_object_data(struct kmem_cache *cache, void *object); | |||
| 44 | 44 | ||
| 45 | void kasan_kmalloc_large(const void *ptr, size_t size); | 45 | void kasan_kmalloc_large(const void *ptr, size_t size); |
| 46 | void kasan_kfree_large(const void *ptr); | 46 | void kasan_kfree_large(const void *ptr); |
| 47 | void kasan_kfree(void *ptr); | ||
| 47 | void kasan_kmalloc(struct kmem_cache *s, const void *object, size_t size); | 48 | void kasan_kmalloc(struct kmem_cache *s, const void *object, size_t size); |
| 48 | void kasan_krealloc(const void *object, size_t new_size); | 49 | void kasan_krealloc(const void *object, size_t new_size); |
| 49 | 50 | ||
| @@ -71,6 +72,7 @@ static inline void kasan_poison_object_data(struct kmem_cache *cache, | |||
| 71 | 72 | ||
| 72 | static inline void kasan_kmalloc_large(void *ptr, size_t size) {} | 73 | static inline void kasan_kmalloc_large(void *ptr, size_t size) {} |
| 73 | static inline void kasan_kfree_large(const void *ptr) {} | 74 | static inline void kasan_kfree_large(const void *ptr) {} |
| 75 | static inline void kasan_kfree(void *ptr) {} | ||
| 74 | static inline void kasan_kmalloc(struct kmem_cache *s, const void *object, | 76 | static inline void kasan_kmalloc(struct kmem_cache *s, const void *object, |
| 75 | size_t size) {} | 77 | size_t size) {} |
| 76 | static inline void kasan_krealloc(const void *object, size_t new_size) {} | 78 | static inline void kasan_krealloc(const void *object, size_t new_size) {} |
diff --git a/include/linux/ksm.h b/include/linux/ksm.h index 3be6bb18562d..7ae216a39c9e 100644 --- a/include/linux/ksm.h +++ b/include/linux/ksm.h | |||
| @@ -35,18 +35,6 @@ static inline void ksm_exit(struct mm_struct *mm) | |||
| 35 | __ksm_exit(mm); | 35 | __ksm_exit(mm); |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | /* | ||
| 39 | * A KSM page is one of those write-protected "shared pages" or "merged pages" | ||
| 40 | * which KSM maps into multiple mms, wherever identical anonymous page content | ||
| 41 | * is found in VM_MERGEABLE vmas. It's a PageAnon page, pointing not to any | ||
| 42 | * anon_vma, but to that page's node of the stable tree. | ||
| 43 | */ | ||
| 44 | static inline int PageKsm(struct page *page) | ||
| 45 | { | ||
| 46 | return ((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) == | ||
| 47 | (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM); | ||
| 48 | } | ||
| 49 | |||
| 50 | static inline struct stable_node *page_stable_node(struct page *page) | 38 | static inline struct stable_node *page_stable_node(struct page *page) |
| 51 | { | 39 | { |
| 52 | return PageKsm(page) ? page_rmapping(page) : NULL; | 40 | return PageKsm(page) ? page_rmapping(page) : NULL; |
| @@ -87,11 +75,6 @@ static inline void ksm_exit(struct mm_struct *mm) | |||
| 87 | { | 75 | { |
| 88 | } | 76 | } |
| 89 | 77 | ||
| 90 | static inline int PageKsm(struct page *page) | ||
| 91 | { | ||
| 92 | return 0; | ||
| 93 | } | ||
| 94 | |||
| 95 | #ifdef CONFIG_MMU | 78 | #ifdef CONFIG_MMU |
| 96 | static inline int ksm_madvise(struct vm_area_struct *vma, unsigned long start, | 79 | static inline int ksm_madvise(struct vm_area_struct *vma, unsigned long start, |
| 97 | unsigned long end, int advice, unsigned long *vm_flags) | 80 | unsigned long end, int advice, unsigned long *vm_flags) |
diff --git a/include/linux/mempool.h b/include/linux/mempool.h index b19b3023c880..69b6951e8fd2 100644 --- a/include/linux/mempool.h +++ b/include/linux/mempool.h | |||
| @@ -36,7 +36,8 @@ extern void mempool_free(void *element, mempool_t *pool); | |||
| 36 | 36 | ||
| 37 | /* | 37 | /* |
| 38 | * A mempool_alloc_t and mempool_free_t that get the memory from | 38 | * A mempool_alloc_t and mempool_free_t that get the memory from |
| 39 | * a slab that is passed in through pool_data. | 39 | * a slab cache that is passed in through pool_data. |
| 40 | * Note: the slab cache may not have a ctor function. | ||
| 40 | */ | 41 | */ |
| 41 | void *mempool_alloc_slab(gfp_t gfp_mask, void *pool_data); | 42 | void *mempool_alloc_slab(gfp_t gfp_mask, void *pool_data); |
| 42 | void mempool_free_slab(void *element, void *pool_data); | 43 | void mempool_free_slab(void *element, void *pool_data); |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 6571dd78e984..8b086070c3a5 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -251,6 +251,9 @@ struct vm_operations_struct { | |||
| 251 | * writable, if an error is returned it will cause a SIGBUS */ | 251 | * writable, if an error is returned it will cause a SIGBUS */ |
| 252 | int (*page_mkwrite)(struct vm_area_struct *vma, struct vm_fault *vmf); | 252 | int (*page_mkwrite)(struct vm_area_struct *vma, struct vm_fault *vmf); |
| 253 | 253 | ||
| 254 | /* same as page_mkwrite when using VM_PFNMAP|VM_MIXEDMAP */ | ||
| 255 | int (*pfn_mkwrite)(struct vm_area_struct *vma, struct vm_fault *vmf); | ||
| 256 | |||
| 254 | /* called by access_process_vm when get_user_pages() fails, typically | 257 | /* called by access_process_vm when get_user_pages() fails, typically |
| 255 | * for use by special VMAs that can switch between memory and hardware | 258 | * for use by special VMAs that can switch between memory and hardware |
| 256 | */ | 259 | */ |
| @@ -494,18 +497,9 @@ static inline int page_count(struct page *page) | |||
| 494 | return atomic_read(&compound_head(page)->_count); | 497 | return atomic_read(&compound_head(page)->_count); |
| 495 | } | 498 | } |
| 496 | 499 | ||
| 497 | #ifdef CONFIG_HUGETLB_PAGE | ||
| 498 | extern int PageHeadHuge(struct page *page_head); | ||
| 499 | #else /* CONFIG_HUGETLB_PAGE */ | ||
| 500 | static inline int PageHeadHuge(struct page *page_head) | ||
| 501 | { | ||
| 502 | return 0; | ||
| 503 | } | ||
| 504 | #endif /* CONFIG_HUGETLB_PAGE */ | ||
| 505 | |||
| 506 | static inline bool __compound_tail_refcounted(struct page *page) | 500 | static inline bool __compound_tail_refcounted(struct page *page) |
| 507 | { | 501 | { |
| 508 | return !PageSlab(page) && !PageHeadHuge(page); | 502 | return PageAnon(page) && !PageSlab(page) && !PageHeadHuge(page); |
| 509 | } | 503 | } |
| 510 | 504 | ||
| 511 | /* | 505 | /* |
| @@ -571,53 +565,6 @@ static inline void init_page_count(struct page *page) | |||
| 571 | atomic_set(&page->_count, 1); | 565 | atomic_set(&page->_count, 1); |
| 572 | } | 566 | } |
| 573 | 567 | ||
| 574 | /* | ||
| 575 | * PageBuddy() indicate that the page is free and in the buddy system | ||
| 576 | * (see mm/page_alloc.c). | ||
| 577 | * | ||
| 578 | * PAGE_BUDDY_MAPCOUNT_VALUE must be <= -2 but better not too close to | ||
| 579 | * -2 so that an underflow of the page_mapcount() won't be mistaken | ||
| 580 | * for a genuine PAGE_BUDDY_MAPCOUNT_VALUE. -128 can be created very | ||
| 581 | * efficiently by most CPU architectures. | ||
| 582 | */ | ||
| 583 | #define PAGE_BUDDY_MAPCOUNT_VALUE (-128) | ||
| 584 | |||
| 585 | static inline int PageBuddy(struct page *page) | ||
| 586 | { | ||
| 587 | return atomic_read(&page->_mapcount) == PAGE_BUDDY_MAPCOUNT_VALUE; | ||
| 588 | } | ||
| 589 | |||
| 590 | static inline void __SetPageBuddy(struct page *page) | ||
| 591 | { | ||
| 592 | VM_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page); | ||
| 593 | atomic_set(&page->_mapcount, PAGE_BUDDY_MAPCOUNT_VALUE); | ||
| 594 | } | ||
| 595 | |||
| 596 | static inline void __ClearPageBuddy(struct page *page) | ||
| 597 | { | ||
| 598 | VM_BUG_ON_PAGE(!PageBuddy(page), page); | ||
| 599 | atomic_set(&page->_mapcount, -1); | ||
| 600 | } | ||
| 601 | |||
| 602 | #define PAGE_BALLOON_MAPCOUNT_VALUE (-256) | ||
| 603 | |||
| 604 | static inline int PageBalloon(struct page *page) | ||
| 605 | { | ||
| 606 | return atomic_read(&page->_mapcount) == PAGE_BALLOON_MAPCOUNT_VALUE; | ||
| 607 | } | ||
| 608 | |||
| 609 | static inline void __SetPageBalloon(struct page *page) | ||
| 610 | { | ||
| 611 | VM_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page); | ||
| 612 | atomic_set(&page->_mapcount, PAGE_BALLOON_MAPCOUNT_VALUE); | ||
| 613 | } | ||
| 614 | |||
| 615 | static inline void __ClearPageBalloon(struct page *page) | ||
| 616 | { | ||
| 617 | VM_BUG_ON_PAGE(!PageBalloon(page), page); | ||
| 618 | atomic_set(&page->_mapcount, -1); | ||
| 619 | } | ||
| 620 | |||
| 621 | void put_page(struct page *page); | 568 | void put_page(struct page *page); |
| 622 | void put_pages_list(struct list_head *pages); | 569 | void put_pages_list(struct list_head *pages); |
| 623 | 570 | ||
| @@ -1006,34 +953,10 @@ void page_address_init(void); | |||
| 1006 | #define page_address_init() do { } while(0) | 953 | #define page_address_init() do { } while(0) |
| 1007 | #endif | 954 | #endif |
| 1008 | 955 | ||
| 1009 | /* | 956 | extern void *page_rmapping(struct page *page); |
| 1010 | * On an anonymous page mapped into a user virtual memory area, | 957 | extern struct anon_vma *page_anon_vma(struct page *page); |
| 1011 | * page->mapping points to its anon_vma, not to a struct address_space; | ||
| 1012 | * with the PAGE_MAPPING_ANON bit set to distinguish it. See rmap.h. | ||
| 1013 | * | ||
| 1014 | * On an anonymous page in a VM_MERGEABLE area, if CONFIG_KSM is enabled, | ||
| 1015 | * the PAGE_MAPPING_KSM bit may be set along with the PAGE_MAPPING_ANON bit; | ||
| 1016 | * and then page->mapping points, not to an anon_vma, but to a private | ||
| 1017 | * structure which KSM associates with that merged page. See ksm.h. | ||
| 1018 | * | ||
| 1019 | * PAGE_MAPPING_KSM without PAGE_MAPPING_ANON is currently never used. | ||
| 1020 | * | ||
| 1021 | * Please note that, confusingly, "page_mapping" refers to the inode | ||
| 1022 | * address_space which maps the page from disk; whereas "page_mapped" | ||
| 1023 | * refers to user virtual address space into which the page is mapped. | ||
| 1024 | */ | ||
| 1025 | #define PAGE_MAPPING_ANON 1 | ||
| 1026 | #define PAGE_MAPPING_KSM 2 | ||
| 1027 | #define PAGE_MAPPING_FLAGS (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM) | ||
| 1028 | |||
| 1029 | extern struct address_space *page_mapping(struct page *page); | 958 | extern struct address_space *page_mapping(struct page *page); |
| 1030 | 959 | ||
| 1031 | /* Neutral page->mapping pointer to address_space or anon_vma or other */ | ||
| 1032 | static inline void *page_rmapping(struct page *page) | ||
| 1033 | { | ||
| 1034 | return (void *)((unsigned long)page->mapping & ~PAGE_MAPPING_FLAGS); | ||
| 1035 | } | ||
| 1036 | |||
| 1037 | extern struct address_space *__page_file_mapping(struct page *); | 960 | extern struct address_space *__page_file_mapping(struct page *); |
| 1038 | 961 | ||
| 1039 | static inline | 962 | static inline |
| @@ -1045,11 +968,6 @@ struct address_space *page_file_mapping(struct page *page) | |||
| 1045 | return page->mapping; | 968 | return page->mapping; |
| 1046 | } | 969 | } |
| 1047 | 970 | ||
| 1048 | static inline int PageAnon(struct page *page) | ||
| 1049 | { | ||
| 1050 | return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0; | ||
| 1051 | } | ||
| 1052 | |||
| 1053 | /* | 971 | /* |
| 1054 | * Return the pagecache index of the passed page. Regular pagecache pages | 972 | * Return the pagecache index of the passed page. Regular pagecache pages |
| 1055 | * use ->index whereas swapcache pages use ->private | 973 | * use ->index whereas swapcache pages use ->private |
| @@ -1975,10 +1893,10 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info); | |||
| 1975 | static inline unsigned long | 1893 | static inline unsigned long |
| 1976 | vm_unmapped_area(struct vm_unmapped_area_info *info) | 1894 | vm_unmapped_area(struct vm_unmapped_area_info *info) |
| 1977 | { | 1895 | { |
| 1978 | if (!(info->flags & VM_UNMAPPED_AREA_TOPDOWN)) | 1896 | if (info->flags & VM_UNMAPPED_AREA_TOPDOWN) |
| 1979 | return unmapped_area(info); | ||
| 1980 | else | ||
| 1981 | return unmapped_area_topdown(info); | 1897 | return unmapped_area_topdown(info); |
| 1898 | else | ||
| 1899 | return unmapped_area(info); | ||
| 1982 | } | 1900 | } |
| 1983 | 1901 | ||
| 1984 | /* truncate.c */ | 1902 | /* truncate.c */ |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 2782df47101e..54d74f6eb233 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -842,16 +842,16 @@ static inline int populated_zone(struct zone *zone) | |||
| 842 | 842 | ||
| 843 | extern int movable_zone; | 843 | extern int movable_zone; |
| 844 | 844 | ||
| 845 | #ifdef CONFIG_HIGHMEM | ||
| 845 | static inline int zone_movable_is_highmem(void) | 846 | static inline int zone_movable_is_highmem(void) |
| 846 | { | 847 | { |
| 847 | #if defined(CONFIG_HIGHMEM) && defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) | 848 | #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP |
| 848 | return movable_zone == ZONE_HIGHMEM; | 849 | return movable_zone == ZONE_HIGHMEM; |
| 849 | #elif defined(CONFIG_HIGHMEM) | ||
| 850 | return (ZONE_MOVABLE - 1) == ZONE_HIGHMEM; | ||
| 851 | #else | 850 | #else |
| 852 | return 0; | 851 | return (ZONE_MOVABLE - 1) == ZONE_HIGHMEM; |
| 853 | #endif | 852 | #endif |
| 854 | } | 853 | } |
| 854 | #endif | ||
| 855 | 855 | ||
| 856 | static inline int is_highmem_idx(enum zone_type idx) | 856 | static inline int is_highmem_idx(enum zone_type idx) |
| 857 | { | 857 | { |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index c851ff92d5b3..f34e040b34e9 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
| @@ -289,6 +289,47 @@ PAGEFLAG_FALSE(HWPoison) | |||
| 289 | #define __PG_HWPOISON 0 | 289 | #define __PG_HWPOISON 0 |
| 290 | #endif | 290 | #endif |
| 291 | 291 | ||
| 292 | /* | ||
| 293 | * On an anonymous page mapped into a user virtual memory area, | ||
| 294 | * page->mapping points to its anon_vma, not to a struct address_space; | ||
| 295 | * with the PAGE_MAPPING_ANON bit set to distinguish it. See rmap.h. | ||
| 296 | * | ||
| 297 | * On an anonymous page in a VM_MERGEABLE area, if CONFIG_KSM is enabled, | ||
| 298 | * the PAGE_MAPPING_KSM bit may be set along with the PAGE_MAPPING_ANON bit; | ||
| 299 | * and then page->mapping points, not to an anon_vma, but to a private | ||
| 300 | * structure which KSM associates with that merged page. See ksm.h. | ||
| 301 | * | ||
| 302 | * PAGE_MAPPING_KSM without PAGE_MAPPING_ANON is currently never used. | ||
| 303 | * | ||
| 304 | * Please note that, confusingly, "page_mapping" refers to the inode | ||
| 305 | * address_space which maps the page from disk; whereas "page_mapped" | ||
| 306 | * refers to user virtual address space into which the page is mapped. | ||
| 307 | */ | ||
| 308 | #define PAGE_MAPPING_ANON 1 | ||
| 309 | #define PAGE_MAPPING_KSM 2 | ||
| 310 | #define PAGE_MAPPING_FLAGS (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM) | ||
| 311 | |||
| 312 | static inline int PageAnon(struct page *page) | ||
| 313 | { | ||
| 314 | return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0; | ||
| 315 | } | ||
| 316 | |||
| 317 | #ifdef CONFIG_KSM | ||
| 318 | /* | ||
| 319 | * A KSM page is one of those write-protected "shared pages" or "merged pages" | ||
| 320 | * which KSM maps into multiple mms, wherever identical anonymous page content | ||
| 321 | * is found in VM_MERGEABLE vmas. It's a PageAnon page, pointing not to any | ||
| 322 | * anon_vma, but to that page's node of the stable tree. | ||
| 323 | */ | ||
| 324 | static inline int PageKsm(struct page *page) | ||
| 325 | { | ||
| 326 | return ((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) == | ||
| 327 | (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM); | ||
| 328 | } | ||
| 329 | #else | ||
| 330 | TESTPAGEFLAG_FALSE(Ksm) | ||
| 331 | #endif | ||
| 332 | |||
| 292 | u64 stable_page_flags(struct page *page); | 333 | u64 stable_page_flags(struct page *page); |
| 293 | 334 | ||
| 294 | static inline int PageUptodate(struct page *page) | 335 | static inline int PageUptodate(struct page *page) |
| @@ -426,6 +467,21 @@ static inline void ClearPageCompound(struct page *page) | |||
| 426 | 467 | ||
| 427 | #endif /* !PAGEFLAGS_EXTENDED */ | 468 | #endif /* !PAGEFLAGS_EXTENDED */ |
| 428 | 469 | ||
| 470 | #ifdef CONFIG_HUGETLB_PAGE | ||
| 471 | int PageHuge(struct page *page); | ||
| 472 | int PageHeadHuge(struct page *page); | ||
| 473 | bool page_huge_active(struct page *page); | ||
| 474 | #else | ||
| 475 | TESTPAGEFLAG_FALSE(Huge) | ||
| 476 | TESTPAGEFLAG_FALSE(HeadHuge) | ||
| 477 | |||
| 478 | static inline bool page_huge_active(struct page *page) | ||
| 479 | { | ||
| 480 | return 0; | ||
| 481 | } | ||
| 482 | #endif | ||
| 483 | |||
| 484 | |||
| 429 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 485 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
| 430 | /* | 486 | /* |
| 431 | * PageHuge() only returns true for hugetlbfs pages, but not for | 487 | * PageHuge() only returns true for hugetlbfs pages, but not for |
| @@ -480,6 +536,53 @@ static inline int PageTransTail(struct page *page) | |||
| 480 | #endif | 536 | #endif |
| 481 | 537 | ||
| 482 | /* | 538 | /* |
| 539 | * PageBuddy() indicate that the page is free and in the buddy system | ||
| 540 | * (see mm/page_alloc.c). | ||
| 541 | * | ||
| 542 | * PAGE_BUDDY_MAPCOUNT_VALUE must be <= -2 but better not too close to | ||
| 543 | * -2 so that an underflow of the page_mapcount() won't be mistaken | ||
| 544 | * for a genuine PAGE_BUDDY_MAPCOUNT_VALUE. -128 can be created very | ||
| 545 | * efficiently by most CPU architectures. | ||
| 546 | */ | ||
| 547 | #define PAGE_BUDDY_MAPCOUNT_VALUE (-128) | ||
| 548 | |||
| 549 | static inline int PageBuddy(struct page *page) | ||
| 550 | { | ||
| 551 | return atomic_read(&page->_mapcount) == PAGE_BUDDY_MAPCOUNT_VALUE; | ||
| 552 | } | ||
| 553 | |||
| 554 | static inline void __SetPageBuddy(struct page *page) | ||
| 555 | { | ||
| 556 | VM_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page); | ||
| 557 | atomic_set(&page->_mapcount, PAGE_BUDDY_MAPCOUNT_VALUE); | ||
| 558 | } | ||
| 559 | |||
| 560 | static inline void __ClearPageBuddy(struct page *page) | ||
| 561 | { | ||
| 562 | VM_BUG_ON_PAGE(!PageBuddy(page), page); | ||
| 563 | atomic_set(&page->_mapcount, -1); | ||
| 564 | } | ||
| 565 | |||
| 566 | #define PAGE_BALLOON_MAPCOUNT_VALUE (-256) | ||
| 567 | |||
| 568 | static inline int PageBalloon(struct page *page) | ||
| 569 | { | ||
| 570 | return atomic_read(&page->_mapcount) == PAGE_BALLOON_MAPCOUNT_VALUE; | ||
| 571 | } | ||
| 572 | |||
| 573 | static inline void __SetPageBalloon(struct page *page) | ||
| 574 | { | ||
| 575 | VM_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page); | ||
| 576 | atomic_set(&page->_mapcount, PAGE_BALLOON_MAPCOUNT_VALUE); | ||
| 577 | } | ||
| 578 | |||
| 579 | static inline void __ClearPageBalloon(struct page *page) | ||
| 580 | { | ||
| 581 | VM_BUG_ON_PAGE(!PageBalloon(page), page); | ||
| 582 | atomic_set(&page->_mapcount, -1); | ||
| 583 | } | ||
| 584 | |||
| 585 | /* | ||
| 483 | * If network-based swap is enabled, sl*b must keep track of whether pages | 586 | * If network-based swap is enabled, sl*b must keep track of whether pages |
| 484 | * were allocated from pfmemalloc reserves. | 587 | * were allocated from pfmemalloc reserves. |
| 485 | */ | 588 | */ |
diff --git a/include/linux/printk.h b/include/linux/printk.h index baa3f97d8ce8..9b30871c9149 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h | |||
| @@ -255,6 +255,11 @@ extern asmlinkage void dump_stack(void) __cold; | |||
| 255 | printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) | 255 | printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__) |
| 256 | #define pr_info(fmt, ...) \ | 256 | #define pr_info(fmt, ...) \ |
| 257 | printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) | 257 | printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) |
| 258 | /* | ||
| 259 | * Like KERN_CONT, pr_cont() should only be used when continuing | ||
| 260 | * a line with no newline ('\n') enclosed. Otherwise it defaults | ||
| 261 | * back to KERN_DEFAULT. | ||
| 262 | */ | ||
| 258 | #define pr_cont(fmt, ...) \ | 263 | #define pr_cont(fmt, ...) \ |
| 259 | printk(KERN_CONT fmt, ##__VA_ARGS__) | 264 | printk(KERN_CONT fmt, ##__VA_ARGS__) |
| 260 | 265 | ||
diff --git a/include/linux/reboot.h b/include/linux/reboot.h index 67fc8fcdc4b0..a7ff409f386d 100644 --- a/include/linux/reboot.h +++ b/include/linux/reboot.h | |||
| @@ -70,7 +70,8 @@ void ctrl_alt_del(void); | |||
| 70 | #define POWEROFF_CMD_PATH_LEN 256 | 70 | #define POWEROFF_CMD_PATH_LEN 256 |
| 71 | extern char poweroff_cmd[POWEROFF_CMD_PATH_LEN]; | 71 | extern char poweroff_cmd[POWEROFF_CMD_PATH_LEN]; |
| 72 | 72 | ||
| 73 | extern int orderly_poweroff(bool force); | 73 | extern void orderly_poweroff(bool force); |
| 74 | extern void orderly_reboot(void); | ||
| 74 | 75 | ||
| 75 | /* | 76 | /* |
| 76 | * Emergency restart, callable from an interrupt handler. | 77 | * Emergency restart, callable from an interrupt handler. |
diff --git a/include/linux/rmap.h b/include/linux/rmap.h index c4c559a45dc8..c89c53a113a8 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h | |||
| @@ -105,14 +105,6 @@ static inline void put_anon_vma(struct anon_vma *anon_vma) | |||
| 105 | __put_anon_vma(anon_vma); | 105 | __put_anon_vma(anon_vma); |
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | static inline struct anon_vma *page_anon_vma(struct page *page) | ||
| 109 | { | ||
| 110 | if (((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) != | ||
| 111 | PAGE_MAPPING_ANON) | ||
| 112 | return NULL; | ||
| 113 | return page_rmapping(page); | ||
| 114 | } | ||
| 115 | |||
| 116 | static inline void vma_lock_anon_vma(struct vm_area_struct *vma) | 108 | static inline void vma_lock_anon_vma(struct vm_area_struct *vma) |
| 117 | { | 109 | { |
| 118 | struct anon_vma *anon_vma = vma->anon_vma; | 110 | struct anon_vma *anon_vma = vma->anon_vma; |
diff --git a/include/linux/string_helpers.h b/include/linux/string_helpers.h index 657571817260..0991913f4953 100644 --- a/include/linux/string_helpers.h +++ b/include/linux/string_helpers.h | |||
| @@ -47,22 +47,22 @@ static inline int string_unescape_any_inplace(char *buf) | |||
| 47 | #define ESCAPE_ANY_NP (ESCAPE_ANY | ESCAPE_NP) | 47 | #define ESCAPE_ANY_NP (ESCAPE_ANY | ESCAPE_NP) |
| 48 | #define ESCAPE_HEX 0x20 | 48 | #define ESCAPE_HEX 0x20 |
| 49 | 49 | ||
| 50 | int string_escape_mem(const char *src, size_t isz, char **dst, size_t osz, | 50 | int string_escape_mem(const char *src, size_t isz, char *dst, size_t osz, |
| 51 | unsigned int flags, const char *esc); | 51 | unsigned int flags, const char *esc); |
| 52 | 52 | ||
| 53 | static inline int string_escape_mem_any_np(const char *src, size_t isz, | 53 | static inline int string_escape_mem_any_np(const char *src, size_t isz, |
| 54 | char **dst, size_t osz, const char *esc) | 54 | char *dst, size_t osz, const char *esc) |
| 55 | { | 55 | { |
| 56 | return string_escape_mem(src, isz, dst, osz, ESCAPE_ANY_NP, esc); | 56 | return string_escape_mem(src, isz, dst, osz, ESCAPE_ANY_NP, esc); |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | static inline int string_escape_str(const char *src, char **dst, size_t sz, | 59 | static inline int string_escape_str(const char *src, char *dst, size_t sz, |
| 60 | unsigned int flags, const char *esc) | 60 | unsigned int flags, const char *esc) |
| 61 | { | 61 | { |
| 62 | return string_escape_mem(src, strlen(src), dst, sz, flags, esc); | 62 | return string_escape_mem(src, strlen(src), dst, sz, flags, esc); |
| 63 | } | 63 | } |
| 64 | 64 | ||
| 65 | static inline int string_escape_str_any_np(const char *src, char **dst, | 65 | static inline int string_escape_str_any_np(const char *src, char *dst, |
| 66 | size_t sz, const char *esc) | 66 | size_t sz, const char *esc) |
| 67 | { | 67 | { |
| 68 | return string_escape_str(src, dst, sz, ESCAPE_ANY_NP, esc); | 68 | return string_escape_str(src, dst, sz, ESCAPE_ANY_NP, esc); |
diff --git a/include/linux/swap.h b/include/linux/swap.h index 7067eca501e2..cee108cbe2d5 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
| @@ -307,7 +307,7 @@ extern void lru_add_drain(void); | |||
| 307 | extern void lru_add_drain_cpu(int cpu); | 307 | extern void lru_add_drain_cpu(int cpu); |
| 308 | extern void lru_add_drain_all(void); | 308 | extern void lru_add_drain_all(void); |
| 309 | extern void rotate_reclaimable_page(struct page *page); | 309 | extern void rotate_reclaimable_page(struct page *page); |
| 310 | extern void deactivate_page(struct page *page); | 310 | extern void deactivate_file_page(struct page *page); |
| 311 | extern void swap_setup(void); | 311 | extern void swap_setup(void); |
| 312 | 312 | ||
| 313 | extern void add_page_to_unevictable_list(struct page *page); | 313 | extern void add_page_to_unevictable_list(struct page *page); |
diff --git a/include/linux/types.h b/include/linux/types.h index 6747247e3f9f..59698be03490 100644 --- a/include/linux/types.h +++ b/include/linux/types.h | |||
| @@ -146,12 +146,6 @@ typedef u64 dma_addr_t; | |||
| 146 | typedef u32 dma_addr_t; | 146 | typedef u32 dma_addr_t; |
| 147 | #endif /* dma_addr_t */ | 147 | #endif /* dma_addr_t */ |
| 148 | 148 | ||
| 149 | #ifdef __CHECKER__ | ||
| 150 | #else | ||
| 151 | #endif | ||
| 152 | #ifdef __CHECK_ENDIAN__ | ||
| 153 | #else | ||
| 154 | #endif | ||
| 155 | typedef unsigned __bitwise__ gfp_t; | 149 | typedef unsigned __bitwise__ gfp_t; |
| 156 | typedef unsigned __bitwise__ fmode_t; | 150 | typedef unsigned __bitwise__ fmode_t; |
| 157 | typedef unsigned __bitwise__ oom_flags_t; | 151 | typedef unsigned __bitwise__ oom_flags_t; |
diff --git a/include/linux/uidgid.h b/include/linux/uidgid.h index 2d1f9b627f91..0ee05da38899 100644 --- a/include/linux/uidgid.h +++ b/include/linux/uidgid.h | |||
| @@ -29,6 +29,7 @@ typedef struct { | |||
| 29 | #define KUIDT_INIT(value) (kuid_t){ value } | 29 | #define KUIDT_INIT(value) (kuid_t){ value } |
| 30 | #define KGIDT_INIT(value) (kgid_t){ value } | 30 | #define KGIDT_INIT(value) (kgid_t){ value } |
| 31 | 31 | ||
| 32 | #ifdef CONFIG_MULTIUSER | ||
| 32 | static inline uid_t __kuid_val(kuid_t uid) | 33 | static inline uid_t __kuid_val(kuid_t uid) |
| 33 | { | 34 | { |
| 34 | return uid.val; | 35 | return uid.val; |
| @@ -38,6 +39,17 @@ static inline gid_t __kgid_val(kgid_t gid) | |||
| 38 | { | 39 | { |
| 39 | return gid.val; | 40 | return gid.val; |
| 40 | } | 41 | } |
| 42 | #else | ||
| 43 | static inline uid_t __kuid_val(kuid_t uid) | ||
| 44 | { | ||
| 45 | return 0; | ||
| 46 | } | ||
| 47 | |||
| 48 | static inline gid_t __kgid_val(kgid_t gid) | ||
| 49 | { | ||
| 50 | return 0; | ||
| 51 | } | ||
| 52 | #endif | ||
| 41 | 53 | ||
| 42 | #define GLOBAL_ROOT_UID KUIDT_INIT(0) | 54 | #define GLOBAL_ROOT_UID KUIDT_INIT(0) |
| 43 | #define GLOBAL_ROOT_GID KGIDT_INIT(0) | 55 | #define GLOBAL_ROOT_GID KGIDT_INIT(0) |
diff --git a/include/linux/zsmalloc.h b/include/linux/zsmalloc.h index 3283c6a55425..1338190b5478 100644 --- a/include/linux/zsmalloc.h +++ b/include/linux/zsmalloc.h | |||
| @@ -47,5 +47,6 @@ void *zs_map_object(struct zs_pool *pool, unsigned long handle, | |||
| 47 | void zs_unmap_object(struct zs_pool *pool, unsigned long handle); | 47 | void zs_unmap_object(struct zs_pool *pool, unsigned long handle); |
| 48 | 48 | ||
| 49 | unsigned long zs_get_total_pages(struct zs_pool *pool); | 49 | unsigned long zs_get_total_pages(struct zs_pool *pool); |
| 50 | unsigned long zs_compact(struct zs_pool *pool); | ||
| 50 | 51 | ||
| 51 | #endif | 52 | #endif |
diff --git a/include/trace/events/cma.h b/include/trace/events/cma.h new file mode 100644 index 000000000000..d7cd961720a7 --- /dev/null +++ b/include/trace/events/cma.h | |||
| @@ -0,0 +1,66 @@ | |||
| 1 | #undef TRACE_SYSTEM | ||
| 2 | #define TRACE_SYSTEM cma | ||
| 3 | |||
| 4 | #if !defined(_TRACE_CMA_H) || defined(TRACE_HEADER_MULTI_READ) | ||
| 5 | #define _TRACE_CMA_H | ||
| 6 | |||
| 7 | #include <linux/types.h> | ||
| 8 | #include <linux/tracepoint.h> | ||
| 9 | |||
| 10 | TRACE_EVENT(cma_alloc, | ||
| 11 | |||
| 12 | TP_PROTO(unsigned long pfn, const struct page *page, | ||
| 13 | unsigned int count, unsigned int align), | ||
| 14 | |||
| 15 | TP_ARGS(pfn, page, count, align), | ||
| 16 | |||
| 17 | TP_STRUCT__entry( | ||
| 18 | __field(unsigned long, pfn) | ||
| 19 | __field(const struct page *, page) | ||
| 20 | __field(unsigned int, count) | ||
| 21 | __field(unsigned int, align) | ||
| 22 | ), | ||
| 23 | |||
| 24 | TP_fast_assign( | ||
| 25 | __entry->pfn = pfn; | ||
| 26 | __entry->page = page; | ||
| 27 | __entry->count = count; | ||
| 28 | __entry->align = align; | ||
| 29 | ), | ||
| 30 | |||
| 31 | TP_printk("pfn=%lx page=%p count=%u align=%u", | ||
| 32 | __entry->pfn, | ||
| 33 | __entry->page, | ||
| 34 | __entry->count, | ||
| 35 | __entry->align) | ||
| 36 | ); | ||
| 37 | |||
| 38 | TRACE_EVENT(cma_release, | ||
| 39 | |||
| 40 | TP_PROTO(unsigned long pfn, const struct page *page, | ||
| 41 | unsigned int count), | ||
| 42 | |||
| 43 | TP_ARGS(pfn, page, count), | ||
| 44 | |||
| 45 | TP_STRUCT__entry( | ||
| 46 | __field(unsigned long, pfn) | ||
| 47 | __field(const struct page *, page) | ||
| 48 | __field(unsigned int, count) | ||
| 49 | ), | ||
| 50 | |||
| 51 | TP_fast_assign( | ||
| 52 | __entry->pfn = pfn; | ||
| 53 | __entry->page = page; | ||
| 54 | __entry->count = count; | ||
| 55 | ), | ||
| 56 | |||
| 57 | TP_printk("pfn=%lx page=%p count=%u", | ||
| 58 | __entry->pfn, | ||
| 59 | __entry->page, | ||
| 60 | __entry->count) | ||
| 61 | ); | ||
| 62 | |||
| 63 | #endif /* _TRACE_CMA_H */ | ||
| 64 | |||
| 65 | /* This part must be outside protection */ | ||
| 66 | #include <trace/define_trace.h> | ||
