diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-08 18:57:47 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-08 18:57:47 -0400 |
| commit | 8065be8d032f38da25b54bf077a05a30d9ce9f2a (patch) | |
| tree | 32a7baf4b40e0240ab4b9dd6f2bbe6129929bb66 /include | |
| parent | 27d438c56009e5ae632de36fe70985d1aab5e344 (diff) | |
| parent | ecc265fe9e09e32a3573b2ba26e79b2099eb8bbb (diff) | |
Merge branch 'akpm' (second patchbomb from Andrew Morton)
Merge more incoming from Andrew Morton:
"Two new syscalls:
memfd_create in "shm: add memfd_create() syscall"
kexec_file_load in "kexec: implementation of new syscall kexec_file_load"
And:
- Most (all?) of the rest of MM
- Lots of the usual misc bits
- fs/autofs4
- drivers/rtc
- fs/nilfs
- procfs
- fork.c, exec.c
- more in lib/
- rapidio
- Janitorial work in filesystems: fs/ufs, fs/reiserfs, fs/adfs,
fs/cramfs, fs/romfs, fs/qnx6.
- initrd/initramfs work
- "file sealing" and the memfd_create() syscall, in tmpfs
- add pci_zalloc_consistent, use it in lots of places
- MAINTAINERS maintenance
- kexec feature work"
* emailed patches from Andrew Morton <akpm@linux-foundation.org: (193 commits)
MAINTAINERS: update nomadik patterns
MAINTAINERS: update usb/gadget patterns
MAINTAINERS: update DMA BUFFER SHARING patterns
kexec: verify the signature of signed PE bzImage
kexec: support kexec/kdump on EFI systems
kexec: support for kexec on panic using new system call
kexec-bzImage64: support for loading bzImage using 64bit entry
kexec: load and relocate purgatory at kernel load time
purgatory: core purgatory functionality
purgatory/sha256: provide implementation of sha256 in purgaotory context
kexec: implementation of new syscall kexec_file_load
kexec: new syscall kexec_file_load() declaration
kexec: make kexec_segment user buffer pointer a union
resource: provide new functions to walk through resources
kexec: use common function for kimage_normal_alloc() and kimage_crash_alloc()
kexec: move segment verification code in a separate function
kexec: rename unusebale_pages to unusable_pages
kernel: build bin2c based on config option CONFIG_BUILD_BIN2C
bin2c: move bin2c in scripts/basic
shm: wait for pins to be released when sealing
...
Diffstat (limited to 'include')
31 files changed, 340 insertions, 194 deletions
diff --git a/include/asm-generic/pci-dma-compat.h b/include/asm-generic/pci-dma-compat.h index 1437b7da09b2..c110843fc53b 100644 --- a/include/asm-generic/pci-dma-compat.h +++ b/include/asm-generic/pci-dma-compat.h | |||
| @@ -19,6 +19,14 @@ pci_alloc_consistent(struct pci_dev *hwdev, size_t size, | |||
| 19 | return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle, GFP_ATOMIC); | 19 | return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle, GFP_ATOMIC); |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | static inline void * | ||
| 23 | pci_zalloc_consistent(struct pci_dev *hwdev, size_t size, | ||
| 24 | dma_addr_t *dma_handle) | ||
| 25 | { | ||
| 26 | return dma_zalloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, | ||
| 27 | size, dma_handle, GFP_ATOMIC); | ||
| 28 | } | ||
| 29 | |||
| 22 | static inline void | 30 | static inline void |
| 23 | pci_free_consistent(struct pci_dev *hwdev, size_t size, | 31 | pci_free_consistent(struct pci_dev *hwdev, size_t size, |
| 24 | void *vaddr, dma_addr_t dma_handle) | 32 | void *vaddr, dma_addr_t dma_handle) |
diff --git a/include/linux/decompress/bunzip2.h b/include/linux/decompress/bunzip2.h index 115272137a9c..4d683df898e6 100644 --- a/include/linux/decompress/bunzip2.h +++ b/include/linux/decompress/bunzip2.h | |||
| @@ -1,10 +1,10 @@ | |||
| 1 | #ifndef DECOMPRESS_BUNZIP2_H | 1 | #ifndef DECOMPRESS_BUNZIP2_H |
| 2 | #define DECOMPRESS_BUNZIP2_H | 2 | #define DECOMPRESS_BUNZIP2_H |
| 3 | 3 | ||
| 4 | int bunzip2(unsigned char *inbuf, int len, | 4 | int bunzip2(unsigned char *inbuf, long len, |
| 5 | int(*fill)(void*, unsigned int), | 5 | long (*fill)(void*, unsigned long), |
| 6 | int(*flush)(void*, unsigned int), | 6 | long (*flush)(void*, unsigned long), |
| 7 | unsigned char *output, | 7 | unsigned char *output, |
| 8 | int *pos, | 8 | long *pos, |
| 9 | void(*error)(char *x)); | 9 | void(*error)(char *x)); |
| 10 | #endif | 10 | #endif |
diff --git a/include/linux/decompress/generic.h b/include/linux/decompress/generic.h index 0c7111a55a1a..1fcfd64b5076 100644 --- a/include/linux/decompress/generic.h +++ b/include/linux/decompress/generic.h | |||
| @@ -1,11 +1,11 @@ | |||
| 1 | #ifndef DECOMPRESS_GENERIC_H | 1 | #ifndef DECOMPRESS_GENERIC_H |
| 2 | #define DECOMPRESS_GENERIC_H | 2 | #define DECOMPRESS_GENERIC_H |
| 3 | 3 | ||
| 4 | typedef int (*decompress_fn) (unsigned char *inbuf, int len, | 4 | typedef int (*decompress_fn) (unsigned char *inbuf, long len, |
| 5 | int(*fill)(void*, unsigned int), | 5 | long (*fill)(void*, unsigned long), |
| 6 | int(*flush)(void*, unsigned int), | 6 | long (*flush)(void*, unsigned long), |
| 7 | unsigned char *outbuf, | 7 | unsigned char *outbuf, |
| 8 | int *posp, | 8 | long *posp, |
| 9 | void(*error)(char *x)); | 9 | void(*error)(char *x)); |
| 10 | 10 | ||
| 11 | /* inbuf - input buffer | 11 | /* inbuf - input buffer |
| @@ -33,7 +33,7 @@ typedef int (*decompress_fn) (unsigned char *inbuf, int len, | |||
| 33 | 33 | ||
| 34 | 34 | ||
| 35 | /* Utility routine to detect the decompression method */ | 35 | /* Utility routine to detect the decompression method */ |
| 36 | decompress_fn decompress_method(const unsigned char *inbuf, int len, | 36 | decompress_fn decompress_method(const unsigned char *inbuf, long len, |
| 37 | const char **name); | 37 | const char **name); |
| 38 | 38 | ||
| 39 | #endif | 39 | #endif |
diff --git a/include/linux/decompress/inflate.h b/include/linux/decompress/inflate.h index 1d0aedef9822..e4f411fdbd24 100644 --- a/include/linux/decompress/inflate.h +++ b/include/linux/decompress/inflate.h | |||
| @@ -1,10 +1,10 @@ | |||
| 1 | #ifndef LINUX_DECOMPRESS_INFLATE_H | 1 | #ifndef LINUX_DECOMPRESS_INFLATE_H |
| 2 | #define LINUX_DECOMPRESS_INFLATE_H | 2 | #define LINUX_DECOMPRESS_INFLATE_H |
| 3 | 3 | ||
| 4 | int gunzip(unsigned char *inbuf, int len, | 4 | int gunzip(unsigned char *inbuf, long len, |
| 5 | int(*fill)(void*, unsigned int), | 5 | long (*fill)(void*, unsigned long), |
| 6 | int(*flush)(void*, unsigned int), | 6 | long (*flush)(void*, unsigned long), |
| 7 | unsigned char *output, | 7 | unsigned char *output, |
| 8 | int *pos, | 8 | long *pos, |
| 9 | void(*error_fn)(char *x)); | 9 | void(*error_fn)(char *x)); |
| 10 | #endif | 10 | #endif |
diff --git a/include/linux/decompress/unlz4.h b/include/linux/decompress/unlz4.h index d5b68bf3ec92..3273c2f36496 100644 --- a/include/linux/decompress/unlz4.h +++ b/include/linux/decompress/unlz4.h | |||
| @@ -1,10 +1,10 @@ | |||
| 1 | #ifndef DECOMPRESS_UNLZ4_H | 1 | #ifndef DECOMPRESS_UNLZ4_H |
| 2 | #define DECOMPRESS_UNLZ4_H | 2 | #define DECOMPRESS_UNLZ4_H |
| 3 | 3 | ||
| 4 | int unlz4(unsigned char *inbuf, int len, | 4 | int unlz4(unsigned char *inbuf, long len, |
| 5 | int(*fill)(void*, unsigned int), | 5 | long (*fill)(void*, unsigned long), |
| 6 | int(*flush)(void*, unsigned int), | 6 | long (*flush)(void*, unsigned long), |
| 7 | unsigned char *output, | 7 | unsigned char *output, |
| 8 | int *pos, | 8 | long *pos, |
| 9 | void(*error)(char *x)); | 9 | void(*error)(char *x)); |
| 10 | #endif | 10 | #endif |
diff --git a/include/linux/decompress/unlzma.h b/include/linux/decompress/unlzma.h index 7796538f1bf4..8a891a193840 100644 --- a/include/linux/decompress/unlzma.h +++ b/include/linux/decompress/unlzma.h | |||
| @@ -1,11 +1,11 @@ | |||
| 1 | #ifndef DECOMPRESS_UNLZMA_H | 1 | #ifndef DECOMPRESS_UNLZMA_H |
| 2 | #define DECOMPRESS_UNLZMA_H | 2 | #define DECOMPRESS_UNLZMA_H |
| 3 | 3 | ||
| 4 | int unlzma(unsigned char *, int, | 4 | int unlzma(unsigned char *, long, |
| 5 | int(*fill)(void*, unsigned int), | 5 | long (*fill)(void*, unsigned long), |
| 6 | int(*flush)(void*, unsigned int), | 6 | long (*flush)(void*, unsigned long), |
| 7 | unsigned char *output, | 7 | unsigned char *output, |
| 8 | int *posp, | 8 | long *posp, |
| 9 | void(*error)(char *x) | 9 | void(*error)(char *x) |
| 10 | ); | 10 | ); |
| 11 | 11 | ||
diff --git a/include/linux/decompress/unlzo.h b/include/linux/decompress/unlzo.h index 987229752519..af18f95d6570 100644 --- a/include/linux/decompress/unlzo.h +++ b/include/linux/decompress/unlzo.h | |||
| @@ -1,10 +1,10 @@ | |||
| 1 | #ifndef DECOMPRESS_UNLZO_H | 1 | #ifndef DECOMPRESS_UNLZO_H |
| 2 | #define DECOMPRESS_UNLZO_H | 2 | #define DECOMPRESS_UNLZO_H |
| 3 | 3 | ||
| 4 | int unlzo(unsigned char *inbuf, int len, | 4 | int unlzo(unsigned char *inbuf, long len, |
| 5 | int(*fill)(void*, unsigned int), | 5 | long (*fill)(void*, unsigned long), |
| 6 | int(*flush)(void*, unsigned int), | 6 | long (*flush)(void*, unsigned long), |
| 7 | unsigned char *output, | 7 | unsigned char *output, |
| 8 | int *pos, | 8 | long *pos, |
| 9 | void(*error)(char *x)); | 9 | void(*error)(char *x)); |
| 10 | #endif | 10 | #endif |
diff --git a/include/linux/decompress/unxz.h b/include/linux/decompress/unxz.h index 41728fc6c8a1..f764e2a7201e 100644 --- a/include/linux/decompress/unxz.h +++ b/include/linux/decompress/unxz.h | |||
| @@ -10,10 +10,10 @@ | |||
| 10 | #ifndef DECOMPRESS_UNXZ_H | 10 | #ifndef DECOMPRESS_UNXZ_H |
| 11 | #define DECOMPRESS_UNXZ_H | 11 | #define DECOMPRESS_UNXZ_H |
| 12 | 12 | ||
| 13 | int unxz(unsigned char *in, int in_size, | 13 | int unxz(unsigned char *in, long in_size, |
| 14 | int (*fill)(void *dest, unsigned int size), | 14 | long (*fill)(void *dest, unsigned long size), |
| 15 | int (*flush)(void *src, unsigned int size), | 15 | long (*flush)(void *src, unsigned long size), |
| 16 | unsigned char *out, int *in_used, | 16 | unsigned char *out, long *in_used, |
| 17 | void (*error)(char *x)); | 17 | void (*error)(char *x)); |
| 18 | 18 | ||
| 19 | #endif | 19 | #endif |
diff --git a/include/linux/efi.h b/include/linux/efi.h index efc681fd5895..45cb4ffdea62 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h | |||
| @@ -1156,6 +1156,9 @@ int efivars_sysfs_init(void); | |||
| 1156 | #ifdef CONFIG_EFI_RUNTIME_MAP | 1156 | #ifdef CONFIG_EFI_RUNTIME_MAP |
| 1157 | int efi_runtime_map_init(struct kobject *); | 1157 | int efi_runtime_map_init(struct kobject *); |
| 1158 | void efi_runtime_map_setup(void *, int, u32); | 1158 | void efi_runtime_map_setup(void *, int, u32); |
| 1159 | int efi_get_runtime_map_size(void); | ||
| 1160 | int efi_get_runtime_map_desc_size(void); | ||
| 1161 | int efi_runtime_map_copy(void *buf, size_t bufsz); | ||
| 1159 | #else | 1162 | #else |
| 1160 | static inline int efi_runtime_map_init(struct kobject *kobj) | 1163 | static inline int efi_runtime_map_init(struct kobject *kobj) |
| 1161 | { | 1164 | { |
| @@ -1164,6 +1167,22 @@ static inline int efi_runtime_map_init(struct kobject *kobj) | |||
| 1164 | 1167 | ||
| 1165 | static inline void | 1168 | static inline void |
| 1166 | efi_runtime_map_setup(void *map, int nr_entries, u32 desc_size) {} | 1169 | efi_runtime_map_setup(void *map, int nr_entries, u32 desc_size) {} |
| 1170 | |||
| 1171 | static inline int efi_get_runtime_map_size(void) | ||
| 1172 | { | ||
| 1173 | return 0; | ||
| 1174 | } | ||
| 1175 | |||
| 1176 | static inline int efi_get_runtime_map_desc_size(void) | ||
| 1177 | { | ||
| 1178 | return 0; | ||
| 1179 | } | ||
| 1180 | |||
| 1181 | static inline int efi_runtime_map_copy(void *buf, size_t bufsz) | ||
| 1182 | { | ||
| 1183 | return 0; | ||
| 1184 | } | ||
| 1185 | |||
| 1167 | #endif | 1186 | #endif |
| 1168 | 1187 | ||
| 1169 | /* prototypes shared between arch specific and generic stub code */ | 1188 | /* prototypes shared between arch specific and generic stub code */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 1ab6c6913040..f0890e4a7c25 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -387,7 +387,7 @@ struct address_space { | |||
| 387 | struct inode *host; /* owner: inode, block_device */ | 387 | struct inode *host; /* owner: inode, block_device */ |
| 388 | struct radix_tree_root page_tree; /* radix tree of all pages */ | 388 | struct radix_tree_root page_tree; /* radix tree of all pages */ |
| 389 | spinlock_t tree_lock; /* and lock protecting it */ | 389 | spinlock_t tree_lock; /* and lock protecting it */ |
| 390 | unsigned int i_mmap_writable;/* count VM_SHARED mappings */ | 390 | atomic_t i_mmap_writable;/* count VM_SHARED mappings */ |
| 391 | struct rb_root i_mmap; /* tree of private and shared mappings */ | 391 | struct rb_root i_mmap; /* tree of private and shared mappings */ |
| 392 | struct list_head i_mmap_nonlinear;/*list VM_NONLINEAR mappings */ | 392 | struct list_head i_mmap_nonlinear;/*list VM_NONLINEAR mappings */ |
| 393 | struct mutex i_mmap_mutex; /* protect tree, count, list */ | 393 | struct mutex i_mmap_mutex; /* protect tree, count, list */ |
| @@ -470,10 +470,35 @@ static inline int mapping_mapped(struct address_space *mapping) | |||
| 470 | * Note that i_mmap_writable counts all VM_SHARED vmas: do_mmap_pgoff | 470 | * Note that i_mmap_writable counts all VM_SHARED vmas: do_mmap_pgoff |
| 471 | * marks vma as VM_SHARED if it is shared, and the file was opened for | 471 | * marks vma as VM_SHARED if it is shared, and the file was opened for |
| 472 | * writing i.e. vma may be mprotected writable even if now readonly. | 472 | * writing i.e. vma may be mprotected writable even if now readonly. |
| 473 | * | ||
| 474 | * If i_mmap_writable is negative, no new writable mappings are allowed. You | ||
| 475 | * can only deny writable mappings, if none exists right now. | ||
| 473 | */ | 476 | */ |
| 474 | static inline int mapping_writably_mapped(struct address_space *mapping) | 477 | static inline int mapping_writably_mapped(struct address_space *mapping) |
| 475 | { | 478 | { |
| 476 | return mapping->i_mmap_writable != 0; | 479 | return atomic_read(&mapping->i_mmap_writable) > 0; |
| 480 | } | ||
| 481 | |||
| 482 | static inline int mapping_map_writable(struct address_space *mapping) | ||
| 483 | { | ||
| 484 | return atomic_inc_unless_negative(&mapping->i_mmap_writable) ? | ||
| 485 | 0 : -EPERM; | ||
| 486 | } | ||
| 487 | |||
| 488 | static inline void mapping_unmap_writable(struct address_space *mapping) | ||
| 489 | { | ||
| 490 | atomic_dec(&mapping->i_mmap_writable); | ||
| 491 | } | ||
| 492 | |||
| 493 | static inline int mapping_deny_writable(struct address_space *mapping) | ||
| 494 | { | ||
| 495 | return atomic_dec_unless_positive(&mapping->i_mmap_writable) ? | ||
| 496 | 0 : -EBUSY; | ||
| 497 | } | ||
| 498 | |||
| 499 | static inline void mapping_allow_writable(struct address_space *mapping) | ||
| 500 | { | ||
| 501 | atomic_inc(&mapping->i_mmap_writable); | ||
| 477 | } | 502 | } |
| 478 | 503 | ||
| 479 | /* | 504 | /* |
diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 5e3a906cc089..142ec544167c 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h | |||
| @@ -237,6 +237,12 @@ extern int iomem_is_exclusive(u64 addr); | |||
| 237 | extern int | 237 | extern int |
| 238 | walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages, | 238 | walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages, |
| 239 | void *arg, int (*func)(unsigned long, unsigned long, void *)); | 239 | void *arg, int (*func)(unsigned long, unsigned long, void *)); |
| 240 | extern int | ||
| 241 | walk_system_ram_res(u64 start, u64 end, void *arg, | ||
| 242 | int (*func)(u64, u64, void *)); | ||
| 243 | extern int | ||
| 244 | walk_iomem_res(char *name, unsigned long flags, u64 start, u64 end, void *arg, | ||
| 245 | int (*func)(u64, u64, void *)); | ||
| 240 | 246 | ||
| 241 | /* True if any part of r1 overlaps r2 */ | 247 | /* True if any part of r1 overlaps r2 */ |
| 242 | static inline bool resource_overlaps(struct resource *r1, struct resource *r2) | 248 | static inline bool resource_overlaps(struct resource *r1, struct resource *r2) |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 3dc22abbc68a..31ae66f34235 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -470,6 +470,7 @@ extern enum system_states { | |||
| 470 | #define TAINT_FIRMWARE_WORKAROUND 11 | 470 | #define TAINT_FIRMWARE_WORKAROUND 11 |
| 471 | #define TAINT_OOT_MODULE 12 | 471 | #define TAINT_OOT_MODULE 12 |
| 472 | #define TAINT_UNSIGNED_MODULE 13 | 472 | #define TAINT_UNSIGNED_MODULE 13 |
| 473 | #define TAINT_SOFTLOCKUP 14 | ||
| 473 | 474 | ||
| 474 | extern const char hex_asc[]; | 475 | extern const char hex_asc[]; |
| 475 | #define hex_asc_lo(x) hex_asc[((x) & 0x0f)] | 476 | #define hex_asc_lo(x) hex_asc[((x) & 0x0f)] |
diff --git a/include/linux/kexec.h b/include/linux/kexec.h index a75641930049..4b2a0e11cc5b 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/ioport.h> | 10 | #include <linux/ioport.h> |
| 11 | #include <linux/elfcore.h> | 11 | #include <linux/elfcore.h> |
| 12 | #include <linux/elf.h> | 12 | #include <linux/elf.h> |
| 13 | #include <linux/module.h> | ||
| 13 | #include <asm/kexec.h> | 14 | #include <asm/kexec.h> |
| 14 | 15 | ||
| 15 | /* Verify architecture specific macros are defined */ | 16 | /* Verify architecture specific macros are defined */ |
| @@ -69,7 +70,18 @@ typedef unsigned long kimage_entry_t; | |||
| 69 | #define IND_SOURCE 0x8 | 70 | #define IND_SOURCE 0x8 |
| 70 | 71 | ||
| 71 | struct kexec_segment { | 72 | struct kexec_segment { |
| 72 | void __user *buf; | 73 | /* |
| 74 | * This pointer can point to user memory if kexec_load() system | ||
| 75 | * call is used or will point to kernel memory if | ||
| 76 | * kexec_file_load() system call is used. | ||
| 77 | * | ||
| 78 | * Use ->buf when expecting to deal with user memory and use ->kbuf | ||
| 79 | * when expecting to deal with kernel memory. | ||
| 80 | */ | ||
| 81 | union { | ||
| 82 | void __user *buf; | ||
| 83 | void *kbuf; | ||
| 84 | }; | ||
| 73 | size_t bufsz; | 85 | size_t bufsz; |
| 74 | unsigned long mem; | 86 | unsigned long mem; |
| 75 | size_t memsz; | 87 | size_t memsz; |
| @@ -84,6 +96,27 @@ struct compat_kexec_segment { | |||
| 84 | }; | 96 | }; |
| 85 | #endif | 97 | #endif |
| 86 | 98 | ||
| 99 | struct kexec_sha_region { | ||
| 100 | unsigned long start; | ||
| 101 | unsigned long len; | ||
| 102 | }; | ||
| 103 | |||
| 104 | struct purgatory_info { | ||
| 105 | /* Pointer to elf header of read only purgatory */ | ||
| 106 | Elf_Ehdr *ehdr; | ||
| 107 | |||
| 108 | /* Pointer to purgatory sechdrs which are modifiable */ | ||
| 109 | Elf_Shdr *sechdrs; | ||
| 110 | /* | ||
| 111 | * Temporary buffer location where purgatory is loaded and relocated | ||
| 112 | * This memory can be freed post image load | ||
| 113 | */ | ||
| 114 | void *purgatory_buf; | ||
| 115 | |||
| 116 | /* Address where purgatory is finally loaded and is executed from */ | ||
| 117 | unsigned long purgatory_load_addr; | ||
| 118 | }; | ||
| 119 | |||
| 87 | struct kimage { | 120 | struct kimage { |
| 88 | kimage_entry_t head; | 121 | kimage_entry_t head; |
| 89 | kimage_entry_t *entry; | 122 | kimage_entry_t *entry; |
| @@ -100,7 +133,7 @@ struct kimage { | |||
| 100 | 133 | ||
| 101 | struct list_head control_pages; | 134 | struct list_head control_pages; |
| 102 | struct list_head dest_pages; | 135 | struct list_head dest_pages; |
| 103 | struct list_head unuseable_pages; | 136 | struct list_head unusable_pages; |
| 104 | 137 | ||
| 105 | /* Address of next control page to allocate for crash kernels. */ | 138 | /* Address of next control page to allocate for crash kernels. */ |
| 106 | unsigned long control_page; | 139 | unsigned long control_page; |
| @@ -110,13 +143,63 @@ struct kimage { | |||
| 110 | #define KEXEC_TYPE_DEFAULT 0 | 143 | #define KEXEC_TYPE_DEFAULT 0 |
| 111 | #define KEXEC_TYPE_CRASH 1 | 144 | #define KEXEC_TYPE_CRASH 1 |
| 112 | unsigned int preserve_context : 1; | 145 | unsigned int preserve_context : 1; |
| 146 | /* If set, we are using file mode kexec syscall */ | ||
| 147 | unsigned int file_mode:1; | ||
| 113 | 148 | ||
| 114 | #ifdef ARCH_HAS_KIMAGE_ARCH | 149 | #ifdef ARCH_HAS_KIMAGE_ARCH |
| 115 | struct kimage_arch arch; | 150 | struct kimage_arch arch; |
| 116 | #endif | 151 | #endif |
| 152 | |||
| 153 | /* Additional fields for file based kexec syscall */ | ||
| 154 | void *kernel_buf; | ||
| 155 | unsigned long kernel_buf_len; | ||
| 156 | |||
| 157 | void *initrd_buf; | ||
| 158 | unsigned long initrd_buf_len; | ||
| 159 | |||
| 160 | char *cmdline_buf; | ||
| 161 | unsigned long cmdline_buf_len; | ||
| 162 | |||
| 163 | /* File operations provided by image loader */ | ||
| 164 | struct kexec_file_ops *fops; | ||
| 165 | |||
| 166 | /* Image loader handling the kernel can store a pointer here */ | ||
| 167 | void *image_loader_data; | ||
| 168 | |||
| 169 | /* Information for loading purgatory */ | ||
| 170 | struct purgatory_info purgatory_info; | ||
| 117 | }; | 171 | }; |
| 118 | 172 | ||
| 173 | /* | ||
| 174 | * Keeps track of buffer parameters as provided by caller for requesting | ||
| 175 | * memory placement of buffer. | ||
| 176 | */ | ||
| 177 | struct kexec_buf { | ||
| 178 | struct kimage *image; | ||
| 179 | char *buffer; | ||
| 180 | unsigned long bufsz; | ||
| 181 | unsigned long memsz; | ||
| 182 | unsigned long buf_align; | ||
| 183 | unsigned long buf_min; | ||
| 184 | unsigned long buf_max; | ||
| 185 | bool top_down; /* allocate from top of memory hole */ | ||
| 186 | }; | ||
| 119 | 187 | ||
| 188 | typedef int (kexec_probe_t)(const char *kernel_buf, unsigned long kernel_size); | ||
| 189 | typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf, | ||
| 190 | unsigned long kernel_len, char *initrd, | ||
| 191 | unsigned long initrd_len, char *cmdline, | ||
| 192 | unsigned long cmdline_len); | ||
| 193 | typedef int (kexec_cleanup_t)(void *loader_data); | ||
| 194 | typedef int (kexec_verify_sig_t)(const char *kernel_buf, | ||
| 195 | unsigned long kernel_len); | ||
| 196 | |||
| 197 | struct kexec_file_ops { | ||
| 198 | kexec_probe_t *probe; | ||
| 199 | kexec_load_t *load; | ||
| 200 | kexec_cleanup_t *cleanup; | ||
| 201 | kexec_verify_sig_t *verify_sig; | ||
| 202 | }; | ||
| 120 | 203 | ||
| 121 | /* kexec interface functions */ | 204 | /* kexec interface functions */ |
| 122 | extern void machine_kexec(struct kimage *image); | 205 | extern void machine_kexec(struct kimage *image); |
| @@ -127,8 +210,21 @@ extern asmlinkage long sys_kexec_load(unsigned long entry, | |||
| 127 | struct kexec_segment __user *segments, | 210 | struct kexec_segment __user *segments, |
| 128 | unsigned long flags); | 211 | unsigned long flags); |
| 129 | extern int kernel_kexec(void); | 212 | extern int kernel_kexec(void); |
| 213 | extern int kexec_add_buffer(struct kimage *image, char *buffer, | ||
| 214 | unsigned long bufsz, unsigned long memsz, | ||
| 215 | unsigned long buf_align, unsigned long buf_min, | ||
| 216 | unsigned long buf_max, bool top_down, | ||
| 217 | unsigned long *load_addr); | ||
| 130 | extern struct page *kimage_alloc_control_pages(struct kimage *image, | 218 | extern struct page *kimage_alloc_control_pages(struct kimage *image, |
| 131 | unsigned int order); | 219 | unsigned int order); |
| 220 | extern int kexec_load_purgatory(struct kimage *image, unsigned long min, | ||
| 221 | unsigned long max, int top_down, | ||
| 222 | unsigned long *load_addr); | ||
| 223 | extern int kexec_purgatory_get_set_symbol(struct kimage *image, | ||
| 224 | const char *name, void *buf, | ||
| 225 | unsigned int size, bool get_value); | ||
| 226 | extern void *kexec_purgatory_get_symbol_addr(struct kimage *image, | ||
| 227 | const char *name); | ||
| 132 | extern void crash_kexec(struct pt_regs *); | 228 | extern void crash_kexec(struct pt_regs *); |
| 133 | int kexec_should_crash(struct task_struct *); | 229 | int kexec_should_crash(struct task_struct *); |
| 134 | void crash_save_cpu(struct pt_regs *regs, int cpu); | 230 | void crash_save_cpu(struct pt_regs *regs, int cpu); |
| @@ -177,6 +273,10 @@ extern int kexec_load_disabled; | |||
| 177 | #define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT) | 273 | #define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT) |
| 178 | #endif | 274 | #endif |
| 179 | 275 | ||
| 276 | /* List of defined/legal kexec file flags */ | ||
| 277 | #define KEXEC_FILE_FLAGS (KEXEC_FILE_UNLOAD | KEXEC_FILE_ON_CRASH | \ | ||
| 278 | KEXEC_FILE_NO_INITRAMFS) | ||
| 279 | |||
| 180 | #define VMCOREINFO_BYTES (4096) | 280 | #define VMCOREINFO_BYTES (4096) |
| 181 | #define VMCOREINFO_NOTE_NAME "VMCOREINFO" | 281 | #define VMCOREINFO_NOTE_NAME "VMCOREINFO" |
| 182 | #define VMCOREINFO_NOTE_NAME_BYTES ALIGN(sizeof(VMCOREINFO_NOTE_NAME), 4) | 282 | #define VMCOREINFO_NOTE_NAME_BYTES ALIGN(sizeof(VMCOREINFO_NOTE_NAME), 4) |
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index eb65d29516ca..e0752d204d9e 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
| @@ -54,39 +54,20 @@ struct mem_cgroup_reclaim_cookie { | |||
| 54 | }; | 54 | }; |
| 55 | 55 | ||
| 56 | #ifdef CONFIG_MEMCG | 56 | #ifdef CONFIG_MEMCG |
| 57 | /* | 57 | int mem_cgroup_try_charge(struct page *page, struct mm_struct *mm, |
| 58 | * All "charge" functions with gfp_mask should use GFP_KERNEL or | 58 | gfp_t gfp_mask, struct mem_cgroup **memcgp); |
| 59 | * (gfp_mask & GFP_RECLAIM_MASK). In current implementatin, memcg doesn't | 59 | void mem_cgroup_commit_charge(struct page *page, struct mem_cgroup *memcg, |
| 60 | * alloc memory but reclaims memory from all available zones. So, "where I want | 60 | bool lrucare); |
| 61 | * memory from" bits of gfp_mask has no meaning. So any bits of that field is | 61 | void mem_cgroup_cancel_charge(struct page *page, struct mem_cgroup *memcg); |
| 62 | * available but adding a rule is better. charge functions' gfp_mask should | 62 | void mem_cgroup_uncharge(struct page *page); |
| 63 | * be set to GFP_KERNEL or gfp_mask & GFP_RECLAIM_MASK for avoiding ambiguous | 63 | void mem_cgroup_uncharge_list(struct list_head *page_list); |
| 64 | * codes. | ||
| 65 | * (Of course, if memcg does memory allocation in future, GFP_KERNEL is sane.) | ||
| 66 | */ | ||
| 67 | 64 | ||
| 68 | extern int mem_cgroup_charge_anon(struct page *page, struct mm_struct *mm, | 65 | void mem_cgroup_migrate(struct page *oldpage, struct page *newpage, |
| 69 | gfp_t gfp_mask); | 66 | bool lrucare); |
| 70 | /* for swap handling */ | ||
| 71 | extern int mem_cgroup_try_charge_swapin(struct mm_struct *mm, | ||
| 72 | struct page *page, gfp_t mask, struct mem_cgroup **memcgp); | ||
| 73 | extern void mem_cgroup_commit_charge_swapin(struct page *page, | ||
| 74 | struct mem_cgroup *memcg); | ||
| 75 | extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *memcg); | ||
| 76 | |||
| 77 | extern int mem_cgroup_charge_file(struct page *page, struct mm_struct *mm, | ||
| 78 | gfp_t gfp_mask); | ||
| 79 | 67 | ||
| 80 | struct lruvec *mem_cgroup_zone_lruvec(struct zone *, struct mem_cgroup *); | 68 | struct lruvec *mem_cgroup_zone_lruvec(struct zone *, struct mem_cgroup *); |
| 81 | struct lruvec *mem_cgroup_page_lruvec(struct page *, struct zone *); | 69 | struct lruvec *mem_cgroup_page_lruvec(struct page *, struct zone *); |
| 82 | 70 | ||
| 83 | /* For coalescing uncharge for reducing memcg' overhead*/ | ||
| 84 | extern void mem_cgroup_uncharge_start(void); | ||
| 85 | extern void mem_cgroup_uncharge_end(void); | ||
| 86 | |||
| 87 | extern void mem_cgroup_uncharge_page(struct page *page); | ||
| 88 | extern void mem_cgroup_uncharge_cache_page(struct page *page); | ||
| 89 | |||
| 90 | bool __mem_cgroup_same_or_subtree(const struct mem_cgroup *root_memcg, | 71 | bool __mem_cgroup_same_or_subtree(const struct mem_cgroup *root_memcg, |
| 91 | struct mem_cgroup *memcg); | 72 | struct mem_cgroup *memcg); |
| 92 | bool task_in_mem_cgroup(struct task_struct *task, | 73 | bool task_in_mem_cgroup(struct task_struct *task, |
| @@ -113,12 +94,6 @@ bool mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *memcg) | |||
| 113 | 94 | ||
| 114 | extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg); | 95 | extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg); |
| 115 | 96 | ||
| 116 | extern void | ||
| 117 | mem_cgroup_prepare_migration(struct page *page, struct page *newpage, | ||
| 118 | struct mem_cgroup **memcgp); | ||
| 119 | extern void mem_cgroup_end_migration(struct mem_cgroup *memcg, | ||
| 120 | struct page *oldpage, struct page *newpage, bool migration_ok); | ||
| 121 | |||
| 122 | struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *, | 97 | struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *, |
| 123 | struct mem_cgroup *, | 98 | struct mem_cgroup *, |
| 124 | struct mem_cgroup_reclaim_cookie *); | 99 | struct mem_cgroup_reclaim_cookie *); |
| @@ -133,8 +108,6 @@ unsigned long mem_cgroup_get_lru_size(struct lruvec *lruvec, enum lru_list); | |||
| 133 | void mem_cgroup_update_lru_size(struct lruvec *, enum lru_list, int); | 108 | void mem_cgroup_update_lru_size(struct lruvec *, enum lru_list, int); |
| 134 | extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, | 109 | extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, |
| 135 | struct task_struct *p); | 110 | struct task_struct *p); |
| 136 | extern void mem_cgroup_replace_page_cache(struct page *oldpage, | ||
| 137 | struct page *newpage); | ||
| 138 | 111 | ||
| 139 | static inline void mem_cgroup_oom_enable(void) | 112 | static inline void mem_cgroup_oom_enable(void) |
| 140 | { | 113 | { |
| @@ -233,46 +206,36 @@ void mem_cgroup_print_bad_page(struct page *page); | |||
| 233 | #else /* CONFIG_MEMCG */ | 206 | #else /* CONFIG_MEMCG */ |
| 234 | struct mem_cgroup; | 207 | struct mem_cgroup; |
| 235 | 208 | ||
| 236 | static inline int mem_cgroup_charge_anon(struct page *page, | 209 | static inline int mem_cgroup_try_charge(struct page *page, struct mm_struct *mm, |
| 237 | struct mm_struct *mm, gfp_t gfp_mask) | 210 | gfp_t gfp_mask, |
| 238 | { | 211 | struct mem_cgroup **memcgp) |
| 239 | return 0; | ||
| 240 | } | ||
| 241 | |||
| 242 | static inline int mem_cgroup_charge_file(struct page *page, | ||
| 243 | struct mm_struct *mm, gfp_t gfp_mask) | ||
| 244 | { | ||
| 245 | return 0; | ||
| 246 | } | ||
| 247 | |||
| 248 | static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm, | ||
| 249 | struct page *page, gfp_t gfp_mask, struct mem_cgroup **memcgp) | ||
| 250 | { | 212 | { |
| 213 | *memcgp = NULL; | ||
| 251 | return 0; | 214 | return 0; |
| 252 | } | 215 | } |
| 253 | 216 | ||
| 254 | static inline void mem_cgroup_commit_charge_swapin(struct page *page, | 217 | static inline void mem_cgroup_commit_charge(struct page *page, |
| 255 | struct mem_cgroup *memcg) | 218 | struct mem_cgroup *memcg, |
| 256 | { | 219 | bool lrucare) |
| 257 | } | ||
| 258 | |||
| 259 | static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *memcg) | ||
| 260 | { | 220 | { |
| 261 | } | 221 | } |
| 262 | 222 | ||
| 263 | static inline void mem_cgroup_uncharge_start(void) | 223 | static inline void mem_cgroup_cancel_charge(struct page *page, |
| 224 | struct mem_cgroup *memcg) | ||
| 264 | { | 225 | { |
| 265 | } | 226 | } |
| 266 | 227 | ||
| 267 | static inline void mem_cgroup_uncharge_end(void) | 228 | static inline void mem_cgroup_uncharge(struct page *page) |
| 268 | { | 229 | { |
| 269 | } | 230 | } |
| 270 | 231 | ||
| 271 | static inline void mem_cgroup_uncharge_page(struct page *page) | 232 | static inline void mem_cgroup_uncharge_list(struct list_head *page_list) |
| 272 | { | 233 | { |
| 273 | } | 234 | } |
| 274 | 235 | ||
| 275 | static inline void mem_cgroup_uncharge_cache_page(struct page *page) | 236 | static inline void mem_cgroup_migrate(struct page *oldpage, |
| 237 | struct page *newpage, | ||
| 238 | bool lrucare) | ||
| 276 | { | 239 | { |
| 277 | } | 240 | } |
| 278 | 241 | ||
| @@ -311,17 +274,6 @@ static inline struct cgroup_subsys_state | |||
| 311 | return NULL; | 274 | return NULL; |
| 312 | } | 275 | } |
| 313 | 276 | ||
| 314 | static inline void | ||
| 315 | mem_cgroup_prepare_migration(struct page *page, struct page *newpage, | ||
| 316 | struct mem_cgroup **memcgp) | ||
| 317 | { | ||
| 318 | } | ||
| 319 | |||
| 320 | static inline void mem_cgroup_end_migration(struct mem_cgroup *memcg, | ||
| 321 | struct page *oldpage, struct page *newpage, bool migration_ok) | ||
| 322 | { | ||
| 323 | } | ||
| 324 | |||
| 325 | static inline struct mem_cgroup * | 277 | static inline struct mem_cgroup * |
| 326 | mem_cgroup_iter(struct mem_cgroup *root, | 278 | mem_cgroup_iter(struct mem_cgroup *root, |
| 327 | struct mem_cgroup *prev, | 279 | struct mem_cgroup *prev, |
| @@ -417,10 +369,6 @@ static inline | |||
| 417 | void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx) | 369 | void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx) |
| 418 | { | 370 | { |
| 419 | } | 371 | } |
| 420 | static inline void mem_cgroup_replace_page_cache(struct page *oldpage, | ||
| 421 | struct page *newpage) | ||
| 422 | { | ||
| 423 | } | ||
| 424 | #endif /* CONFIG_MEMCG */ | 372 | #endif /* CONFIG_MEMCG */ |
| 425 | 373 | ||
| 426 | #if !defined(CONFIG_MEMCG) || !defined(CONFIG_DEBUG_VM) | 374 | #if !defined(CONFIG_MEMCG) || !defined(CONFIG_DEBUG_VM) |
diff --git a/include/linux/mm.h b/include/linux/mm.h index e03dd29145a0..8981cc882ed2 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -2014,13 +2014,20 @@ static inline bool kernel_page_present(struct page *page) { return true; } | |||
| 2014 | #endif /* CONFIG_HIBERNATION */ | 2014 | #endif /* CONFIG_HIBERNATION */ |
| 2015 | #endif | 2015 | #endif |
| 2016 | 2016 | ||
| 2017 | #ifdef __HAVE_ARCH_GATE_AREA | ||
| 2017 | extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm); | 2018 | extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm); |
| 2018 | #ifdef __HAVE_ARCH_GATE_AREA | 2019 | extern int in_gate_area_no_mm(unsigned long addr); |
| 2019 | int in_gate_area_no_mm(unsigned long addr); | 2020 | extern int in_gate_area(struct mm_struct *mm, unsigned long addr); |
| 2020 | int in_gate_area(struct mm_struct *mm, unsigned long addr); | ||
| 2021 | #else | 2021 | #else |
| 2022 | int in_gate_area_no_mm(unsigned long addr); | 2022 | static inline struct vm_area_struct *get_gate_vma(struct mm_struct *mm) |
| 2023 | #define in_gate_area(mm, addr) ({(void)mm; in_gate_area_no_mm(addr);}) | 2023 | { |
| 2024 | return NULL; | ||
| 2025 | } | ||
| 2026 | static inline int in_gate_area_no_mm(unsigned long addr) { return 0; } | ||
| 2027 | static inline int in_gate_area(struct mm_struct *mm, unsigned long addr) | ||
| 2028 | { | ||
| 2029 | return 0; | ||
| 2030 | } | ||
| 2024 | #endif /* __HAVE_ARCH_GATE_AREA */ | 2031 | #endif /* __HAVE_ARCH_GATE_AREA */ |
| 2025 | 2032 | ||
| 2026 | #ifdef CONFIG_SYSCTL | 2033 | #ifdef CONFIG_SYSCTL |
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 796deac19fcf..6e0b286649f1 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h | |||
| @@ -461,6 +461,7 @@ static inline void mm_init_cpumask(struct mm_struct *mm) | |||
| 461 | #ifdef CONFIG_CPUMASK_OFFSTACK | 461 | #ifdef CONFIG_CPUMASK_OFFSTACK |
| 462 | mm->cpu_vm_mask_var = &mm->cpumask_allocation; | 462 | mm->cpu_vm_mask_var = &mm->cpumask_allocation; |
| 463 | #endif | 463 | #endif |
| 464 | cpumask_clear(mm->cpu_vm_mask_var); | ||
| 464 | } | 465 | } |
| 465 | 466 | ||
| 466 | /* Future-safe accessor for struct mm_struct's cpu_vm_mask. */ | 467 | /* Future-safe accessor for struct mm_struct's cpu_vm_mask. */ |
diff --git a/include/linux/page_cgroup.h b/include/linux/page_cgroup.h index 777a524716db..5c831f1eca79 100644 --- a/include/linux/page_cgroup.h +++ b/include/linux/page_cgroup.h | |||
| @@ -3,17 +3,15 @@ | |||
| 3 | 3 | ||
| 4 | enum { | 4 | enum { |
| 5 | /* flags for mem_cgroup */ | 5 | /* flags for mem_cgroup */ |
| 6 | PCG_LOCK, /* Lock for pc->mem_cgroup and following bits. */ | 6 | PCG_USED = 0x01, /* This page is charged to a memcg */ |
| 7 | PCG_USED, /* this object is in use. */ | 7 | PCG_MEM = 0x02, /* This page holds a memory charge */ |
| 8 | PCG_MIGRATION, /* under page migration */ | 8 | PCG_MEMSW = 0x04, /* This page holds a memory+swap charge */ |
| 9 | __NR_PCG_FLAGS, | ||
| 10 | }; | 9 | }; |
| 11 | 10 | ||
| 12 | #ifndef __GENERATING_BOUNDS_H | 11 | struct pglist_data; |
| 13 | #include <generated/bounds.h> | ||
| 14 | 12 | ||
| 15 | #ifdef CONFIG_MEMCG | 13 | #ifdef CONFIG_MEMCG |
| 16 | #include <linux/bit_spinlock.h> | 14 | struct mem_cgroup; |
| 17 | 15 | ||
| 18 | /* | 16 | /* |
| 19 | * Page Cgroup can be considered as an extended mem_map. | 17 | * Page Cgroup can be considered as an extended mem_map. |
| @@ -27,65 +25,30 @@ struct page_cgroup { | |||
| 27 | struct mem_cgroup *mem_cgroup; | 25 | struct mem_cgroup *mem_cgroup; |
| 28 | }; | 26 | }; |
| 29 | 27 | ||
| 30 | void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat); | 28 | extern void pgdat_page_cgroup_init(struct pglist_data *pgdat); |
| 31 | 29 | ||
| 32 | #ifdef CONFIG_SPARSEMEM | 30 | #ifdef CONFIG_SPARSEMEM |
| 33 | static inline void __init page_cgroup_init_flatmem(void) | 31 | static inline void page_cgroup_init_flatmem(void) |
| 34 | { | 32 | { |
| 35 | } | 33 | } |
| 36 | extern void __init page_cgroup_init(void); | 34 | extern void page_cgroup_init(void); |
| 37 | #else | 35 | #else |
| 38 | void __init page_cgroup_init_flatmem(void); | 36 | extern void page_cgroup_init_flatmem(void); |
| 39 | static inline void __init page_cgroup_init(void) | 37 | static inline void page_cgroup_init(void) |
| 40 | { | 38 | { |
| 41 | } | 39 | } |
| 42 | #endif | 40 | #endif |
| 43 | 41 | ||
| 44 | struct page_cgroup *lookup_page_cgroup(struct page *page); | 42 | struct page_cgroup *lookup_page_cgroup(struct page *page); |
| 45 | struct page *lookup_cgroup_page(struct page_cgroup *pc); | ||
| 46 | |||
| 47 | #define TESTPCGFLAG(uname, lname) \ | ||
| 48 | static inline int PageCgroup##uname(struct page_cgroup *pc) \ | ||
| 49 | { return test_bit(PCG_##lname, &pc->flags); } | ||
| 50 | |||
| 51 | #define SETPCGFLAG(uname, lname) \ | ||
| 52 | static inline void SetPageCgroup##uname(struct page_cgroup *pc)\ | ||
| 53 | { set_bit(PCG_##lname, &pc->flags); } | ||
| 54 | |||
| 55 | #define CLEARPCGFLAG(uname, lname) \ | ||
| 56 | static inline void ClearPageCgroup##uname(struct page_cgroup *pc) \ | ||
| 57 | { clear_bit(PCG_##lname, &pc->flags); } | ||
| 58 | |||
| 59 | #define TESTCLEARPCGFLAG(uname, lname) \ | ||
| 60 | static inline int TestClearPageCgroup##uname(struct page_cgroup *pc) \ | ||
| 61 | { return test_and_clear_bit(PCG_##lname, &pc->flags); } | ||
| 62 | |||
| 63 | TESTPCGFLAG(Used, USED) | ||
| 64 | CLEARPCGFLAG(Used, USED) | ||
| 65 | SETPCGFLAG(Used, USED) | ||
| 66 | |||
| 67 | SETPCGFLAG(Migration, MIGRATION) | ||
| 68 | CLEARPCGFLAG(Migration, MIGRATION) | ||
| 69 | TESTPCGFLAG(Migration, MIGRATION) | ||
| 70 | 43 | ||
| 71 | static inline void lock_page_cgroup(struct page_cgroup *pc) | 44 | static inline int PageCgroupUsed(struct page_cgroup *pc) |
| 72 | { | 45 | { |
| 73 | /* | 46 | return !!(pc->flags & PCG_USED); |
| 74 | * Don't take this lock in IRQ context. | ||
| 75 | * This lock is for pc->mem_cgroup, USED, MIGRATION | ||
| 76 | */ | ||
| 77 | bit_spin_lock(PCG_LOCK, &pc->flags); | ||
| 78 | } | 47 | } |
| 79 | 48 | #else /* !CONFIG_MEMCG */ | |
| 80 | static inline void unlock_page_cgroup(struct page_cgroup *pc) | ||
| 81 | { | ||
| 82 | bit_spin_unlock(PCG_LOCK, &pc->flags); | ||
| 83 | } | ||
| 84 | |||
| 85 | #else /* CONFIG_MEMCG */ | ||
| 86 | struct page_cgroup; | 49 | struct page_cgroup; |
| 87 | 50 | ||
| 88 | static inline void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat) | 51 | static inline void pgdat_page_cgroup_init(struct pglist_data *pgdat) |
| 89 | { | 52 | { |
| 90 | } | 53 | } |
| 91 | 54 | ||
| @@ -98,10 +61,9 @@ static inline void page_cgroup_init(void) | |||
| 98 | { | 61 | { |
| 99 | } | 62 | } |
| 100 | 63 | ||
| 101 | static inline void __init page_cgroup_init_flatmem(void) | 64 | static inline void page_cgroup_init_flatmem(void) |
| 102 | { | 65 | { |
| 103 | } | 66 | } |
| 104 | |||
| 105 | #endif /* CONFIG_MEMCG */ | 67 | #endif /* CONFIG_MEMCG */ |
| 106 | 68 | ||
| 107 | #include <linux/swap.h> | 69 | #include <linux/swap.h> |
| @@ -140,6 +102,4 @@ static inline void swap_cgroup_swapoff(int type) | |||
| 140 | 102 | ||
| 141 | #endif /* CONFIG_MEMCG_SWAP */ | 103 | #endif /* CONFIG_MEMCG_SWAP */ |
| 142 | 104 | ||
| 143 | #endif /* !__GENERATING_BOUNDS_H */ | ||
| 144 | |||
| 145 | #endif /* __LINUX_PAGE_CGROUP_H */ | 105 | #endif /* __LINUX_PAGE_CGROUP_H */ |
diff --git a/include/linux/rio_drv.h b/include/linux/rio_drv.h index 5059994fe297..9fc2f213e74f 100644 --- a/include/linux/rio_drv.h +++ b/include/linux/rio_drv.h | |||
| @@ -384,11 +384,16 @@ void rio_dev_put(struct rio_dev *); | |||
| 384 | 384 | ||
| 385 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE | 385 | #ifdef CONFIG_RAPIDIO_DMA_ENGINE |
| 386 | extern struct dma_chan *rio_request_dma(struct rio_dev *rdev); | 386 | extern struct dma_chan *rio_request_dma(struct rio_dev *rdev); |
| 387 | extern struct dma_chan *rio_request_mport_dma(struct rio_mport *mport); | ||
| 387 | extern void rio_release_dma(struct dma_chan *dchan); | 388 | extern void rio_release_dma(struct dma_chan *dchan); |
| 388 | extern struct dma_async_tx_descriptor *rio_dma_prep_slave_sg( | 389 | extern struct dma_async_tx_descriptor *rio_dma_prep_slave_sg( |
| 389 | struct rio_dev *rdev, struct dma_chan *dchan, | 390 | struct rio_dev *rdev, struct dma_chan *dchan, |
| 390 | struct rio_dma_data *data, | 391 | struct rio_dma_data *data, |
| 391 | enum dma_transfer_direction direction, unsigned long flags); | 392 | enum dma_transfer_direction direction, unsigned long flags); |
| 393 | extern struct dma_async_tx_descriptor *rio_dma_prep_xfer( | ||
| 394 | struct dma_chan *dchan, u16 destid, | ||
| 395 | struct rio_dma_data *data, | ||
| 396 | enum dma_transfer_direction direction, unsigned long flags); | ||
| 392 | #endif | 397 | #endif |
| 393 | 398 | ||
| 394 | /** | 399 | /** |
diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h index f4ec8bbcb372..ed8f9e70df9b 100644 --- a/include/linux/scatterlist.h +++ b/include/linux/scatterlist.h | |||
| @@ -136,7 +136,7 @@ static inline void sg_set_buf(struct scatterlist *sg, const void *buf, | |||
| 136 | static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents, | 136 | static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents, |
| 137 | struct scatterlist *sgl) | 137 | struct scatterlist *sgl) |
| 138 | { | 138 | { |
| 139 | #ifndef ARCH_HAS_SG_CHAIN | 139 | #ifndef CONFIG_ARCH_HAS_SG_CHAIN |
| 140 | BUG(); | 140 | BUG(); |
| 141 | #endif | 141 | #endif |
| 142 | 142 | ||
diff --git a/include/linux/sched.h b/include/linux/sched.h index 7c19d552dc3f..db2f6474e95e 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -33,6 +33,7 @@ struct sched_param { | |||
| 33 | 33 | ||
| 34 | #include <linux/smp.h> | 34 | #include <linux/smp.h> |
| 35 | #include <linux/sem.h> | 35 | #include <linux/sem.h> |
| 36 | #include <linux/shm.h> | ||
| 36 | #include <linux/signal.h> | 37 | #include <linux/signal.h> |
| 37 | #include <linux/compiler.h> | 38 | #include <linux/compiler.h> |
| 38 | #include <linux/completion.h> | 39 | #include <linux/completion.h> |
| @@ -1385,6 +1386,7 @@ struct task_struct { | |||
| 1385 | #ifdef CONFIG_SYSVIPC | 1386 | #ifdef CONFIG_SYSVIPC |
| 1386 | /* ipc stuff */ | 1387 | /* ipc stuff */ |
| 1387 | struct sysv_sem sysvsem; | 1388 | struct sysv_sem sysvsem; |
| 1389 | struct sysv_shm sysvshm; | ||
| 1388 | #endif | 1390 | #endif |
| 1389 | #ifdef CONFIG_DETECT_HUNG_TASK | 1391 | #ifdef CONFIG_DETECT_HUNG_TASK |
| 1390 | /* hung task detection */ | 1392 | /* hung task detection */ |
| @@ -1628,12 +1630,6 @@ struct task_struct { | |||
| 1628 | unsigned long trace_recursion; | 1630 | unsigned long trace_recursion; |
| 1629 | #endif /* CONFIG_TRACING */ | 1631 | #endif /* CONFIG_TRACING */ |
| 1630 | #ifdef CONFIG_MEMCG /* memcg uses this to do batch job */ | 1632 | #ifdef CONFIG_MEMCG /* memcg uses this to do batch job */ |
| 1631 | struct memcg_batch_info { | ||
| 1632 | int do_batch; /* incremented when batch uncharge started */ | ||
| 1633 | struct mem_cgroup *memcg; /* target memcg of uncharge */ | ||
| 1634 | unsigned long nr_pages; /* uncharged usage */ | ||
| 1635 | unsigned long memsw_nr_pages; /* uncharged mem+swap usage */ | ||
| 1636 | } memcg_batch; | ||
| 1637 | unsigned int memcg_kmem_skip_account; | 1633 | unsigned int memcg_kmem_skip_account; |
| 1638 | struct memcg_oom_info { | 1634 | struct memcg_oom_info { |
| 1639 | struct mem_cgroup *memcg; | 1635 | struct mem_cgroup *memcg; |
| @@ -2967,15 +2963,10 @@ static inline void inc_syscw(struct task_struct *tsk) | |||
| 2967 | 2963 | ||
| 2968 | #ifdef CONFIG_MEMCG | 2964 | #ifdef CONFIG_MEMCG |
| 2969 | extern void mm_update_next_owner(struct mm_struct *mm); | 2965 | extern void mm_update_next_owner(struct mm_struct *mm); |
| 2970 | extern void mm_init_owner(struct mm_struct *mm, struct task_struct *p); | ||
| 2971 | #else | 2966 | #else |
| 2972 | static inline void mm_update_next_owner(struct mm_struct *mm) | 2967 | static inline void mm_update_next_owner(struct mm_struct *mm) |
| 2973 | { | 2968 | { |
| 2974 | } | 2969 | } |
| 2975 | |||
| 2976 | static inline void mm_init_owner(struct mm_struct *mm, struct task_struct *p) | ||
| 2977 | { | ||
| 2978 | } | ||
| 2979 | #endif /* CONFIG_MEMCG */ | 2970 | #endif /* CONFIG_MEMCG */ |
| 2980 | 2971 | ||
| 2981 | static inline unsigned long task_rlimit(const struct task_struct *tsk, | 2972 | static inline unsigned long task_rlimit(const struct task_struct *tsk, |
diff --git a/include/linux/shm.h b/include/linux/shm.h index 57d77709fbe2..6fb801686ad6 100644 --- a/include/linux/shm.h +++ b/include/linux/shm.h | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #ifndef _LINUX_SHM_H_ | 1 | #ifndef _LINUX_SHM_H_ |
| 2 | #define _LINUX_SHM_H_ | 2 | #define _LINUX_SHM_H_ |
| 3 | 3 | ||
| 4 | #include <linux/list.h> | ||
| 4 | #include <asm/page.h> | 5 | #include <asm/page.h> |
| 5 | #include <uapi/linux/shm.h> | 6 | #include <uapi/linux/shm.h> |
| 6 | #include <asm/shmparam.h> | 7 | #include <asm/shmparam.h> |
| @@ -20,6 +21,7 @@ struct shmid_kernel /* private to the kernel */ | |||
| 20 | 21 | ||
| 21 | /* The task created the shm object. NULL if the task is dead. */ | 22 | /* The task created the shm object. NULL if the task is dead. */ |
| 22 | struct task_struct *shm_creator; | 23 | struct task_struct *shm_creator; |
| 24 | struct list_head shm_clist; /* list by creator */ | ||
| 23 | }; | 25 | }; |
| 24 | 26 | ||
| 25 | /* shm_mode upper byte flags */ | 27 | /* shm_mode upper byte flags */ |
| @@ -44,11 +46,20 @@ struct shmid_kernel /* private to the kernel */ | |||
| 44 | #define SHM_HUGE_1GB (30 << SHM_HUGE_SHIFT) | 46 | #define SHM_HUGE_1GB (30 << SHM_HUGE_SHIFT) |
| 45 | 47 | ||
| 46 | #ifdef CONFIG_SYSVIPC | 48 | #ifdef CONFIG_SYSVIPC |
| 49 | struct sysv_shm { | ||
| 50 | struct list_head shm_clist; | ||
| 51 | }; | ||
| 52 | |||
| 47 | long do_shmat(int shmid, char __user *shmaddr, int shmflg, unsigned long *addr, | 53 | long do_shmat(int shmid, char __user *shmaddr, int shmflg, unsigned long *addr, |
| 48 | unsigned long shmlba); | 54 | unsigned long shmlba); |
| 49 | extern int is_file_shm_hugepages(struct file *file); | 55 | int is_file_shm_hugepages(struct file *file); |
| 50 | extern void exit_shm(struct task_struct *task); | 56 | void exit_shm(struct task_struct *task); |
| 57 | #define shm_init_task(task) INIT_LIST_HEAD(&(task)->sysvshm.shm_clist) | ||
| 51 | #else | 58 | #else |
| 59 | struct sysv_shm { | ||
| 60 | /* empty */ | ||
| 61 | }; | ||
| 62 | |||
| 52 | static inline long do_shmat(int shmid, char __user *shmaddr, | 63 | static inline long do_shmat(int shmid, char __user *shmaddr, |
| 53 | int shmflg, unsigned long *addr, | 64 | int shmflg, unsigned long *addr, |
| 54 | unsigned long shmlba) | 65 | unsigned long shmlba) |
| @@ -62,6 +73,9 @@ static inline int is_file_shm_hugepages(struct file *file) | |||
| 62 | static inline void exit_shm(struct task_struct *task) | 73 | static inline void exit_shm(struct task_struct *task) |
| 63 | { | 74 | { |
| 64 | } | 75 | } |
| 76 | static inline void shm_init_task(struct task_struct *task) | ||
| 77 | { | ||
| 78 | } | ||
| 65 | #endif | 79 | #endif |
| 66 | 80 | ||
| 67 | #endif /* _LINUX_SHM_H_ */ | 81 | #endif /* _LINUX_SHM_H_ */ |
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index 4d1771c2d29f..50777b5b1e4c 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #ifndef __SHMEM_FS_H | 1 | #ifndef __SHMEM_FS_H |
| 2 | #define __SHMEM_FS_H | 2 | #define __SHMEM_FS_H |
| 3 | 3 | ||
| 4 | #include <linux/file.h> | ||
| 4 | #include <linux/swap.h> | 5 | #include <linux/swap.h> |
| 5 | #include <linux/mempolicy.h> | 6 | #include <linux/mempolicy.h> |
| 6 | #include <linux/pagemap.h> | 7 | #include <linux/pagemap.h> |
| @@ -11,6 +12,7 @@ | |||
| 11 | 12 | ||
| 12 | struct shmem_inode_info { | 13 | struct shmem_inode_info { |
| 13 | spinlock_t lock; | 14 | spinlock_t lock; |
| 15 | unsigned int seals; /* shmem seals */ | ||
| 14 | unsigned long flags; | 16 | unsigned long flags; |
| 15 | unsigned long alloced; /* data pages alloced to file */ | 17 | unsigned long alloced; /* data pages alloced to file */ |
| 16 | union { | 18 | union { |
| @@ -65,4 +67,19 @@ static inline struct page *shmem_read_mapping_page( | |||
| 65 | mapping_gfp_mask(mapping)); | 67 | mapping_gfp_mask(mapping)); |
| 66 | } | 68 | } |
| 67 | 69 | ||
| 70 | #ifdef CONFIG_TMPFS | ||
| 71 | |||
| 72 | extern int shmem_add_seals(struct file *file, unsigned int seals); | ||
| 73 | extern int shmem_get_seals(struct file *file); | ||
| 74 | extern long shmem_fcntl(struct file *file, unsigned int cmd, unsigned long arg); | ||
| 75 | |||
| 76 | #else | ||
| 77 | |||
| 78 | static inline long shmem_fcntl(struct file *f, unsigned int c, unsigned long a) | ||
| 79 | { | ||
| 80 | return -EINVAL; | ||
| 81 | } | ||
| 82 | |||
| 83 | #endif | ||
| 84 | |||
| 68 | #endif | 85 | #endif |
diff --git a/include/linux/swap.h b/include/linux/swap.h index 1eb64043c076..1b72060f093a 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
| @@ -320,6 +320,9 @@ extern void swap_setup(void); | |||
| 320 | 320 | ||
| 321 | extern void add_page_to_unevictable_list(struct page *page); | 321 | extern void add_page_to_unevictable_list(struct page *page); |
| 322 | 322 | ||
| 323 | extern void lru_cache_add_active_or_unevictable(struct page *page, | ||
| 324 | struct vm_area_struct *vma); | ||
| 325 | |||
| 323 | /* linux/mm/vmscan.c */ | 326 | /* linux/mm/vmscan.c */ |
| 324 | extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order, | 327 | extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order, |
| 325 | gfp_t gfp_mask, nodemask_t *mask); | 328 | gfp_t gfp_mask, nodemask_t *mask); |
| @@ -378,9 +381,13 @@ static inline int mem_cgroup_swappiness(struct mem_cgroup *mem) | |||
| 378 | } | 381 | } |
| 379 | #endif | 382 | #endif |
| 380 | #ifdef CONFIG_MEMCG_SWAP | 383 | #ifdef CONFIG_MEMCG_SWAP |
| 381 | extern void mem_cgroup_uncharge_swap(swp_entry_t ent); | 384 | extern void mem_cgroup_swapout(struct page *page, swp_entry_t entry); |
| 385 | extern void mem_cgroup_uncharge_swap(swp_entry_t entry); | ||
| 382 | #else | 386 | #else |
| 383 | static inline void mem_cgroup_uncharge_swap(swp_entry_t ent) | 387 | static inline void mem_cgroup_swapout(struct page *page, swp_entry_t entry) |
| 388 | { | ||
| 389 | } | ||
| 390 | static inline void mem_cgroup_uncharge_swap(swp_entry_t entry) | ||
| 384 | { | 391 | { |
| 385 | } | 392 | } |
| 386 | #endif | 393 | #endif |
| @@ -440,7 +447,7 @@ extern void swap_shmem_alloc(swp_entry_t); | |||
| 440 | extern int swap_duplicate(swp_entry_t); | 447 | extern int swap_duplicate(swp_entry_t); |
| 441 | extern int swapcache_prepare(swp_entry_t); | 448 | extern int swapcache_prepare(swp_entry_t); |
| 442 | extern void swap_free(swp_entry_t); | 449 | extern void swap_free(swp_entry_t); |
| 443 | extern void swapcache_free(swp_entry_t, struct page *page); | 450 | extern void swapcache_free(swp_entry_t); |
| 444 | extern int free_swap_and_cache(swp_entry_t); | 451 | extern int free_swap_and_cache(swp_entry_t); |
| 445 | extern int swap_type_of(dev_t, sector_t, struct block_device **); | 452 | extern int swap_type_of(dev_t, sector_t, struct block_device **); |
| 446 | extern unsigned int count_swap_pages(int, int); | 453 | extern unsigned int count_swap_pages(int, int); |
| @@ -504,7 +511,7 @@ static inline void swap_free(swp_entry_t swp) | |||
| 504 | { | 511 | { |
| 505 | } | 512 | } |
| 506 | 513 | ||
| 507 | static inline void swapcache_free(swp_entry_t swp, struct page *page) | 514 | static inline void swapcache_free(swp_entry_t swp) |
| 508 | { | 515 | { |
| 509 | } | 516 | } |
| 510 | 517 | ||
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 701daff5d899..0f86d85a9ce4 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -317,6 +317,10 @@ asmlinkage long sys_restart_syscall(void); | |||
| 317 | asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments, | 317 | asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments, |
| 318 | struct kexec_segment __user *segments, | 318 | struct kexec_segment __user *segments, |
| 319 | unsigned long flags); | 319 | unsigned long flags); |
| 320 | asmlinkage long sys_kexec_file_load(int kernel_fd, int initrd_fd, | ||
| 321 | unsigned long cmdline_len, | ||
| 322 | const char __user *cmdline_ptr, | ||
| 323 | unsigned long flags); | ||
| 320 | 324 | ||
| 321 | asmlinkage long sys_exit(int error_code); | 325 | asmlinkage long sys_exit(int error_code); |
| 322 | asmlinkage long sys_exit_group(int error_code); | 326 | asmlinkage long sys_exit_group(int error_code); |
| @@ -802,6 +806,7 @@ asmlinkage long sys_timerfd_settime(int ufd, int flags, | |||
| 802 | asmlinkage long sys_timerfd_gettime(int ufd, struct itimerspec __user *otmr); | 806 | asmlinkage long sys_timerfd_gettime(int ufd, struct itimerspec __user *otmr); |
| 803 | asmlinkage long sys_eventfd(unsigned int count); | 807 | asmlinkage long sys_eventfd(unsigned int count); |
| 804 | asmlinkage long sys_eventfd2(unsigned int count, int flags); | 808 | asmlinkage long sys_eventfd2(unsigned int count, int flags); |
| 809 | asmlinkage long sys_memfd_create(const char __user *uname_ptr, unsigned int flags); | ||
| 805 | asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len); | 810 | asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len); |
| 806 | asmlinkage long sys_old_readdir(unsigned int, struct old_linux_dirent __user *, unsigned int); | 811 | asmlinkage long sys_old_readdir(unsigned int, struct old_linux_dirent __user *, unsigned int); |
| 807 | asmlinkage long sys_pselect6(int, fd_set __user *, fd_set __user *, | 812 | asmlinkage long sys_pselect6(int, fd_set __user *, fd_set __user *, |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index 14a8ff2de11e..b7361f831226 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
| @@ -34,8 +34,6 @@ struct ctl_table_root; | |||
| 34 | struct ctl_table_header; | 34 | struct ctl_table_header; |
| 35 | struct ctl_dir; | 35 | struct ctl_dir; |
| 36 | 36 | ||
| 37 | typedef struct ctl_table ctl_table; | ||
| 38 | |||
| 39 | typedef int proc_handler (struct ctl_table *ctl, int write, | 37 | typedef int proc_handler (struct ctl_table *ctl, int write, |
| 40 | void __user *buffer, size_t *lenp, loff_t *ppos); | 38 | void __user *buffer, size_t *lenp, loff_t *ppos); |
| 41 | 39 | ||
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h index 4836ba3c1cd8..e95372654f09 100644 --- a/include/linux/user_namespace.h +++ b/include/linux/user_namespace.h | |||
| @@ -57,9 +57,9 @@ static inline void put_user_ns(struct user_namespace *ns) | |||
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | struct seq_operations; | 59 | struct seq_operations; |
| 60 | extern struct seq_operations proc_uid_seq_operations; | 60 | extern const struct seq_operations proc_uid_seq_operations; |
| 61 | extern struct seq_operations proc_gid_seq_operations; | 61 | extern const struct seq_operations proc_gid_seq_operations; |
| 62 | extern struct seq_operations proc_projid_seq_operations; | 62 | extern const struct seq_operations proc_projid_seq_operations; |
| 63 | extern ssize_t proc_uid_map_write(struct file *, const char __user *, size_t, loff_t *); | 63 | extern ssize_t proc_uid_map_write(struct file *, const char __user *, size_t, loff_t *); |
| 64 | extern ssize_t proc_gid_map_write(struct file *, const char __user *, size_t, loff_t *); | 64 | extern ssize_t proc_gid_map_write(struct file *, const char __user *, size_t, loff_t *); |
| 65 | extern ssize_t proc_projid_map_write(struct file *, const char __user *, size_t, loff_t *); | 65 | extern ssize_t proc_projid_map_write(struct file *, const char __user *, size_t, loff_t *); |
diff --git a/include/linux/zlib.h b/include/linux/zlib.h index 197abb2a54c5..92dbbd3f6c75 100644 --- a/include/linux/zlib.h +++ b/include/linux/zlib.h | |||
| @@ -83,11 +83,11 @@ struct internal_state; | |||
| 83 | 83 | ||
| 84 | typedef struct z_stream_s { | 84 | typedef struct z_stream_s { |
| 85 | const Byte *next_in; /* next input byte */ | 85 | const Byte *next_in; /* next input byte */ |
| 86 | uInt avail_in; /* number of bytes available at next_in */ | 86 | uLong avail_in; /* number of bytes available at next_in */ |
| 87 | uLong total_in; /* total nb of input bytes read so far */ | 87 | uLong total_in; /* total nb of input bytes read so far */ |
| 88 | 88 | ||
| 89 | Byte *next_out; /* next output byte should be put there */ | 89 | Byte *next_out; /* next output byte should be put there */ |
| 90 | uInt avail_out; /* remaining free space at next_out */ | 90 | uLong avail_out; /* remaining free space at next_out */ |
| 91 | uLong total_out; /* total nb of bytes output so far */ | 91 | uLong total_out; /* total nb of bytes output so far */ |
| 92 | 92 | ||
| 93 | char *msg; /* last error message, NULL if no error */ | 93 | char *msg; /* last error message, NULL if no error */ |
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index e6df23cae7be..261e708010da 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
| @@ -31,7 +31,7 @@ enum scsi_timeouts { | |||
| 31 | * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit | 31 | * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit |
| 32 | * is totally arbitrary, a setting of 2048 will get you at least 8mb ios. | 32 | * is totally arbitrary, a setting of 2048 will get you at least 8mb ios. |
| 33 | */ | 33 | */ |
| 34 | #ifdef ARCH_HAS_SG_CHAIN | 34 | #ifdef CONFIG_ARCH_HAS_SG_CHAIN |
| 35 | #define SCSI_MAX_SG_CHAIN_SEGMENTS 2048 | 35 | #define SCSI_MAX_SG_CHAIN_SEGMENTS 2048 |
| 36 | #else | 36 | #else |
| 37 | #define SCSI_MAX_SG_CHAIN_SEGMENTS SCSI_MAX_SG_SEGMENTS | 37 | #define SCSI_MAX_SG_CHAIN_SEGMENTS SCSI_MAX_SG_SEGMENTS |
diff --git a/include/uapi/linux/fcntl.h b/include/uapi/linux/fcntl.h index 074b886c6be0..beed138bd359 100644 --- a/include/uapi/linux/fcntl.h +++ b/include/uapi/linux/fcntl.h | |||
| @@ -28,6 +28,21 @@ | |||
| 28 | #define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8) | 28 | #define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8) |
| 29 | 29 | ||
| 30 | /* | 30 | /* |
| 31 | * Set/Get seals | ||
| 32 | */ | ||
| 33 | #define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9) | ||
| 34 | #define F_GET_SEALS (F_LINUX_SPECIFIC_BASE + 10) | ||
| 35 | |||
| 36 | /* | ||
| 37 | * Types of seals | ||
| 38 | */ | ||
| 39 | #define F_SEAL_SEAL 0x0001 /* prevent further seals from being set */ | ||
| 40 | #define F_SEAL_SHRINK 0x0002 /* prevent file from shrinking */ | ||
| 41 | #define F_SEAL_GROW 0x0004 /* prevent file from growing */ | ||
| 42 | #define F_SEAL_WRITE 0x0008 /* prevent writes */ | ||
| 43 | /* (1U << 31) is reserved for signed error codes */ | ||
| 44 | |||
| 45 | /* | ||
| 31 | * Types of directory notifications that may be requested. | 46 | * Types of directory notifications that may be requested. |
| 32 | */ | 47 | */ |
| 33 | #define DN_ACCESS 0x00000001 /* File accessed */ | 48 | #define DN_ACCESS 0x00000001 /* File accessed */ |
diff --git a/include/uapi/linux/kexec.h b/include/uapi/linux/kexec.h index d6629d49a243..6925f5b42f89 100644 --- a/include/uapi/linux/kexec.h +++ b/include/uapi/linux/kexec.h | |||
| @@ -13,6 +13,17 @@ | |||
| 13 | #define KEXEC_PRESERVE_CONTEXT 0x00000002 | 13 | #define KEXEC_PRESERVE_CONTEXT 0x00000002 |
| 14 | #define KEXEC_ARCH_MASK 0xffff0000 | 14 | #define KEXEC_ARCH_MASK 0xffff0000 |
| 15 | 15 | ||
| 16 | /* | ||
| 17 | * Kexec file load interface flags. | ||
| 18 | * KEXEC_FILE_UNLOAD : Unload already loaded kexec/kdump image. | ||
| 19 | * KEXEC_FILE_ON_CRASH : Load/unload operation belongs to kdump image. | ||
| 20 | * KEXEC_FILE_NO_INITRAMFS : No initramfs is being loaded. Ignore the initrd | ||
| 21 | * fd field. | ||
| 22 | */ | ||
| 23 | #define KEXEC_FILE_UNLOAD 0x00000001 | ||
| 24 | #define KEXEC_FILE_ON_CRASH 0x00000002 | ||
| 25 | #define KEXEC_FILE_NO_INITRAMFS 0x00000004 | ||
| 26 | |||
| 16 | /* These values match the ELF architecture values. | 27 | /* These values match the ELF architecture values. |
| 17 | * Unless there is a good reason that should continue to be the case. | 28 | * Unless there is a good reason that should continue to be the case. |
| 18 | */ | 29 | */ |
diff --git a/include/uapi/linux/memfd.h b/include/uapi/linux/memfd.h new file mode 100644 index 000000000000..534e364bda92 --- /dev/null +++ b/include/uapi/linux/memfd.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #ifndef _UAPI_LINUX_MEMFD_H | ||
| 2 | #define _UAPI_LINUX_MEMFD_H | ||
| 3 | |||
| 4 | /* flags for memfd_create(2) (unsigned int) */ | ||
| 5 | #define MFD_CLOEXEC 0x0001U | ||
| 6 | #define MFD_ALLOW_SEALING 0x0002U | ||
| 7 | |||
| 8 | #endif /* _UAPI_LINUX_MEMFD_H */ | ||
