diff options
Diffstat (limited to 'include')
55 files changed, 741 insertions, 127 deletions
diff --git a/include/acpi/acnames.h b/include/acpi/acnames.h index f97804bdf1ff..7461327e14e4 100644 --- a/include/acpi/acnames.h +++ b/include/acpi/acnames.h | |||
@@ -52,6 +52,7 @@ | |||
52 | #define METHOD_NAME__CBA "_CBA" | 52 | #define METHOD_NAME__CBA "_CBA" |
53 | #define METHOD_NAME__CID "_CID" | 53 | #define METHOD_NAME__CID "_CID" |
54 | #define METHOD_NAME__CRS "_CRS" | 54 | #define METHOD_NAME__CRS "_CRS" |
55 | #define METHOD_NAME__DDN "_DDN" | ||
55 | #define METHOD_NAME__HID "_HID" | 56 | #define METHOD_NAME__HID "_HID" |
56 | #define METHOD_NAME__INI "_INI" | 57 | #define METHOD_NAME__INI "_INI" |
57 | #define METHOD_NAME__PLD "_PLD" | 58 | #define METHOD_NAME__PLD "_PLD" |
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index 57ee0528aacb..f34a0835aa4f 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -433,6 +433,7 @@ int acpi_device_set_power(struct acpi_device *device, int state); | |||
433 | int acpi_bus_init_power(struct acpi_device *device); | 433 | int acpi_bus_init_power(struct acpi_device *device); |
434 | int acpi_device_fix_up_power(struct acpi_device *device); | 434 | int acpi_device_fix_up_power(struct acpi_device *device); |
435 | int acpi_bus_update_power(acpi_handle handle, int *state_p); | 435 | int acpi_bus_update_power(acpi_handle handle, int *state_p); |
436 | int acpi_device_update_power(struct acpi_device *device, int *state_p); | ||
436 | bool acpi_bus_power_manageable(acpi_handle handle); | 437 | bool acpi_bus_power_manageable(acpi_handle handle); |
437 | 438 | ||
438 | #ifdef CONFIG_PM | 439 | #ifdef CONFIG_PM |
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index 9fc1d71c82bc..ab2acf629a64 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
@@ -46,7 +46,7 @@ | |||
46 | 46 | ||
47 | /* Current ACPICA subsystem version in YYYYMMDD format */ | 47 | /* Current ACPICA subsystem version in YYYYMMDD format */ |
48 | 48 | ||
49 | #define ACPI_CA_VERSION 0x20140828 | 49 | #define ACPI_CA_VERSION 0x20140926 |
50 | 50 | ||
51 | #include <acpi/acconfig.h> | 51 | #include <acpi/acconfig.h> |
52 | #include <acpi/actypes.h> | 52 | #include <acpi/actypes.h> |
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index ac03ec81d342..7000e66f768e 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h | |||
@@ -721,7 +721,7 @@ typedef u32 acpi_event_type; | |||
721 | * | | | +--- Enabled for wake? | 721 | * | | | +--- Enabled for wake? |
722 | * | | +----- Set? | 722 | * | | +----- Set? |
723 | * | +------- Has a handler? | 723 | * | +------- Has a handler? |
724 | * +----------- <Reserved> | 724 | * +------------- <Reserved> |
725 | */ | 725 | */ |
726 | typedef u32 acpi_event_status; | 726 | typedef u32 acpi_event_status; |
727 | 727 | ||
@@ -729,7 +729,7 @@ typedef u32 acpi_event_status; | |||
729 | #define ACPI_EVENT_FLAG_ENABLED (acpi_event_status) 0x01 | 729 | #define ACPI_EVENT_FLAG_ENABLED (acpi_event_status) 0x01 |
730 | #define ACPI_EVENT_FLAG_WAKE_ENABLED (acpi_event_status) 0x02 | 730 | #define ACPI_EVENT_FLAG_WAKE_ENABLED (acpi_event_status) 0x02 |
731 | #define ACPI_EVENT_FLAG_SET (acpi_event_status) 0x04 | 731 | #define ACPI_EVENT_FLAG_SET (acpi_event_status) 0x04 |
732 | #define ACPI_EVENT_FLAG_HANDLE (acpi_event_status) 0x08 | 732 | #define ACPI_EVENT_FLAG_HAS_HANDLER (acpi_event_status) 0x08 |
733 | 733 | ||
734 | /* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */ | 734 | /* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */ |
735 | 735 | ||
diff --git a/include/dt-bindings/clock/imx6qdl-clock.h b/include/dt-bindings/clock/imx6qdl-clock.h index ddaef8620b2c..b690cdba163b 100644 --- a/include/dt-bindings/clock/imx6qdl-clock.h +++ b/include/dt-bindings/clock/imx6qdl-clock.h | |||
@@ -62,8 +62,8 @@ | |||
62 | #define IMX6QDL_CLK_USDHC3_SEL 50 | 62 | #define IMX6QDL_CLK_USDHC3_SEL 50 |
63 | #define IMX6QDL_CLK_USDHC4_SEL 51 | 63 | #define IMX6QDL_CLK_USDHC4_SEL 51 |
64 | #define IMX6QDL_CLK_ENFC_SEL 52 | 64 | #define IMX6QDL_CLK_ENFC_SEL 52 |
65 | #define IMX6QDL_CLK_EMI_SEL 53 | 65 | #define IMX6QDL_CLK_EIM_SEL 53 |
66 | #define IMX6QDL_CLK_EMI_SLOW_SEL 54 | 66 | #define IMX6QDL_CLK_EIM_SLOW_SEL 54 |
67 | #define IMX6QDL_CLK_VDO_AXI_SEL 55 | 67 | #define IMX6QDL_CLK_VDO_AXI_SEL 55 |
68 | #define IMX6QDL_CLK_VPU_AXI_SEL 56 | 68 | #define IMX6QDL_CLK_VPU_AXI_SEL 56 |
69 | #define IMX6QDL_CLK_CKO1_SEL 57 | 69 | #define IMX6QDL_CLK_CKO1_SEL 57 |
@@ -106,8 +106,8 @@ | |||
106 | #define IMX6QDL_CLK_USDHC4_PODF 94 | 106 | #define IMX6QDL_CLK_USDHC4_PODF 94 |
107 | #define IMX6QDL_CLK_ENFC_PRED 95 | 107 | #define IMX6QDL_CLK_ENFC_PRED 95 |
108 | #define IMX6QDL_CLK_ENFC_PODF 96 | 108 | #define IMX6QDL_CLK_ENFC_PODF 96 |
109 | #define IMX6QDL_CLK_EMI_PODF 97 | 109 | #define IMX6QDL_CLK_EIM_PODF 97 |
110 | #define IMX6QDL_CLK_EMI_SLOW_PODF 98 | 110 | #define IMX6QDL_CLK_EIM_SLOW_PODF 98 |
111 | #define IMX6QDL_CLK_VPU_AXI_PODF 99 | 111 | #define IMX6QDL_CLK_VPU_AXI_PODF 99 |
112 | #define IMX6QDL_CLK_CKO1_PODF 100 | 112 | #define IMX6QDL_CLK_CKO1_PODF 100 |
113 | #define IMX6QDL_CLK_AXI 101 | 113 | #define IMX6QDL_CLK_AXI 101 |
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index b7926bb9b444..407a12f663eb 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
@@ -432,6 +432,7 @@ static inline bool acpi_driver_match_device(struct device *dev, | |||
432 | int acpi_device_uevent_modalias(struct device *, struct kobj_uevent_env *); | 432 | int acpi_device_uevent_modalias(struct device *, struct kobj_uevent_env *); |
433 | int acpi_device_modalias(struct device *, char *, int); | 433 | int acpi_device_modalias(struct device *, char *, int); |
434 | 434 | ||
435 | struct platform_device *acpi_create_platform_device(struct acpi_device *); | ||
435 | #define ACPI_PTR(_ptr) (_ptr) | 436 | #define ACPI_PTR(_ptr) (_ptr) |
436 | 437 | ||
437 | #else /* !CONFIG_ACPI */ | 438 | #else /* !CONFIG_ACPI */ |
diff --git a/include/linux/audit.h b/include/linux/audit.h index 36dffeccebdb..e58fe7df8b9c 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
@@ -90,7 +90,7 @@ extern unsigned compat_dir_class[]; | |||
90 | extern unsigned compat_chattr_class[]; | 90 | extern unsigned compat_chattr_class[]; |
91 | extern unsigned compat_signal_class[]; | 91 | extern unsigned compat_signal_class[]; |
92 | 92 | ||
93 | extern int __weak audit_classify_compat_syscall(int abi, unsigned syscall); | 93 | extern int audit_classify_compat_syscall(int abi, unsigned syscall); |
94 | 94 | ||
95 | /* audit_names->type values */ | 95 | /* audit_names->type values */ |
96 | #define AUDIT_TYPE_UNKNOWN 0 /* we don't know yet */ | 96 | #define AUDIT_TYPE_UNKNOWN 0 /* we don't know yet */ |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 0207a78a8d82..6cbee8395f60 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
@@ -1583,13 +1583,13 @@ static inline bool blk_integrity_merge_rq(struct request_queue *rq, | |||
1583 | struct request *r1, | 1583 | struct request *r1, |
1584 | struct request *r2) | 1584 | struct request *r2) |
1585 | { | 1585 | { |
1586 | return 0; | 1586 | return true; |
1587 | } | 1587 | } |
1588 | static inline bool blk_integrity_merge_bio(struct request_queue *rq, | 1588 | static inline bool blk_integrity_merge_bio(struct request_queue *rq, |
1589 | struct request *r, | 1589 | struct request *r, |
1590 | struct bio *b) | 1590 | struct bio *b) |
1591 | { | 1591 | { |
1592 | return 0; | 1592 | return true; |
1593 | } | 1593 | } |
1594 | static inline bool blk_integrity_is_initialized(struct gendisk *g) | 1594 | static inline bool blk_integrity_is_initialized(struct gendisk *g) |
1595 | { | 1595 | { |
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 324329ceea1e..73b45225a7ca 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
@@ -175,12 +175,13 @@ void __wait_on_buffer(struct buffer_head *); | |||
175 | wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); | 175 | wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); |
176 | struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block, | 176 | struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block, |
177 | unsigned size); | 177 | unsigned size); |
178 | struct buffer_head *__getblk(struct block_device *bdev, sector_t block, | 178 | struct buffer_head *__getblk_gfp(struct block_device *bdev, sector_t block, |
179 | unsigned size); | 179 | unsigned size, gfp_t gfp); |
180 | void __brelse(struct buffer_head *); | 180 | void __brelse(struct buffer_head *); |
181 | void __bforget(struct buffer_head *); | 181 | void __bforget(struct buffer_head *); |
182 | void __breadahead(struct block_device *, sector_t block, unsigned int size); | 182 | void __breadahead(struct block_device *, sector_t block, unsigned int size); |
183 | struct buffer_head *__bread(struct block_device *, sector_t block, unsigned size); | 183 | struct buffer_head *__bread_gfp(struct block_device *, |
184 | sector_t block, unsigned size, gfp_t gfp); | ||
184 | void invalidate_bh_lrus(void); | 185 | void invalidate_bh_lrus(void); |
185 | struct buffer_head *alloc_buffer_head(gfp_t gfp_flags); | 186 | struct buffer_head *alloc_buffer_head(gfp_t gfp_flags); |
186 | void free_buffer_head(struct buffer_head * bh); | 187 | void free_buffer_head(struct buffer_head * bh); |
@@ -295,7 +296,13 @@ static inline void bforget(struct buffer_head *bh) | |||
295 | static inline struct buffer_head * | 296 | static inline struct buffer_head * |
296 | sb_bread(struct super_block *sb, sector_t block) | 297 | sb_bread(struct super_block *sb, sector_t block) |
297 | { | 298 | { |
298 | return __bread(sb->s_bdev, block, sb->s_blocksize); | 299 | return __bread_gfp(sb->s_bdev, block, sb->s_blocksize, __GFP_MOVABLE); |
300 | } | ||
301 | |||
302 | static inline struct buffer_head * | ||
303 | sb_bread_unmovable(struct super_block *sb, sector_t block) | ||
304 | { | ||
305 | return __bread_gfp(sb->s_bdev, block, sb->s_blocksize, 0); | ||
299 | } | 306 | } |
300 | 307 | ||
301 | static inline void | 308 | static inline void |
@@ -307,7 +314,7 @@ sb_breadahead(struct super_block *sb, sector_t block) | |||
307 | static inline struct buffer_head * | 314 | static inline struct buffer_head * |
308 | sb_getblk(struct super_block *sb, sector_t block) | 315 | sb_getblk(struct super_block *sb, sector_t block) |
309 | { | 316 | { |
310 | return __getblk(sb->s_bdev, block, sb->s_blocksize); | 317 | return __getblk_gfp(sb->s_bdev, block, sb->s_blocksize, __GFP_MOVABLE); |
311 | } | 318 | } |
312 | 319 | ||
313 | static inline struct buffer_head * | 320 | static inline struct buffer_head * |
@@ -344,6 +351,36 @@ static inline void lock_buffer(struct buffer_head *bh) | |||
344 | __lock_buffer(bh); | 351 | __lock_buffer(bh); |
345 | } | 352 | } |
346 | 353 | ||
354 | static inline struct buffer_head *getblk_unmovable(struct block_device *bdev, | ||
355 | sector_t block, | ||
356 | unsigned size) | ||
357 | { | ||
358 | return __getblk_gfp(bdev, block, size, 0); | ||
359 | } | ||
360 | |||
361 | static inline struct buffer_head *__getblk(struct block_device *bdev, | ||
362 | sector_t block, | ||
363 | unsigned size) | ||
364 | { | ||
365 | return __getblk_gfp(bdev, block, size, __GFP_MOVABLE); | ||
366 | } | ||
367 | |||
368 | /** | ||
369 | * __bread() - reads a specified block and returns the bh | ||
370 | * @bdev: the block_device to read from | ||
371 | * @block: number of block | ||
372 | * @size: size (in bytes) to read | ||
373 | * | ||
374 | * Reads a specified block, and returns buffer head that contains it. | ||
375 | * The page cache is allocated from movable area so that it can be migrated. | ||
376 | * It returns NULL if the block was unreadable. | ||
377 | */ | ||
378 | static inline struct buffer_head * | ||
379 | __bread(struct block_device *bdev, sector_t block, unsigned size) | ||
380 | { | ||
381 | return __bread_gfp(bdev, block, size, __GFP_MOVABLE); | ||
382 | } | ||
383 | |||
347 | extern int __set_page_dirty_buffers(struct page *page); | 384 | extern int __set_page_dirty_buffers(struct page *page); |
348 | 385 | ||
349 | #else /* CONFIG_BLOCK */ | 386 | #else /* CONFIG_BLOCK */ |
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 653f0e2b6ca9..abcafaa20b86 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
@@ -287,7 +287,7 @@ extern struct clocksource* clocksource_get_next(void); | |||
287 | extern void clocksource_change_rating(struct clocksource *cs, int rating); | 287 | extern void clocksource_change_rating(struct clocksource *cs, int rating); |
288 | extern void clocksource_suspend(void); | 288 | extern void clocksource_suspend(void); |
289 | extern void clocksource_resume(void); | 289 | extern void clocksource_resume(void); |
290 | extern struct clocksource * __init __weak clocksource_default_clock(void); | 290 | extern struct clocksource * __init clocksource_default_clock(void); |
291 | extern void clocksource_mark_unstable(struct clocksource *cs); | 291 | extern void clocksource_mark_unstable(struct clocksource *cs); |
292 | 292 | ||
293 | extern u64 | 293 | extern u64 |
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h index 2507fd2a1eb4..d1a558239b1a 100644 --- a/include/linux/compiler-gcc4.h +++ b/include/linux/compiler-gcc4.h | |||
@@ -71,7 +71,6 @@ | |||
71 | * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 | 71 | * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 |
72 | * | 72 | * |
73 | * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. | 73 | * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. |
74 | * Fixed in GCC 4.8.2 and later versions. | ||
75 | * | 74 | * |
76 | * (asm goto is automatically volatile - the naming reflects this.) | 75 | * (asm goto is automatically volatile - the naming reflects this.) |
77 | */ | 76 | */ |
diff --git a/include/linux/compiler-gcc5.h b/include/linux/compiler-gcc5.h index cdd1cc202d51..c8c565952548 100644 --- a/include/linux/compiler-gcc5.h +++ b/include/linux/compiler-gcc5.h | |||
@@ -53,7 +53,6 @@ | |||
53 | * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 | 53 | * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 |
54 | * | 54 | * |
55 | * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. | 55 | * Work it around via a compiler barrier quirk suggested by Jakub Jelinek. |
56 | * Fixed in GCC 4.8.2 and later versions. | ||
57 | * | 56 | * |
58 | * (asm goto is automatically volatile - the naming reflects this.) | 57 | * (asm goto is automatically volatile - the naming reflects this.) |
59 | */ | 58 | */ |
diff --git a/include/linux/cpufreq-dt.h b/include/linux/cpufreq-dt.h new file mode 100644 index 000000000000..0414009e2c30 --- /dev/null +++ b/include/linux/cpufreq-dt.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2014 Marvell | ||
3 | * Thomas Petazzoni <thomas.petazzoni@free-electrons.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | #ifndef __CPUFREQ_DT_H__ | ||
11 | #define __CPUFREQ_DT_H__ | ||
12 | |||
13 | struct cpufreq_dt_platform_data { | ||
14 | /* | ||
15 | * True when each CPU has its own clock to control its | ||
16 | * frequency, false when all CPUs are controlled by a single | ||
17 | * clock. | ||
18 | */ | ||
19 | bool independent_clocks; | ||
20 | }; | ||
21 | |||
22 | #endif /* __CPUFREQ_DT_H__ */ | ||
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 138336b6bb04..503b085b7832 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
@@ -219,6 +219,7 @@ __ATTR(_name, 0644, show_##_name, store_##_name) | |||
219 | struct cpufreq_driver { | 219 | struct cpufreq_driver { |
220 | char name[CPUFREQ_NAME_LEN]; | 220 | char name[CPUFREQ_NAME_LEN]; |
221 | u8 flags; | 221 | u8 flags; |
222 | void *driver_data; | ||
222 | 223 | ||
223 | /* needed by all drivers */ | 224 | /* needed by all drivers */ |
224 | int (*init) (struct cpufreq_policy *policy); | 225 | int (*init) (struct cpufreq_policy *policy); |
@@ -312,6 +313,7 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data); | |||
312 | int cpufreq_unregister_driver(struct cpufreq_driver *driver_data); | 313 | int cpufreq_unregister_driver(struct cpufreq_driver *driver_data); |
313 | 314 | ||
314 | const char *cpufreq_get_current_driver(void); | 315 | const char *cpufreq_get_current_driver(void); |
316 | void *cpufreq_get_driver_data(void); | ||
315 | 317 | ||
316 | static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy, | 318 | static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy, |
317 | unsigned int min, unsigned int max) | 319 | unsigned int min, unsigned int max) |
diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h index 72ab536ad3de..3849fce7ecfe 100644 --- a/include/linux/crash_dump.h +++ b/include/linux/crash_dump.h | |||
@@ -14,14 +14,13 @@ | |||
14 | extern unsigned long long elfcorehdr_addr; | 14 | extern unsigned long long elfcorehdr_addr; |
15 | extern unsigned long long elfcorehdr_size; | 15 | extern unsigned long long elfcorehdr_size; |
16 | 16 | ||
17 | extern int __weak elfcorehdr_alloc(unsigned long long *addr, | 17 | extern int elfcorehdr_alloc(unsigned long long *addr, unsigned long long *size); |
18 | unsigned long long *size); | 18 | extern void elfcorehdr_free(unsigned long long addr); |
19 | extern void __weak elfcorehdr_free(unsigned long long addr); | 19 | extern ssize_t elfcorehdr_read(char *buf, size_t count, u64 *ppos); |
20 | extern ssize_t __weak elfcorehdr_read(char *buf, size_t count, u64 *ppos); | 20 | extern ssize_t elfcorehdr_read_notes(char *buf, size_t count, u64 *ppos); |
21 | extern ssize_t __weak elfcorehdr_read_notes(char *buf, size_t count, u64 *ppos); | 21 | extern int remap_oldmem_pfn_range(struct vm_area_struct *vma, |
22 | extern int __weak remap_oldmem_pfn_range(struct vm_area_struct *vma, | 22 | unsigned long from, unsigned long pfn, |
23 | unsigned long from, unsigned long pfn, | 23 | unsigned long size, pgprot_t prot); |
24 | unsigned long size, pgprot_t prot); | ||
25 | 24 | ||
26 | extern ssize_t copy_oldmem_page(unsigned long, char *, size_t, | 25 | extern ssize_t copy_oldmem_page(unsigned long, char *, size_t, |
27 | unsigned long, int); | 26 | unsigned long, int); |
diff --git a/include/linux/efi.h b/include/linux/efi.h index 45cb4ffdea62..0949f9c7e872 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h | |||
@@ -92,6 +92,7 @@ typedef struct { | |||
92 | #define EFI_MEMORY_WC ((u64)0x0000000000000002ULL) /* write-coalescing */ | 92 | #define EFI_MEMORY_WC ((u64)0x0000000000000002ULL) /* write-coalescing */ |
93 | #define EFI_MEMORY_WT ((u64)0x0000000000000004ULL) /* write-through */ | 93 | #define EFI_MEMORY_WT ((u64)0x0000000000000004ULL) /* write-through */ |
94 | #define EFI_MEMORY_WB ((u64)0x0000000000000008ULL) /* write-back */ | 94 | #define EFI_MEMORY_WB ((u64)0x0000000000000008ULL) /* write-back */ |
95 | #define EFI_MEMORY_UCE ((u64)0x0000000000000010ULL) /* uncached, exported */ | ||
95 | #define EFI_MEMORY_WP ((u64)0x0000000000001000ULL) /* write-protect */ | 96 | #define EFI_MEMORY_WP ((u64)0x0000000000001000ULL) /* write-protect */ |
96 | #define EFI_MEMORY_RP ((u64)0x0000000000002000ULL) /* read-protect */ | 97 | #define EFI_MEMORY_RP ((u64)0x0000000000002000ULL) /* read-protect */ |
97 | #define EFI_MEMORY_XP ((u64)0x0000000000004000ULL) /* execute-protect */ | 98 | #define EFI_MEMORY_XP ((u64)0x0000000000004000ULL) /* execute-protect */ |
@@ -502,6 +503,10 @@ typedef efi_status_t efi_get_next_variable_t (unsigned long *name_size, efi_char | |||
502 | typedef efi_status_t efi_set_variable_t (efi_char16_t *name, efi_guid_t *vendor, | 503 | typedef efi_status_t efi_set_variable_t (efi_char16_t *name, efi_guid_t *vendor, |
503 | u32 attr, unsigned long data_size, | 504 | u32 attr, unsigned long data_size, |
504 | void *data); | 505 | void *data); |
506 | typedef efi_status_t | ||
507 | efi_set_variable_nonblocking_t(efi_char16_t *name, efi_guid_t *vendor, | ||
508 | u32 attr, unsigned long data_size, void *data); | ||
509 | |||
505 | typedef efi_status_t efi_get_next_high_mono_count_t (u32 *count); | 510 | typedef efi_status_t efi_get_next_high_mono_count_t (u32 *count); |
506 | typedef void efi_reset_system_t (int reset_type, efi_status_t status, | 511 | typedef void efi_reset_system_t (int reset_type, efi_status_t status, |
507 | unsigned long data_size, efi_char16_t *data); | 512 | unsigned long data_size, efi_char16_t *data); |
@@ -821,6 +826,7 @@ extern struct efi { | |||
821 | efi_get_variable_t *get_variable; | 826 | efi_get_variable_t *get_variable; |
822 | efi_get_next_variable_t *get_next_variable; | 827 | efi_get_next_variable_t *get_next_variable; |
823 | efi_set_variable_t *set_variable; | 828 | efi_set_variable_t *set_variable; |
829 | efi_set_variable_nonblocking_t *set_variable_nonblocking; | ||
824 | efi_query_variable_info_t *query_variable_info; | 830 | efi_query_variable_info_t *query_variable_info; |
825 | efi_update_capsule_t *update_capsule; | 831 | efi_update_capsule_t *update_capsule; |
826 | efi_query_capsule_caps_t *query_capsule_caps; | 832 | efi_query_capsule_caps_t *query_capsule_caps; |
@@ -886,6 +892,13 @@ extern bool efi_poweroff_required(void); | |||
886 | (md) <= (efi_memory_desc_t *)((m)->map_end - (m)->desc_size); \ | 892 | (md) <= (efi_memory_desc_t *)((m)->map_end - (m)->desc_size); \ |
887 | (md) = (void *)(md) + (m)->desc_size) | 893 | (md) = (void *)(md) + (m)->desc_size) |
888 | 894 | ||
895 | /* | ||
896 | * Format an EFI memory descriptor's type and attributes to a user-provided | ||
897 | * character buffer, as per snprintf(), and return the buffer. | ||
898 | */ | ||
899 | char * __init efi_md_typeattr_format(char *buf, size_t size, | ||
900 | const efi_memory_desc_t *md); | ||
901 | |||
889 | /** | 902 | /** |
890 | * efi_range_is_wc - check the WC bit on an address range | 903 | * efi_range_is_wc - check the WC bit on an address range |
891 | * @start: starting kvirt address | 904 | * @start: starting kvirt address |
@@ -1034,6 +1047,7 @@ struct efivar_operations { | |||
1034 | efi_get_variable_t *get_variable; | 1047 | efi_get_variable_t *get_variable; |
1035 | efi_get_next_variable_t *get_next_variable; | 1048 | efi_get_next_variable_t *get_next_variable; |
1036 | efi_set_variable_t *set_variable; | 1049 | efi_set_variable_t *set_variable; |
1050 | efi_set_variable_nonblocking_t *set_variable_nonblocking; | ||
1037 | efi_query_variable_store_t *query_variable_store; | 1051 | efi_query_variable_store_t *query_variable_store; |
1038 | }; | 1052 | }; |
1039 | 1053 | ||
@@ -1227,4 +1241,7 @@ efi_status_t handle_cmdline_files(efi_system_table_t *sys_table_arg, | |||
1227 | unsigned long *load_addr, | 1241 | unsigned long *load_addr, |
1228 | unsigned long *load_size); | 1242 | unsigned long *load_size); |
1229 | 1243 | ||
1244 | efi_status_t efi_parse_options(char *cmdline); | ||
1245 | |||
1246 | bool efi_runtime_disabled(void); | ||
1230 | #endif /* _LINUX_EFI_H */ | 1247 | #endif /* _LINUX_EFI_H */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index a957d4366c24..4e41a4a331bb 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -223,6 +223,13 @@ typedef void (dio_iodone_t)(struct kiocb *iocb, loff_t offset, | |||
223 | #define ATTR_TIMES_SET (1 << 16) | 223 | #define ATTR_TIMES_SET (1 << 16) |
224 | 224 | ||
225 | /* | 225 | /* |
226 | * Whiteout is represented by a char device. The following constants define the | ||
227 | * mode and device number to use. | ||
228 | */ | ||
229 | #define WHITEOUT_MODE 0 | ||
230 | #define WHITEOUT_DEV 0 | ||
231 | |||
232 | /* | ||
226 | * This is the Inode Attributes structure, used for notify_change(). It | 233 | * This is the Inode Attributes structure, used for notify_change(). It |
227 | * uses the above definitions as flags, to know which values have changed. | 234 | * uses the above definitions as flags, to know which values have changed. |
228 | * Also, in this manner, a Filesystem can look at only the values it cares | 235 | * Also, in this manner, a Filesystem can look at only the values it cares |
@@ -254,6 +261,12 @@ struct iattr { | |||
254 | */ | 261 | */ |
255 | #include <linux/quota.h> | 262 | #include <linux/quota.h> |
256 | 263 | ||
264 | /* | ||
265 | * Maximum number of layers of fs stack. Needs to be limited to | ||
266 | * prevent kernel stack overflow | ||
267 | */ | ||
268 | #define FILESYSTEM_MAX_STACK_DEPTH 2 | ||
269 | |||
257 | /** | 270 | /** |
258 | * enum positive_aop_returns - aop return codes with specific semantics | 271 | * enum positive_aop_returns - aop return codes with specific semantics |
259 | * | 272 | * |
@@ -1266,6 +1279,11 @@ struct super_block { | |||
1266 | struct list_lru s_dentry_lru ____cacheline_aligned_in_smp; | 1279 | struct list_lru s_dentry_lru ____cacheline_aligned_in_smp; |
1267 | struct list_lru s_inode_lru ____cacheline_aligned_in_smp; | 1280 | struct list_lru s_inode_lru ____cacheline_aligned_in_smp; |
1268 | struct rcu_head rcu; | 1281 | struct rcu_head rcu; |
1282 | |||
1283 | /* | ||
1284 | * Indicates how deep in a filesystem stack this SB is | ||
1285 | */ | ||
1286 | int s_stack_depth; | ||
1269 | }; | 1287 | }; |
1270 | 1288 | ||
1271 | extern struct timespec current_fs_time(struct super_block *sb); | 1289 | extern struct timespec current_fs_time(struct super_block *sb); |
@@ -1398,6 +1416,7 @@ extern int vfs_link(struct dentry *, struct inode *, struct dentry *, struct ino | |||
1398 | extern int vfs_rmdir(struct inode *, struct dentry *); | 1416 | extern int vfs_rmdir(struct inode *, struct dentry *); |
1399 | extern int vfs_unlink(struct inode *, struct dentry *, struct inode **); | 1417 | extern int vfs_unlink(struct inode *, struct dentry *, struct inode **); |
1400 | extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *, struct inode **, unsigned int); | 1418 | extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *, struct inode **, unsigned int); |
1419 | extern int vfs_whiteout(struct inode *, struct dentry *); | ||
1401 | 1420 | ||
1402 | /* | 1421 | /* |
1403 | * VFS dentry helper functions. | 1422 | * VFS dentry helper functions. |
@@ -1528,6 +1547,9 @@ struct inode_operations { | |||
1528 | umode_t create_mode, int *opened); | 1547 | umode_t create_mode, int *opened); |
1529 | int (*tmpfile) (struct inode *, struct dentry *, umode_t); | 1548 | int (*tmpfile) (struct inode *, struct dentry *, umode_t); |
1530 | int (*set_acl)(struct inode *, struct posix_acl *, int); | 1549 | int (*set_acl)(struct inode *, struct posix_acl *, int); |
1550 | |||
1551 | /* WARNING: probably going away soon, do not use! */ | ||
1552 | int (*dentry_open)(struct dentry *, struct file *, const struct cred *); | ||
1531 | } ____cacheline_aligned; | 1553 | } ____cacheline_aligned; |
1532 | 1554 | ||
1533 | ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, | 1555 | ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, |
@@ -1625,6 +1647,9 @@ struct super_operations { | |||
1625 | #define IS_AUTOMOUNT(inode) ((inode)->i_flags & S_AUTOMOUNT) | 1647 | #define IS_AUTOMOUNT(inode) ((inode)->i_flags & S_AUTOMOUNT) |
1626 | #define IS_NOSEC(inode) ((inode)->i_flags & S_NOSEC) | 1648 | #define IS_NOSEC(inode) ((inode)->i_flags & S_NOSEC) |
1627 | 1649 | ||
1650 | #define IS_WHITEOUT(inode) (S_ISCHR(inode->i_mode) && \ | ||
1651 | (inode)->i_rdev == WHITEOUT_DEV) | ||
1652 | |||
1628 | /* | 1653 | /* |
1629 | * Inode state bits. Protected by inode->i_lock | 1654 | * Inode state bits. Protected by inode->i_lock |
1630 | * | 1655 | * |
@@ -2040,6 +2065,7 @@ extern struct file *file_open_name(struct filename *, int, umode_t); | |||
2040 | extern struct file *filp_open(const char *, int, umode_t); | 2065 | extern struct file *filp_open(const char *, int, umode_t); |
2041 | extern struct file *file_open_root(struct dentry *, struct vfsmount *, | 2066 | extern struct file *file_open_root(struct dentry *, struct vfsmount *, |
2042 | const char *, int); | 2067 | const char *, int); |
2068 | extern int vfs_open(const struct path *, struct file *, const struct cred *); | ||
2043 | extern struct file * dentry_open(const struct path *, int, const struct cred *); | 2069 | extern struct file * dentry_open(const struct path *, int, const struct cred *); |
2044 | extern int filp_close(struct file *, fl_owner_t id); | 2070 | extern int filp_close(struct file *, fl_owner_t id); |
2045 | 2071 | ||
@@ -2253,7 +2279,9 @@ extern sector_t bmap(struct inode *, sector_t); | |||
2253 | #endif | 2279 | #endif |
2254 | extern int notify_change(struct dentry *, struct iattr *, struct inode **); | 2280 | extern int notify_change(struct dentry *, struct iattr *, struct inode **); |
2255 | extern int inode_permission(struct inode *, int); | 2281 | extern int inode_permission(struct inode *, int); |
2282 | extern int __inode_permission(struct inode *, int); | ||
2256 | extern int generic_permission(struct inode *, int); | 2283 | extern int generic_permission(struct inode *, int); |
2284 | extern int __check_sticky(struct inode *dir, struct inode *inode); | ||
2257 | 2285 | ||
2258 | static inline bool execute_ok(struct inode *inode) | 2286 | static inline bool execute_ok(struct inode *inode) |
2259 | { | 2287 | { |
@@ -2452,6 +2480,9 @@ extern ssize_t iter_file_splice_write(struct pipe_inode_info *, | |||
2452 | struct file *, loff_t *, size_t, unsigned int); | 2480 | struct file *, loff_t *, size_t, unsigned int); |
2453 | extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, | 2481 | extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, |
2454 | struct file *out, loff_t *, size_t len, unsigned int flags); | 2482 | struct file *out, loff_t *, size_t len, unsigned int flags); |
2483 | extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, | ||
2484 | loff_t *opos, size_t len, unsigned int flags); | ||
2485 | |||
2455 | 2486 | ||
2456 | extern void | 2487 | extern void |
2457 | file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping); | 2488 | file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping); |
@@ -2737,6 +2768,14 @@ static inline int is_sxid(umode_t mode) | |||
2737 | return (mode & S_ISUID) || ((mode & S_ISGID) && (mode & S_IXGRP)); | 2768 | return (mode & S_ISUID) || ((mode & S_ISGID) && (mode & S_IXGRP)); |
2738 | } | 2769 | } |
2739 | 2770 | ||
2771 | static inline int check_sticky(struct inode *dir, struct inode *inode) | ||
2772 | { | ||
2773 | if (!(dir->i_mode & S_ISVTX)) | ||
2774 | return 0; | ||
2775 | |||
2776 | return __check_sticky(dir, inode); | ||
2777 | } | ||
2778 | |||
2740 | static inline void inode_has_no_xattr(struct inode *inode) | 2779 | static inline void inode_has_no_xattr(struct inode *inode) |
2741 | { | 2780 | { |
2742 | if (!is_sxid(inode->i_mode) && (inode->i_sb->s_flags & MS_NOSEC)) | 2781 | if (!is_sxid(inode->i_mode) && (inode->i_sb->s_flags & MS_NOSEC)) |
diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index 0dae71e9971c..704b9a599b26 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h | |||
@@ -1042,7 +1042,7 @@ void jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block); | |||
1042 | extern void jbd2_journal_commit_transaction(journal_t *); | 1042 | extern void jbd2_journal_commit_transaction(journal_t *); |
1043 | 1043 | ||
1044 | /* Checkpoint list management */ | 1044 | /* Checkpoint list management */ |
1045 | int __jbd2_journal_clean_checkpoint_list(journal_t *journal); | 1045 | void __jbd2_journal_clean_checkpoint_list(journal_t *journal); |
1046 | int __jbd2_journal_remove_checkpoint(struct journal_head *); | 1046 | int __jbd2_journal_remove_checkpoint(struct journal_head *); |
1047 | void __jbd2_journal_insert_checkpoint(struct journal_head *, transaction_t *); | 1047 | void __jbd2_journal_insert_checkpoint(struct journal_head *, transaction_t *); |
1048 | 1048 | ||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 40728cf1c452..3d770f5564b8 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -403,6 +403,7 @@ int vsscanf(const char *, const char *, va_list); | |||
403 | extern int get_option(char **str, int *pint); | 403 | extern int get_option(char **str, int *pint); |
404 | extern char *get_options(const char *str, int nints, int *ints); | 404 | extern char *get_options(const char *str, int nints, int *ints); |
405 | extern unsigned long long memparse(const char *ptr, char **retptr); | 405 | extern unsigned long long memparse(const char *ptr, char **retptr); |
406 | extern bool parse_option_str(const char *str, const char *option); | ||
406 | 407 | ||
407 | extern int core_kernel_text(unsigned long addr); | 408 | extern int core_kernel_text(unsigned long addr); |
408 | extern int core_kernel_data(unsigned long addr); | 409 | extern int core_kernel_data(unsigned long addr); |
diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h index 6b06d378f3df..e465bb15912d 100644 --- a/include/linux/kgdb.h +++ b/include/linux/kgdb.h | |||
@@ -283,7 +283,7 @@ struct kgdb_io { | |||
283 | 283 | ||
284 | extern struct kgdb_arch arch_kgdb_ops; | 284 | extern struct kgdb_arch arch_kgdb_ops; |
285 | 285 | ||
286 | extern unsigned long __weak kgdb_arch_pc(int exception, struct pt_regs *regs); | 286 | extern unsigned long kgdb_arch_pc(int exception, struct pt_regs *regs); |
287 | 287 | ||
288 | #ifdef CONFIG_SERIAL_KGDB_NMI | 288 | #ifdef CONFIG_SERIAL_KGDB_NMI |
289 | extern int kgdb_register_nmi_console(void); | 289 | extern int kgdb_register_nmi_console(void); |
diff --git a/include/linux/khugepaged.h b/include/linux/khugepaged.h index 6b394f0b5148..eeb307985715 100644 --- a/include/linux/khugepaged.h +++ b/include/linux/khugepaged.h | |||
@@ -6,7 +6,8 @@ | |||
6 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | 6 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
7 | extern int __khugepaged_enter(struct mm_struct *mm); | 7 | extern int __khugepaged_enter(struct mm_struct *mm); |
8 | extern void __khugepaged_exit(struct mm_struct *mm); | 8 | extern void __khugepaged_exit(struct mm_struct *mm); |
9 | extern int khugepaged_enter_vma_merge(struct vm_area_struct *vma); | 9 | extern int khugepaged_enter_vma_merge(struct vm_area_struct *vma, |
10 | unsigned long vm_flags); | ||
10 | 11 | ||
11 | #define khugepaged_enabled() \ | 12 | #define khugepaged_enabled() \ |
12 | (transparent_hugepage_flags & \ | 13 | (transparent_hugepage_flags & \ |
@@ -35,13 +36,13 @@ static inline void khugepaged_exit(struct mm_struct *mm) | |||
35 | __khugepaged_exit(mm); | 36 | __khugepaged_exit(mm); |
36 | } | 37 | } |
37 | 38 | ||
38 | static inline int khugepaged_enter(struct vm_area_struct *vma) | 39 | static inline int khugepaged_enter(struct vm_area_struct *vma, |
40 | unsigned long vm_flags) | ||
39 | { | 41 | { |
40 | if (!test_bit(MMF_VM_HUGEPAGE, &vma->vm_mm->flags)) | 42 | if (!test_bit(MMF_VM_HUGEPAGE, &vma->vm_mm->flags)) |
41 | if ((khugepaged_always() || | 43 | if ((khugepaged_always() || |
42 | (khugepaged_req_madv() && | 44 | (khugepaged_req_madv() && (vm_flags & VM_HUGEPAGE))) && |
43 | vma->vm_flags & VM_HUGEPAGE)) && | 45 | !(vm_flags & VM_NOHUGEPAGE)) |
44 | !(vma->vm_flags & VM_NOHUGEPAGE)) | ||
45 | if (__khugepaged_enter(vma->vm_mm)) | 46 | if (__khugepaged_enter(vma->vm_mm)) |
46 | return -ENOMEM; | 47 | return -ENOMEM; |
47 | return 0; | 48 | return 0; |
@@ -54,11 +55,13 @@ static inline int khugepaged_fork(struct mm_struct *mm, struct mm_struct *oldmm) | |||
54 | static inline void khugepaged_exit(struct mm_struct *mm) | 55 | static inline void khugepaged_exit(struct mm_struct *mm) |
55 | { | 56 | { |
56 | } | 57 | } |
57 | static inline int khugepaged_enter(struct vm_area_struct *vma) | 58 | static inline int khugepaged_enter(struct vm_area_struct *vma, |
59 | unsigned long vm_flags) | ||
58 | { | 60 | { |
59 | return 0; | 61 | return 0; |
60 | } | 62 | } |
61 | static inline int khugepaged_enter_vma_merge(struct vm_area_struct *vma) | 63 | static inline int khugepaged_enter_vma_merge(struct vm_area_struct *vma, |
64 | unsigned long vm_flags) | ||
62 | { | 65 | { |
63 | return 0; | 66 | return 0; |
64 | } | 67 | } |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 28be31f49250..ea53b04993f2 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -1080,6 +1080,7 @@ void kvm_device_get(struct kvm_device *dev); | |||
1080 | void kvm_device_put(struct kvm_device *dev); | 1080 | void kvm_device_put(struct kvm_device *dev); |
1081 | struct kvm_device *kvm_device_from_filp(struct file *filp); | 1081 | struct kvm_device *kvm_device_from_filp(struct file *filp); |
1082 | int kvm_register_device_ops(struct kvm_device_ops *ops, u32 type); | 1082 | int kvm_register_device_ops(struct kvm_device_ops *ops, u32 type); |
1083 | void kvm_unregister_device_ops(u32 type); | ||
1083 | 1084 | ||
1084 | extern struct kvm_device_ops kvm_mpic_ops; | 1085 | extern struct kvm_device_ops kvm_mpic_ops; |
1085 | extern struct kvm_device_ops kvm_xics_ops; | 1086 | extern struct kvm_device_ops kvm_xics_ops; |
diff --git a/include/linux/leds.h b/include/linux/leds.h index e43686472197..a57611d0c94e 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h | |||
@@ -13,8 +13,8 @@ | |||
13 | #define __LINUX_LEDS_H_INCLUDED | 13 | #define __LINUX_LEDS_H_INCLUDED |
14 | 14 | ||
15 | #include <linux/list.h> | 15 | #include <linux/list.h> |
16 | #include <linux/spinlock.h> | ||
17 | #include <linux/rwsem.h> | 16 | #include <linux/rwsem.h> |
17 | #include <linux/spinlock.h> | ||
18 | #include <linux/timer.h> | 18 | #include <linux/timer.h> |
19 | #include <linux/workqueue.h> | 19 | #include <linux/workqueue.h> |
20 | 20 | ||
@@ -31,8 +31,8 @@ enum led_brightness { | |||
31 | 31 | ||
32 | struct led_classdev { | 32 | struct led_classdev { |
33 | const char *name; | 33 | const char *name; |
34 | int brightness; | 34 | enum led_brightness brightness; |
35 | int max_brightness; | 35 | enum led_brightness max_brightness; |
36 | int flags; | 36 | int flags; |
37 | 37 | ||
38 | /* Lower 16 bits reflect status */ | 38 | /* Lower 16 bits reflect status */ |
@@ -140,6 +140,16 @@ extern void led_blink_set_oneshot(struct led_classdev *led_cdev, | |||
140 | */ | 140 | */ |
141 | extern void led_set_brightness(struct led_classdev *led_cdev, | 141 | extern void led_set_brightness(struct led_classdev *led_cdev, |
142 | enum led_brightness brightness); | 142 | enum led_brightness brightness); |
143 | /** | ||
144 | * led_update_brightness - update LED brightness | ||
145 | * @led_cdev: the LED to query | ||
146 | * | ||
147 | * Get an LED's current brightness and update led_cdev->brightness | ||
148 | * member with the obtained value. | ||
149 | * | ||
150 | * Returns: 0 on success or negative error value on failure | ||
151 | */ | ||
152 | extern int led_update_brightness(struct led_classdev *led_cdev); | ||
143 | 153 | ||
144 | /* | 154 | /* |
145 | * LED Triggers | 155 | * LED Triggers |
diff --git a/include/linux/mailbox_client.h b/include/linux/mailbox_client.h new file mode 100644 index 000000000000..307d9cab2026 --- /dev/null +++ b/include/linux/mailbox_client.h | |||
@@ -0,0 +1,46 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2013-2014 Linaro Ltd. | ||
3 | * Author: Jassi Brar <jassisinghbrar@gmail.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | #ifndef __MAILBOX_CLIENT_H | ||
11 | #define __MAILBOX_CLIENT_H | ||
12 | |||
13 | #include <linux/of.h> | ||
14 | #include <linux/device.h> | ||
15 | |||
16 | struct mbox_chan; | ||
17 | |||
18 | /** | ||
19 | * struct mbox_client - User of a mailbox | ||
20 | * @dev: The client device | ||
21 | * @tx_block: If the mbox_send_message should block until data is | ||
22 | * transmitted. | ||
23 | * @tx_tout: Max block period in ms before TX is assumed failure | ||
24 | * @knows_txdone: If the client could run the TX state machine. Usually | ||
25 | * if the client receives some ACK packet for transmission. | ||
26 | * Unused if the controller already has TX_Done/RTR IRQ. | ||
27 | * @rx_callback: Atomic callback to provide client the data received | ||
28 | * @tx_done: Atomic callback to tell client of data transmission | ||
29 | */ | ||
30 | struct mbox_client { | ||
31 | struct device *dev; | ||
32 | bool tx_block; | ||
33 | unsigned long tx_tout; | ||
34 | bool knows_txdone; | ||
35 | |||
36 | void (*rx_callback)(struct mbox_client *cl, void *mssg); | ||
37 | void (*tx_done)(struct mbox_client *cl, void *mssg, int r); | ||
38 | }; | ||
39 | |||
40 | struct mbox_chan *mbox_request_channel(struct mbox_client *cl, int index); | ||
41 | int mbox_send_message(struct mbox_chan *chan, void *mssg); | ||
42 | void mbox_client_txdone(struct mbox_chan *chan, int r); /* atomic */ | ||
43 | bool mbox_client_peek_data(struct mbox_chan *chan); /* atomic */ | ||
44 | void mbox_free_channel(struct mbox_chan *chan); /* may sleep */ | ||
45 | |||
46 | #endif /* __MAILBOX_CLIENT_H */ | ||
diff --git a/include/linux/mailbox_controller.h b/include/linux/mailbox_controller.h new file mode 100644 index 000000000000..d4cf96f07cfc --- /dev/null +++ b/include/linux/mailbox_controller.h | |||
@@ -0,0 +1,133 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License version 2 as | ||
4 | * published by the Free Software Foundation. | ||
5 | */ | ||
6 | |||
7 | #ifndef __MAILBOX_CONTROLLER_H | ||
8 | #define __MAILBOX_CONTROLLER_H | ||
9 | |||
10 | #include <linux/of.h> | ||
11 | #include <linux/types.h> | ||
12 | #include <linux/timer.h> | ||
13 | #include <linux/device.h> | ||
14 | #include <linux/completion.h> | ||
15 | |||
16 | struct mbox_chan; | ||
17 | |||
18 | /** | ||
19 | * struct mbox_chan_ops - methods to control mailbox channels | ||
20 | * @send_data: The API asks the MBOX controller driver, in atomic | ||
21 | * context try to transmit a message on the bus. Returns 0 if | ||
22 | * data is accepted for transmission, -EBUSY while rejecting | ||
23 | * if the remote hasn't yet read the last data sent. Actual | ||
24 | * transmission of data is reported by the controller via | ||
25 | * mbox_chan_txdone (if it has some TX ACK irq). It must not | ||
26 | * sleep. | ||
27 | * @startup: Called when a client requests the chan. The controller | ||
28 | * could ask clients for additional parameters of communication | ||
29 | * to be provided via client's chan_data. This call may | ||
30 | * block. After this call the Controller must forward any | ||
31 | * data received on the chan by calling mbox_chan_received_data. | ||
32 | * The controller may do stuff that need to sleep. | ||
33 | * @shutdown: Called when a client relinquishes control of a chan. | ||
34 | * This call may block too. The controller must not forward | ||
35 | * any received data anymore. | ||
36 | * The controller may do stuff that need to sleep. | ||
37 | * @last_tx_done: If the controller sets 'txdone_poll', the API calls | ||
38 | * this to poll status of last TX. The controller must | ||
39 | * give priority to IRQ method over polling and never | ||
40 | * set both txdone_poll and txdone_irq. Only in polling | ||
41 | * mode 'send_data' is expected to return -EBUSY. | ||
42 | * The controller may do stuff that need to sleep/block. | ||
43 | * Used only if txdone_poll:=true && txdone_irq:=false | ||
44 | * @peek_data: Atomic check for any received data. Return true if controller | ||
45 | * has some data to push to the client. False otherwise. | ||
46 | */ | ||
47 | struct mbox_chan_ops { | ||
48 | int (*send_data)(struct mbox_chan *chan, void *data); | ||
49 | int (*startup)(struct mbox_chan *chan); | ||
50 | void (*shutdown)(struct mbox_chan *chan); | ||
51 | bool (*last_tx_done)(struct mbox_chan *chan); | ||
52 | bool (*peek_data)(struct mbox_chan *chan); | ||
53 | }; | ||
54 | |||
55 | /** | ||
56 | * struct mbox_controller - Controller of a class of communication channels | ||
57 | * @dev: Device backing this controller | ||
58 | * @ops: Operators that work on each communication chan | ||
59 | * @chans: Array of channels | ||
60 | * @num_chans: Number of channels in the 'chans' array. | ||
61 | * @txdone_irq: Indicates if the controller can report to API when | ||
62 | * the last transmitted data was read by the remote. | ||
63 | * Eg, if it has some TX ACK irq. | ||
64 | * @txdone_poll: If the controller can read but not report the TX | ||
65 | * done. Ex, some register shows the TX status but | ||
66 | * no interrupt rises. Ignored if 'txdone_irq' is set. | ||
67 | * @txpoll_period: If 'txdone_poll' is in effect, the API polls for | ||
68 | * last TX's status after these many millisecs | ||
69 | * @of_xlate: Controller driver specific mapping of channel via DT | ||
70 | * @poll: API private. Used to poll for TXDONE on all channels. | ||
71 | * @node: API private. To hook into list of controllers. | ||
72 | */ | ||
73 | struct mbox_controller { | ||
74 | struct device *dev; | ||
75 | struct mbox_chan_ops *ops; | ||
76 | struct mbox_chan *chans; | ||
77 | int num_chans; | ||
78 | bool txdone_irq; | ||
79 | bool txdone_poll; | ||
80 | unsigned txpoll_period; | ||
81 | struct mbox_chan *(*of_xlate)(struct mbox_controller *mbox, | ||
82 | const struct of_phandle_args *sp); | ||
83 | /* Internal to API */ | ||
84 | struct timer_list poll; | ||
85 | struct list_head node; | ||
86 | }; | ||
87 | |||
88 | /* | ||
89 | * The length of circular buffer for queuing messages from a client. | ||
90 | * 'msg_count' tracks the number of buffered messages while 'msg_free' | ||
91 | * is the index where the next message would be buffered. | ||
92 | * We shouldn't need it too big because every transfer is interrupt | ||
93 | * triggered and if we have lots of data to transfer, the interrupt | ||
94 | * latencies are going to be the bottleneck, not the buffer length. | ||
95 | * Besides, mbox_send_message could be called from atomic context and | ||
96 | * the client could also queue another message from the notifier 'tx_done' | ||
97 | * of the last transfer done. | ||
98 | * REVISIT: If too many platforms see the "Try increasing MBOX_TX_QUEUE_LEN" | ||
99 | * print, it needs to be taken from config option or somesuch. | ||
100 | */ | ||
101 | #define MBOX_TX_QUEUE_LEN 20 | ||
102 | |||
103 | /** | ||
104 | * struct mbox_chan - s/w representation of a communication chan | ||
105 | * @mbox: Pointer to the parent/provider of this channel | ||
106 | * @txdone_method: Way to detect TXDone chosen by the API | ||
107 | * @cl: Pointer to the current owner of this channel | ||
108 | * @tx_complete: Transmission completion | ||
109 | * @active_req: Currently active request hook | ||
110 | * @msg_count: No. of mssg currently queued | ||
111 | * @msg_free: Index of next available mssg slot | ||
112 | * @msg_data: Hook for data packet | ||
113 | * @lock: Serialise access to the channel | ||
114 | * @con_priv: Hook for controller driver to attach private data | ||
115 | */ | ||
116 | struct mbox_chan { | ||
117 | struct mbox_controller *mbox; | ||
118 | unsigned txdone_method; | ||
119 | struct mbox_client *cl; | ||
120 | struct completion tx_complete; | ||
121 | void *active_req; | ||
122 | unsigned msg_count, msg_free; | ||
123 | void *msg_data[MBOX_TX_QUEUE_LEN]; | ||
124 | spinlock_t lock; /* Serialise access to the channel */ | ||
125 | void *con_priv; | ||
126 | }; | ||
127 | |||
128 | int mbox_controller_register(struct mbox_controller *mbox); /* can sleep */ | ||
129 | void mbox_controller_unregister(struct mbox_controller *mbox); /* can sleep */ | ||
130 | void mbox_chan_received_data(struct mbox_chan *chan, void *data); /* atomic */ | ||
131 | void mbox_chan_txdone(struct mbox_chan *chan, int r); /* atomic */ | ||
132 | |||
133 | #endif /* __MAILBOX_CONTROLLER_H */ | ||
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 19df5d857411..6b75640ef5ab 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
@@ -139,48 +139,23 @@ static inline bool mem_cgroup_disabled(void) | |||
139 | return false; | 139 | return false; |
140 | } | 140 | } |
141 | 141 | ||
142 | void __mem_cgroup_begin_update_page_stat(struct page *page, bool *locked, | 142 | struct mem_cgroup *mem_cgroup_begin_page_stat(struct page *page, bool *locked, |
143 | unsigned long *flags); | 143 | unsigned long *flags); |
144 | 144 | void mem_cgroup_end_page_stat(struct mem_cgroup *memcg, bool locked, | |
145 | extern atomic_t memcg_moving; | 145 | unsigned long flags); |
146 | 146 | void mem_cgroup_update_page_stat(struct mem_cgroup *memcg, | |
147 | static inline void mem_cgroup_begin_update_page_stat(struct page *page, | 147 | enum mem_cgroup_stat_index idx, int val); |
148 | bool *locked, unsigned long *flags) | 148 | |
149 | { | 149 | static inline void mem_cgroup_inc_page_stat(struct mem_cgroup *memcg, |
150 | if (mem_cgroup_disabled()) | ||
151 | return; | ||
152 | rcu_read_lock(); | ||
153 | *locked = false; | ||
154 | if (atomic_read(&memcg_moving)) | ||
155 | __mem_cgroup_begin_update_page_stat(page, locked, flags); | ||
156 | } | ||
157 | |||
158 | void __mem_cgroup_end_update_page_stat(struct page *page, | ||
159 | unsigned long *flags); | ||
160 | static inline void mem_cgroup_end_update_page_stat(struct page *page, | ||
161 | bool *locked, unsigned long *flags) | ||
162 | { | ||
163 | if (mem_cgroup_disabled()) | ||
164 | return; | ||
165 | if (*locked) | ||
166 | __mem_cgroup_end_update_page_stat(page, flags); | ||
167 | rcu_read_unlock(); | ||
168 | } | ||
169 | |||
170 | void mem_cgroup_update_page_stat(struct page *page, | ||
171 | enum mem_cgroup_stat_index idx, | ||
172 | int val); | ||
173 | |||
174 | static inline void mem_cgroup_inc_page_stat(struct page *page, | ||
175 | enum mem_cgroup_stat_index idx) | 150 | enum mem_cgroup_stat_index idx) |
176 | { | 151 | { |
177 | mem_cgroup_update_page_stat(page, idx, 1); | 152 | mem_cgroup_update_page_stat(memcg, idx, 1); |
178 | } | 153 | } |
179 | 154 | ||
180 | static inline void mem_cgroup_dec_page_stat(struct page *page, | 155 | static inline void mem_cgroup_dec_page_stat(struct mem_cgroup *memcg, |
181 | enum mem_cgroup_stat_index idx) | 156 | enum mem_cgroup_stat_index idx) |
182 | { | 157 | { |
183 | mem_cgroup_update_page_stat(page, idx, -1); | 158 | mem_cgroup_update_page_stat(memcg, idx, -1); |
184 | } | 159 | } |
185 | 160 | ||
186 | unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, | 161 | unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order, |
@@ -315,13 +290,14 @@ mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p) | |||
315 | { | 290 | { |
316 | } | 291 | } |
317 | 292 | ||
318 | static inline void mem_cgroup_begin_update_page_stat(struct page *page, | 293 | static inline struct mem_cgroup *mem_cgroup_begin_page_stat(struct page *page, |
319 | bool *locked, unsigned long *flags) | 294 | bool *locked, unsigned long *flags) |
320 | { | 295 | { |
296 | return NULL; | ||
321 | } | 297 | } |
322 | 298 | ||
323 | static inline void mem_cgroup_end_update_page_stat(struct page *page, | 299 | static inline void mem_cgroup_end_page_stat(struct mem_cgroup *memcg, |
324 | bool *locked, unsigned long *flags) | 300 | bool locked, unsigned long flags) |
325 | { | 301 | { |
326 | } | 302 | } |
327 | 303 | ||
@@ -343,12 +319,12 @@ static inline bool mem_cgroup_oom_synchronize(bool wait) | |||
343 | return false; | 319 | return false; |
344 | } | 320 | } |
345 | 321 | ||
346 | static inline void mem_cgroup_inc_page_stat(struct page *page, | 322 | static inline void mem_cgroup_inc_page_stat(struct mem_cgroup *memcg, |
347 | enum mem_cgroup_stat_index idx) | 323 | enum mem_cgroup_stat_index idx) |
348 | { | 324 | { |
349 | } | 325 | } |
350 | 326 | ||
351 | static inline void mem_cgroup_dec_page_stat(struct page *page, | 327 | static inline void mem_cgroup_dec_page_stat(struct mem_cgroup *memcg, |
352 | enum mem_cgroup_stat_index idx) | 328 | enum mem_cgroup_stat_index idx) |
353 | { | 329 | { |
354 | } | 330 | } |
diff --git a/include/linux/memory.h b/include/linux/memory.h index bb7384e3c3d8..8b8d8d12348e 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h | |||
@@ -35,7 +35,7 @@ struct memory_block { | |||
35 | }; | 35 | }; |
36 | 36 | ||
37 | int arch_get_memory_phys_device(unsigned long start_pfn); | 37 | int arch_get_memory_phys_device(unsigned long start_pfn); |
38 | unsigned long __weak memory_block_size_bytes(void); | 38 | unsigned long memory_block_size_bytes(void); |
39 | 39 | ||
40 | /* These states are exposed to userspace as text strings in sysfs */ | 40 | /* These states are exposed to userspace as text strings in sysfs */ |
41 | #define MEM_ONLINE (1<<0) /* exposed to userspace */ | 41 | #define MEM_ONLINE (1<<0) /* exposed to userspace */ |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 02d11ee7f19d..b46461116cd2 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -1176,6 +1176,7 @@ static inline void unmap_shared_mapping_range(struct address_space *mapping, | |||
1176 | 1176 | ||
1177 | extern void truncate_pagecache(struct inode *inode, loff_t new); | 1177 | extern void truncate_pagecache(struct inode *inode, loff_t new); |
1178 | extern void truncate_setsize(struct inode *inode, loff_t newsize); | 1178 | extern void truncate_setsize(struct inode *inode, loff_t newsize); |
1179 | void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to); | ||
1179 | void truncate_pagecache_range(struct inode *inode, loff_t offset, loff_t end); | 1180 | void truncate_pagecache_range(struct inode *inode, loff_t offset, loff_t end); |
1180 | int truncate_inode_page(struct address_space *mapping, struct page *page); | 1181 | int truncate_inode_page(struct address_space *mapping, struct page *page); |
1181 | int generic_error_remove_page(struct address_space *mapping, struct page *page); | 1182 | int generic_error_remove_page(struct address_space *mapping, struct page *page); |
@@ -1234,7 +1235,6 @@ int __set_page_dirty_no_writeback(struct page *page); | |||
1234 | int redirty_page_for_writepage(struct writeback_control *wbc, | 1235 | int redirty_page_for_writepage(struct writeback_control *wbc, |
1235 | struct page *page); | 1236 | struct page *page); |
1236 | void account_page_dirtied(struct page *page, struct address_space *mapping); | 1237 | void account_page_dirtied(struct page *page, struct address_space *mapping); |
1237 | void account_page_writeback(struct page *page); | ||
1238 | int set_page_dirty(struct page *page); | 1238 | int set_page_dirty(struct page *page); |
1239 | int set_page_dirty_lock(struct page *page); | 1239 | int set_page_dirty_lock(struct page *page); |
1240 | int clear_page_dirty_for_io(struct page *page); | 1240 | int clear_page_dirty_for_io(struct page *page); |
diff --git a/include/linux/mount.h b/include/linux/mount.h index 9262e4bf0cc3..c2c561dc0114 100644 --- a/include/linux/mount.h +++ b/include/linux/mount.h | |||
@@ -81,6 +81,9 @@ extern struct vfsmount *mntget(struct vfsmount *mnt); | |||
81 | extern struct vfsmount *mnt_clone_internal(struct path *path); | 81 | extern struct vfsmount *mnt_clone_internal(struct path *path); |
82 | extern int __mnt_is_readonly(struct vfsmount *mnt); | 82 | extern int __mnt_is_readonly(struct vfsmount *mnt); |
83 | 83 | ||
84 | struct path; | ||
85 | extern struct vfsmount *clone_private_mount(struct path *path); | ||
86 | |||
84 | struct file_system_type; | 87 | struct file_system_type; |
85 | extern struct vfsmount *vfs_kern_mount(struct file_system_type *type, | 88 | extern struct vfsmount *vfs_kern_mount(struct file_system_type *type, |
86 | int flags, const char *name, | 89 | int flags, const char *name, |
diff --git a/include/linux/of_reserved_mem.h b/include/linux/of_reserved_mem.h index 5b5efae09135..ad2f67054372 100644 --- a/include/linux/of_reserved_mem.h +++ b/include/linux/of_reserved_mem.h | |||
@@ -16,7 +16,7 @@ struct reserved_mem { | |||
16 | }; | 16 | }; |
17 | 17 | ||
18 | struct reserved_mem_ops { | 18 | struct reserved_mem_ops { |
19 | void (*device_init)(struct reserved_mem *rmem, | 19 | int (*device_init)(struct reserved_mem *rmem, |
20 | struct device *dev); | 20 | struct device *dev); |
21 | void (*device_release)(struct reserved_mem *rmem, | 21 | void (*device_release)(struct reserved_mem *rmem, |
22 | struct device *dev); | 22 | struct device *dev); |
@@ -28,14 +28,17 @@ typedef int (*reservedmem_of_init_fn)(struct reserved_mem *rmem); | |||
28 | _OF_DECLARE(reservedmem, name, compat, init, reservedmem_of_init_fn) | 28 | _OF_DECLARE(reservedmem, name, compat, init, reservedmem_of_init_fn) |
29 | 29 | ||
30 | #ifdef CONFIG_OF_RESERVED_MEM | 30 | #ifdef CONFIG_OF_RESERVED_MEM |
31 | void of_reserved_mem_device_init(struct device *dev); | 31 | int of_reserved_mem_device_init(struct device *dev); |
32 | void of_reserved_mem_device_release(struct device *dev); | 32 | void of_reserved_mem_device_release(struct device *dev); |
33 | 33 | ||
34 | void fdt_init_reserved_mem(void); | 34 | void fdt_init_reserved_mem(void); |
35 | void fdt_reserved_mem_save_node(unsigned long node, const char *uname, | 35 | void fdt_reserved_mem_save_node(unsigned long node, const char *uname, |
36 | phys_addr_t base, phys_addr_t size); | 36 | phys_addr_t base, phys_addr_t size); |
37 | #else | 37 | #else |
38 | static inline void of_reserved_mem_device_init(struct device *dev) { } | 38 | static inline int of_reserved_mem_device_init(struct device *dev) |
39 | { | ||
40 | return -ENOSYS; | ||
41 | } | ||
39 | static inline void of_reserved_mem_device_release(struct device *pdev) { } | 42 | static inline void of_reserved_mem_device_release(struct device *pdev) { } |
40 | 43 | ||
41 | static inline void fdt_init_reserved_mem(void) { } | 44 | static inline void fdt_init_reserved_mem(void) { } |
diff --git a/include/linux/oom.h b/include/linux/oom.h index 647395a1a550..e8d6e1058723 100644 --- a/include/linux/oom.h +++ b/include/linux/oom.h | |||
@@ -50,6 +50,9 @@ static inline bool oom_task_origin(const struct task_struct *p) | |||
50 | extern unsigned long oom_badness(struct task_struct *p, | 50 | extern unsigned long oom_badness(struct task_struct *p, |
51 | struct mem_cgroup *memcg, const nodemask_t *nodemask, | 51 | struct mem_cgroup *memcg, const nodemask_t *nodemask, |
52 | unsigned long totalpages); | 52 | unsigned long totalpages); |
53 | |||
54 | extern int oom_kills_count(void); | ||
55 | extern void note_oom_kill(void); | ||
53 | extern void oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, | 56 | extern void oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, |
54 | unsigned int points, unsigned long totalpages, | 57 | unsigned int points, unsigned long totalpages, |
55 | struct mem_cgroup *memcg, nodemask_t *nodemask, | 58 | struct mem_cgroup *memcg, nodemask_t *nodemask, |
diff --git a/include/linux/mailbox.h b/include/linux/pl320-ipc.h index 5161f63ec1c8..5161f63ec1c8 100644 --- a/include/linux/mailbox.h +++ b/include/linux/pl320-ipc.h | |||
diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h index 9ab4bf7c4646..636e82834506 100644 --- a/include/linux/pm_qos.h +++ b/include/linux/pm_qos.h | |||
@@ -15,6 +15,7 @@ enum { | |||
15 | PM_QOS_CPU_DMA_LATENCY, | 15 | PM_QOS_CPU_DMA_LATENCY, |
16 | PM_QOS_NETWORK_LATENCY, | 16 | PM_QOS_NETWORK_LATENCY, |
17 | PM_QOS_NETWORK_THROUGHPUT, | 17 | PM_QOS_NETWORK_THROUGHPUT, |
18 | PM_QOS_MEMORY_BANDWIDTH, | ||
18 | 19 | ||
19 | /* insert new class ID */ | 20 | /* insert new class ID */ |
20 | PM_QOS_NUM_CLASSES, | 21 | PM_QOS_NUM_CLASSES, |
@@ -32,6 +33,7 @@ enum pm_qos_flags_status { | |||
32 | #define PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE (2000 * USEC_PER_SEC) | 33 | #define PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE (2000 * USEC_PER_SEC) |
33 | #define PM_QOS_NETWORK_LAT_DEFAULT_VALUE (2000 * USEC_PER_SEC) | 34 | #define PM_QOS_NETWORK_LAT_DEFAULT_VALUE (2000 * USEC_PER_SEC) |
34 | #define PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE 0 | 35 | #define PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE 0 |
36 | #define PM_QOS_MEMORY_BANDWIDTH_DEFAULT_VALUE 0 | ||
35 | #define PM_QOS_RESUME_LATENCY_DEFAULT_VALUE 0 | 37 | #define PM_QOS_RESUME_LATENCY_DEFAULT_VALUE 0 |
36 | #define PM_QOS_LATENCY_TOLERANCE_DEFAULT_VALUE 0 | 38 | #define PM_QOS_LATENCY_TOLERANCE_DEFAULT_VALUE 0 |
37 | #define PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT (-1) | 39 | #define PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT (-1) |
@@ -69,7 +71,8 @@ struct dev_pm_qos_request { | |||
69 | enum pm_qos_type { | 71 | enum pm_qos_type { |
70 | PM_QOS_UNITIALIZED, | 72 | PM_QOS_UNITIALIZED, |
71 | PM_QOS_MAX, /* return the largest value */ | 73 | PM_QOS_MAX, /* return the largest value */ |
72 | PM_QOS_MIN /* return the smallest value */ | 74 | PM_QOS_MIN, /* return the smallest value */ |
75 | PM_QOS_SUM /* return the sum */ | ||
73 | }; | 76 | }; |
74 | 77 | ||
75 | /* | 78 | /* |
diff --git a/include/linux/pnfs_osd_xdr.h b/include/linux/pnfs_osd_xdr.h index fe25876c1a5d..17d7d0d20eca 100644 --- a/include/linux/pnfs_osd_xdr.h +++ b/include/linux/pnfs_osd_xdr.h | |||
@@ -5,7 +5,7 @@ | |||
5 | * All rights reserved. | 5 | * All rights reserved. |
6 | * | 6 | * |
7 | * Benny Halevy <bhalevy@panasas.com> | 7 | * Benny Halevy <bhalevy@panasas.com> |
8 | * Boaz Harrosh <bharrosh@panasas.com> | 8 | * Boaz Harrosh <ooo@electrozaur.com> |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
11 | * it under the terms of the GNU General Public License version 2 | 11 | * it under the terms of the GNU General Public License version 2 |
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h index d347c805f923..f540b1496e2f 100644 --- a/include/linux/regulator/consumer.h +++ b/include/linux/regulator/consumer.h | |||
@@ -35,6 +35,8 @@ | |||
35 | #ifndef __LINUX_REGULATOR_CONSUMER_H_ | 35 | #ifndef __LINUX_REGULATOR_CONSUMER_H_ |
36 | #define __LINUX_REGULATOR_CONSUMER_H_ | 36 | #define __LINUX_REGULATOR_CONSUMER_H_ |
37 | 37 | ||
38 | #include <linux/err.h> | ||
39 | |||
38 | struct device; | 40 | struct device; |
39 | struct notifier_block; | 41 | struct notifier_block; |
40 | struct regmap; | 42 | struct regmap; |
diff --git a/include/linux/string.h b/include/linux/string.h index e6edfe51575a..2e22a2e58f3a 100644 --- a/include/linux/string.h +++ b/include/linux/string.h | |||
@@ -132,7 +132,7 @@ int bprintf(u32 *bin_buf, size_t size, const char *fmt, ...) __printf(3, 4); | |||
132 | #endif | 132 | #endif |
133 | 133 | ||
134 | extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos, | 134 | extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos, |
135 | const void *from, size_t available); | 135 | const void *from, size_t available); |
136 | 136 | ||
137 | /** | 137 | /** |
138 | * strstarts - does @str start with @prefix? | 138 | * strstarts - does @str start with @prefix? |
@@ -144,7 +144,8 @@ static inline bool strstarts(const char *str, const char *prefix) | |||
144 | return strncmp(str, prefix, strlen(prefix)) == 0; | 144 | return strncmp(str, prefix, strlen(prefix)) == 0; |
145 | } | 145 | } |
146 | 146 | ||
147 | extern size_t memweight(const void *ptr, size_t bytes); | 147 | size_t memweight(const void *ptr, size_t bytes); |
148 | void memzero_explicit(void *s, size_t count); | ||
148 | 149 | ||
149 | /** | 150 | /** |
150 | * kbasename - return the last part of a pathname. | 151 | * kbasename - return the last part of a pathname. |
diff --git a/include/linux/thermal.h b/include/linux/thermal.h index 0305cde21a74..ef90838b36a0 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h | |||
@@ -44,6 +44,10 @@ | |||
44 | #define KELVIN_TO_CELSIUS(t) (long)(((long)t-2732 >= 0) ? \ | 44 | #define KELVIN_TO_CELSIUS(t) (long)(((long)t-2732 >= 0) ? \ |
45 | ((long)t-2732+5)/10 : ((long)t-2732-5)/10) | 45 | ((long)t-2732+5)/10 : ((long)t-2732-5)/10) |
46 | #define CELSIUS_TO_KELVIN(t) ((t)*10+2732) | 46 | #define CELSIUS_TO_KELVIN(t) ((t)*10+2732) |
47 | #define DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(t, off) (((t) - (off)) * 100) | ||
48 | #define DECI_KELVIN_TO_MILLICELSIUS(t) DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(t, 2732) | ||
49 | #define MILLICELSIUS_TO_DECI_KELVIN_WITH_OFFSET(t, off) (((t) / 100) + (off)) | ||
50 | #define MILLICELSIUS_TO_DECI_KELVIN(t) MILLICELSIUS_TO_DECI_KELVIN_WITH_OFFSET(t, 2732) | ||
47 | 51 | ||
48 | /* Adding event notification support elements */ | 52 | /* Adding event notification support elements */ |
49 | #define THERMAL_GENL_FAMILY_NAME "thermal_event" | 53 | #define THERMAL_GENL_FAMILY_NAME "thermal_event" |
diff --git a/include/linux/uio_driver.h b/include/linux/uio_driver.h index 1ad4724458de..baa81718d985 100644 --- a/include/linux/uio_driver.h +++ b/include/linux/uio_driver.h | |||
@@ -63,7 +63,17 @@ struct uio_port { | |||
63 | 63 | ||
64 | #define MAX_UIO_PORT_REGIONS 5 | 64 | #define MAX_UIO_PORT_REGIONS 5 |
65 | 65 | ||
66 | struct uio_device; | 66 | struct uio_device { |
67 | struct module *owner; | ||
68 | struct device *dev; | ||
69 | int minor; | ||
70 | atomic_t event; | ||
71 | struct fasync_struct *async_queue; | ||
72 | wait_queue_head_t wait; | ||
73 | struct uio_info *info; | ||
74 | struct kobject *map_dir; | ||
75 | struct kobject *portio_dir; | ||
76 | }; | ||
67 | 77 | ||
68 | /** | 78 | /** |
69 | * struct uio_info - UIO device capabilities | 79 | * struct uio_info - UIO device capabilities |
diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h index 4f844c6b03ee..60beb5dc7977 100644 --- a/include/linux/uprobes.h +++ b/include/linux/uprobes.h | |||
@@ -98,11 +98,11 @@ struct uprobes_state { | |||
98 | struct xol_area *xol_area; | 98 | struct xol_area *xol_area; |
99 | }; | 99 | }; |
100 | 100 | ||
101 | extern int __weak set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); | 101 | extern int set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); |
102 | extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); | 102 | extern int set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); |
103 | extern bool __weak is_swbp_insn(uprobe_opcode_t *insn); | 103 | extern bool is_swbp_insn(uprobe_opcode_t *insn); |
104 | extern bool __weak is_trap_insn(uprobe_opcode_t *insn); | 104 | extern bool is_trap_insn(uprobe_opcode_t *insn); |
105 | extern unsigned long __weak uprobe_get_swbp_addr(struct pt_regs *regs); | 105 | extern unsigned long uprobe_get_swbp_addr(struct pt_regs *regs); |
106 | extern unsigned long uprobe_get_trap_addr(struct pt_regs *regs); | 106 | extern unsigned long uprobe_get_trap_addr(struct pt_regs *regs); |
107 | extern int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t); | 107 | extern int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t); |
108 | extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); | 108 | extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); |
@@ -128,8 +128,8 @@ extern bool arch_uprobe_xol_was_trapped(struct task_struct *tsk); | |||
128 | extern int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data); | 128 | extern int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data); |
129 | extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs); | 129 | extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs); |
130 | extern unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs); | 130 | extern unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs); |
131 | extern bool __weak arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs); | 131 | extern bool arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs); |
132 | extern void __weak arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr, | 132 | extern void arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr, |
133 | void *src, unsigned long len); | 133 | void *src, unsigned long len); |
134 | #else /* !CONFIG_UPROBES */ | 134 | #else /* !CONFIG_UPROBES */ |
135 | struct uprobes_state { | 135 | struct uprobes_state { |
diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h index 2a3038ee17a3..395b70e0eccf 100644 --- a/include/linux/watchdog.h +++ b/include/linux/watchdog.h | |||
@@ -97,13 +97,8 @@ struct watchdog_device { | |||
97 | #define WDOG_UNREGISTERED 4 /* Has the device been unregistered */ | 97 | #define WDOG_UNREGISTERED 4 /* Has the device been unregistered */ |
98 | }; | 98 | }; |
99 | 99 | ||
100 | #ifdef CONFIG_WATCHDOG_NOWAYOUT | 100 | #define WATCHDOG_NOWAYOUT IS_BUILTIN(CONFIG_WATCHDOG_NOWAYOUT) |
101 | #define WATCHDOG_NOWAYOUT 1 | 101 | #define WATCHDOG_NOWAYOUT_INIT_STATUS (WATCHDOG_NOWAYOUT << WDOG_NO_WAY_OUT) |
102 | #define WATCHDOG_NOWAYOUT_INIT_STATUS (1 << WDOG_NO_WAY_OUT) | ||
103 | #else | ||
104 | #define WATCHDOG_NOWAYOUT 0 | ||
105 | #define WATCHDOG_NOWAYOUT_INIT_STATUS 0 | ||
106 | #endif | ||
107 | 102 | ||
108 | /* Use the following function to check whether or not the watchdog is active */ | 103 | /* Use the following function to check whether or not the watchdog is active */ |
109 | static inline bool watchdog_active(struct watchdog_device *wdd) | 104 | static inline bool watchdog_active(struct watchdog_device *wdd) |
diff --git a/include/scsi/osd_initiator.h b/include/scsi/osd_initiator.h index b2e85fdd2ae0..a09cca829082 100644 --- a/include/scsi/osd_initiator.h +++ b/include/scsi/osd_initiator.h | |||
@@ -4,7 +4,7 @@ | |||
4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. |
5 | * | 5 | * |
6 | * Authors: | 6 | * Authors: |
7 | * Boaz Harrosh <bharrosh@panasas.com> | 7 | * Boaz Harrosh <ooo@electrozaur.com> |
8 | * Benny Halevy <bhalevy@panasas.com> | 8 | * Benny Halevy <bhalevy@panasas.com> |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
diff --git a/include/scsi/osd_ore.h b/include/scsi/osd_ore.h index 6ca3265a4dca..7a8d2cd30328 100644 --- a/include/scsi/osd_ore.h +++ b/include/scsi/osd_ore.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2011 | 2 | * Copyright (C) 2011 |
3 | * Boaz Harrosh <bharrosh@panasas.com> | 3 | * Boaz Harrosh <ooo@electrozaur.com> |
4 | * | 4 | * |
5 | * Public Declarations of the ORE API | 5 | * Public Declarations of the ORE API |
6 | * | 6 | * |
diff --git a/include/scsi/osd_protocol.h b/include/scsi/osd_protocol.h index a2594afe05c7..e0ca835e7bf7 100644 --- a/include/scsi/osd_protocol.h +++ b/include/scsi/osd_protocol.h | |||
@@ -4,7 +4,7 @@ | |||
4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. |
5 | * | 5 | * |
6 | * Authors: | 6 | * Authors: |
7 | * Boaz Harrosh <bharrosh@panasas.com> | 7 | * Boaz Harrosh <ooo@electrozaur.com> |
8 | * Benny Halevy <bhalevy@panasas.com> | 8 | * Benny Halevy <bhalevy@panasas.com> |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
@@ -496,7 +496,7 @@ struct osd_timestamp { | |||
496 | */ | 496 | */ |
497 | 497 | ||
498 | struct osd_key_identifier { | 498 | struct osd_key_identifier { |
499 | u8 id[7]; /* if you know why 7 please email bharrosh@panasas.com */ | 499 | u8 id[7]; /* if you know why 7 please email ooo@electrozaur.com */ |
500 | } __packed; | 500 | } __packed; |
501 | 501 | ||
502 | /* for osd_capability.format */ | 502 | /* for osd_capability.format */ |
diff --git a/include/scsi/osd_sec.h b/include/scsi/osd_sec.h index f96151c9c9e8..7abeb0f0db30 100644 --- a/include/scsi/osd_sec.h +++ b/include/scsi/osd_sec.h | |||
@@ -4,7 +4,7 @@ | |||
4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. |
5 | * | 5 | * |
6 | * Authors: | 6 | * Authors: |
7 | * Boaz Harrosh <bharrosh@panasas.com> | 7 | * Boaz Harrosh <ooo@electrozaur.com> |
8 | * Benny Halevy <bhalevy@panasas.com> | 8 | * Benny Halevy <bhalevy@panasas.com> |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
diff --git a/include/scsi/osd_sense.h b/include/scsi/osd_sense.h index 91db543a5502..d52aa93a0b2d 100644 --- a/include/scsi/osd_sense.h +++ b/include/scsi/osd_sense.h | |||
@@ -4,7 +4,7 @@ | |||
4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. |
5 | * | 5 | * |
6 | * Authors: | 6 | * Authors: |
7 | * Boaz Harrosh <bharrosh@panasas.com> | 7 | * Boaz Harrosh <ooo@electrozaur.com> |
8 | * Benny Halevy <bhalevy@panasas.com> | 8 | * Benny Halevy <bhalevy@panasas.com> |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
diff --git a/include/scsi/osd_types.h b/include/scsi/osd_types.h index bd0be7ed4bcf..48e8a165e136 100644 --- a/include/scsi/osd_types.h +++ b/include/scsi/osd_types.h | |||
@@ -4,7 +4,7 @@ | |||
4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. |
5 | * | 5 | * |
6 | * Authors: | 6 | * Authors: |
7 | * Boaz Harrosh <bharrosh@panasas.com> | 7 | * Boaz Harrosh <ooo@electrozaur.com> |
8 | * Benny Halevy <bhalevy@panasas.com> | 8 | * Benny Halevy <bhalevy@panasas.com> |
9 | * | 9 | * |
10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index 9ec9864ecf38..23c518a0340c 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h | |||
@@ -108,6 +108,8 @@ | |||
108 | #define DA_EMULATE_ALUA 0 | 108 | #define DA_EMULATE_ALUA 0 |
109 | /* Enforce SCSI Initiator Port TransportID with 'ISID' for PR */ | 109 | /* Enforce SCSI Initiator Port TransportID with 'ISID' for PR */ |
110 | #define DA_ENFORCE_PR_ISIDS 1 | 110 | #define DA_ENFORCE_PR_ISIDS 1 |
111 | /* Force SPC-3 PR Activate Persistence across Target Power Loss */ | ||
112 | #define DA_FORCE_PR_APTPL 0 | ||
111 | #define DA_STATUS_MAX_SECTORS_MIN 16 | 113 | #define DA_STATUS_MAX_SECTORS_MIN 16 |
112 | #define DA_STATUS_MAX_SECTORS_MAX 8192 | 114 | #define DA_STATUS_MAX_SECTORS_MAX 8192 |
113 | /* By default don't report non-rotating (solid state) medium */ | 115 | /* By default don't report non-rotating (solid state) medium */ |
@@ -680,6 +682,7 @@ struct se_dev_attrib { | |||
680 | enum target_prot_type pi_prot_type; | 682 | enum target_prot_type pi_prot_type; |
681 | enum target_prot_type hw_pi_prot_type; | 683 | enum target_prot_type hw_pi_prot_type; |
682 | int enforce_pr_isids; | 684 | int enforce_pr_isids; |
685 | int force_pr_aptpl; | ||
683 | int is_nonrot; | 686 | int is_nonrot; |
684 | int emulate_rest_reord; | 687 | int emulate_rest_reord; |
685 | u32 hw_block_size; | 688 | u32 hw_block_size; |
@@ -903,4 +906,18 @@ struct se_wwn { | |||
903 | struct config_group fabric_stat_group; | 906 | struct config_group fabric_stat_group; |
904 | }; | 907 | }; |
905 | 908 | ||
909 | static inline void atomic_inc_mb(atomic_t *v) | ||
910 | { | ||
911 | smp_mb__before_atomic(); | ||
912 | atomic_inc(v); | ||
913 | smp_mb__after_atomic(); | ||
914 | } | ||
915 | |||
916 | static inline void atomic_dec_mb(atomic_t *v) | ||
917 | { | ||
918 | smp_mb__before_atomic(); | ||
919 | atomic_dec(v); | ||
920 | smp_mb__after_atomic(); | ||
921 | } | ||
922 | |||
906 | #endif /* TARGET_CORE_BASE_H */ | 923 | #endif /* TARGET_CORE_BASE_H */ |
diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h index d4f70a7fe876..ff4bd1b35246 100644 --- a/include/trace/events/ext4.h +++ b/include/trace/events/ext4.h | |||
@@ -2369,7 +2369,7 @@ TRACE_EVENT(ext4_es_lookup_extent_exit, | |||
2369 | show_extent_status(__entry->found ? __entry->status : 0)) | 2369 | show_extent_status(__entry->found ? __entry->status : 0)) |
2370 | ); | 2370 | ); |
2371 | 2371 | ||
2372 | TRACE_EVENT(ext4_es_shrink_enter, | 2372 | DECLARE_EVENT_CLASS(ext4__es_shrink_enter, |
2373 | TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt), | 2373 | TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt), |
2374 | 2374 | ||
2375 | TP_ARGS(sb, nr_to_scan, cache_cnt), | 2375 | TP_ARGS(sb, nr_to_scan, cache_cnt), |
@@ -2391,26 +2391,38 @@ TRACE_EVENT(ext4_es_shrink_enter, | |||
2391 | __entry->nr_to_scan, __entry->cache_cnt) | 2391 | __entry->nr_to_scan, __entry->cache_cnt) |
2392 | ); | 2392 | ); |
2393 | 2393 | ||
2394 | TRACE_EVENT(ext4_es_shrink_exit, | 2394 | DEFINE_EVENT(ext4__es_shrink_enter, ext4_es_shrink_count, |
2395 | TP_PROTO(struct super_block *sb, int shrunk_nr, int cache_cnt), | 2395 | TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt), |
2396 | 2396 | ||
2397 | TP_ARGS(sb, shrunk_nr, cache_cnt), | 2397 | TP_ARGS(sb, nr_to_scan, cache_cnt) |
2398 | ); | ||
2399 | |||
2400 | DEFINE_EVENT(ext4__es_shrink_enter, ext4_es_shrink_scan_enter, | ||
2401 | TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt), | ||
2402 | |||
2403 | TP_ARGS(sb, nr_to_scan, cache_cnt) | ||
2404 | ); | ||
2405 | |||
2406 | TRACE_EVENT(ext4_es_shrink_scan_exit, | ||
2407 | TP_PROTO(struct super_block *sb, int nr_shrunk, int cache_cnt), | ||
2408 | |||
2409 | TP_ARGS(sb, nr_shrunk, cache_cnt), | ||
2398 | 2410 | ||
2399 | TP_STRUCT__entry( | 2411 | TP_STRUCT__entry( |
2400 | __field( dev_t, dev ) | 2412 | __field( dev_t, dev ) |
2401 | __field( int, shrunk_nr ) | 2413 | __field( int, nr_shrunk ) |
2402 | __field( int, cache_cnt ) | 2414 | __field( int, cache_cnt ) |
2403 | ), | 2415 | ), |
2404 | 2416 | ||
2405 | TP_fast_assign( | 2417 | TP_fast_assign( |
2406 | __entry->dev = sb->s_dev; | 2418 | __entry->dev = sb->s_dev; |
2407 | __entry->shrunk_nr = shrunk_nr; | 2419 | __entry->nr_shrunk = nr_shrunk; |
2408 | __entry->cache_cnt = cache_cnt; | 2420 | __entry->cache_cnt = cache_cnt; |
2409 | ), | 2421 | ), |
2410 | 2422 | ||
2411 | TP_printk("dev %d,%d shrunk_nr %d cache_cnt %d", | 2423 | TP_printk("dev %d,%d nr_shrunk %d cache_cnt %d", |
2412 | MAJOR(__entry->dev), MINOR(__entry->dev), | 2424 | MAJOR(__entry->dev), MINOR(__entry->dev), |
2413 | __entry->shrunk_nr, __entry->cache_cnt) | 2425 | __entry->nr_shrunk, __entry->cache_cnt) |
2414 | ); | 2426 | ); |
2415 | 2427 | ||
2416 | TRACE_EVENT(ext4_collapse_range, | 2428 | TRACE_EVENT(ext4_collapse_range, |
@@ -2438,6 +2450,37 @@ TRACE_EVENT(ext4_collapse_range, | |||
2438 | __entry->offset, __entry->len) | 2450 | __entry->offset, __entry->len) |
2439 | ); | 2451 | ); |
2440 | 2452 | ||
2453 | TRACE_EVENT(ext4_es_shrink, | ||
2454 | TP_PROTO(struct super_block *sb, int nr_shrunk, u64 scan_time, | ||
2455 | int skip_precached, int nr_skipped, int retried), | ||
2456 | |||
2457 | TP_ARGS(sb, nr_shrunk, scan_time, skip_precached, nr_skipped, retried), | ||
2458 | |||
2459 | TP_STRUCT__entry( | ||
2460 | __field( dev_t, dev ) | ||
2461 | __field( int, nr_shrunk ) | ||
2462 | __field( unsigned long long, scan_time ) | ||
2463 | __field( int, skip_precached ) | ||
2464 | __field( int, nr_skipped ) | ||
2465 | __field( int, retried ) | ||
2466 | ), | ||
2467 | |||
2468 | TP_fast_assign( | ||
2469 | __entry->dev = sb->s_dev; | ||
2470 | __entry->nr_shrunk = nr_shrunk; | ||
2471 | __entry->scan_time = div_u64(scan_time, 1000); | ||
2472 | __entry->skip_precached = skip_precached; | ||
2473 | __entry->nr_skipped = nr_skipped; | ||
2474 | __entry->retried = retried; | ||
2475 | ), | ||
2476 | |||
2477 | TP_printk("dev %d,%d nr_shrunk %d, scan_time %llu skip_precached %d " | ||
2478 | "nr_skipped %d retried %d", | ||
2479 | MAJOR(__entry->dev), MINOR(__entry->dev), __entry->nr_shrunk, | ||
2480 | __entry->scan_time, __entry->skip_precached, | ||
2481 | __entry->nr_skipped, __entry->retried) | ||
2482 | ); | ||
2483 | |||
2441 | #endif /* _TRACE_EXT4_H */ | 2484 | #endif /* _TRACE_EXT4_H */ |
2442 | 2485 | ||
2443 | /* This part must be outside protection */ | 2486 | /* This part must be outside protection */ |
diff --git a/include/trace/events/rcu.h b/include/trace/events/rcu.h index 9b56f37148cf..e335e7d8c6c2 100644 --- a/include/trace/events/rcu.h +++ b/include/trace/events/rcu.h | |||
@@ -660,18 +660,18 @@ TRACE_EVENT(rcu_torture_read, | |||
660 | /* | 660 | /* |
661 | * Tracepoint for _rcu_barrier() execution. The string "s" describes | 661 | * Tracepoint for _rcu_barrier() execution. The string "s" describes |
662 | * the _rcu_barrier phase: | 662 | * the _rcu_barrier phase: |
663 | * "Begin": rcu_barrier_callback() started. | 663 | * "Begin": _rcu_barrier() started. |
664 | * "Check": rcu_barrier_callback() checking for piggybacking. | 664 | * "Check": _rcu_barrier() checking for piggybacking. |
665 | * "EarlyExit": rcu_barrier_callback() piggybacked, thus early exit. | 665 | * "EarlyExit": _rcu_barrier() piggybacked, thus early exit. |
666 | * "Inc1": rcu_barrier_callback() piggyback check counter incremented. | 666 | * "Inc1": _rcu_barrier() piggyback check counter incremented. |
667 | * "Offline": rcu_barrier_callback() found offline CPU | 667 | * "OfflineNoCB": _rcu_barrier() found callback on never-online CPU |
668 | * "OnlineNoCB": rcu_barrier_callback() found online no-CBs CPU. | 668 | * "OnlineNoCB": _rcu_barrier() found online no-CBs CPU. |
669 | * "OnlineQ": rcu_barrier_callback() found online CPU with callbacks. | 669 | * "OnlineQ": _rcu_barrier() found online CPU with callbacks. |
670 | * "OnlineNQ": rcu_barrier_callback() found online CPU, no callbacks. | 670 | * "OnlineNQ": _rcu_barrier() found online CPU, no callbacks. |
671 | * "IRQ": An rcu_barrier_callback() callback posted on remote CPU. | 671 | * "IRQ": An rcu_barrier_callback() callback posted on remote CPU. |
672 | * "CB": An rcu_barrier_callback() invoked a callback, not the last. | 672 | * "CB": An rcu_barrier_callback() invoked a callback, not the last. |
673 | * "LastCB": An rcu_barrier_callback() invoked the last callback. | 673 | * "LastCB": An rcu_barrier_callback() invoked the last callback. |
674 | * "Inc2": rcu_barrier_callback() piggyback check counter incremented. | 674 | * "Inc2": _rcu_barrier() piggyback check counter incremented. |
675 | * The "cpu" argument is the CPU or -1 if meaningless, the "cnt" argument | 675 | * The "cpu" argument is the CPU or -1 if meaningless, the "cnt" argument |
676 | * is the count of remaining callbacks, and "done" is the piggybacking count. | 676 | * is the count of remaining callbacks, and "done" is the piggybacking count. |
677 | */ | 677 | */ |
diff --git a/include/trace/events/thermal.h b/include/trace/events/thermal.h new file mode 100644 index 000000000000..0f4f95d63c03 --- /dev/null +++ b/include/trace/events/thermal.h | |||
@@ -0,0 +1,83 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM thermal | ||
3 | |||
4 | #if !defined(_TRACE_THERMAL_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_THERMAL_H | ||
6 | |||
7 | #include <linux/thermal.h> | ||
8 | #include <linux/tracepoint.h> | ||
9 | |||
10 | TRACE_EVENT(thermal_temperature, | ||
11 | |||
12 | TP_PROTO(struct thermal_zone_device *tz), | ||
13 | |||
14 | TP_ARGS(tz), | ||
15 | |||
16 | TP_STRUCT__entry( | ||
17 | __string(thermal_zone, tz->type) | ||
18 | __field(int, id) | ||
19 | __field(int, temp_prev) | ||
20 | __field(int, temp) | ||
21 | ), | ||
22 | |||
23 | TP_fast_assign( | ||
24 | __assign_str(thermal_zone, tz->type); | ||
25 | __entry->id = tz->id; | ||
26 | __entry->temp_prev = tz->last_temperature; | ||
27 | __entry->temp = tz->temperature; | ||
28 | ), | ||
29 | |||
30 | TP_printk("thermal_zone=%s id=%d temp_prev=%d temp=%d", | ||
31 | __get_str(thermal_zone), __entry->id, __entry->temp_prev, | ||
32 | __entry->temp) | ||
33 | ); | ||
34 | |||
35 | TRACE_EVENT(cdev_update, | ||
36 | |||
37 | TP_PROTO(struct thermal_cooling_device *cdev, unsigned long target), | ||
38 | |||
39 | TP_ARGS(cdev, target), | ||
40 | |||
41 | TP_STRUCT__entry( | ||
42 | __string(type, cdev->type) | ||
43 | __field(unsigned long, target) | ||
44 | ), | ||
45 | |||
46 | TP_fast_assign( | ||
47 | __assign_str(type, cdev->type); | ||
48 | __entry->target = target; | ||
49 | ), | ||
50 | |||
51 | TP_printk("type=%s target=%lu", __get_str(type), __entry->target) | ||
52 | ); | ||
53 | |||
54 | TRACE_EVENT(thermal_zone_trip, | ||
55 | |||
56 | TP_PROTO(struct thermal_zone_device *tz, int trip, | ||
57 | enum thermal_trip_type trip_type), | ||
58 | |||
59 | TP_ARGS(tz, trip, trip_type), | ||
60 | |||
61 | TP_STRUCT__entry( | ||
62 | __string(thermal_zone, tz->type) | ||
63 | __field(int, id) | ||
64 | __field(int, trip) | ||
65 | __field(enum thermal_trip_type, trip_type) | ||
66 | ), | ||
67 | |||
68 | TP_fast_assign( | ||
69 | __assign_str(thermal_zone, tz->type); | ||
70 | __entry->id = tz->id; | ||
71 | __entry->trip = trip; | ||
72 | __entry->trip_type = trip_type; | ||
73 | ), | ||
74 | |||
75 | TP_printk("thermal_zone=%s id=%d trip=%d trip_type=%d", | ||
76 | __get_str(thermal_zone), __entry->id, __entry->trip, | ||
77 | __entry->trip_type) | ||
78 | ); | ||
79 | |||
80 | #endif /* _TRACE_THERMAL_H */ | ||
81 | |||
82 | /* This part must be outside protection */ | ||
83 | #include <trace/define_trace.h> | ||
diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild index 6cad97485bad..b70237e8bc37 100644 --- a/include/uapi/linux/Kbuild +++ b/include/uapi/linux/Kbuild | |||
@@ -374,6 +374,7 @@ header-y += swab.h | |||
374 | header-y += synclink.h | 374 | header-y += synclink.h |
375 | header-y += sysctl.h | 375 | header-y += sysctl.h |
376 | header-y += sysinfo.h | 376 | header-y += sysinfo.h |
377 | header-y += target_core_user.h | ||
377 | header-y += taskstats.h | 378 | header-y += taskstats.h |
378 | header-y += tcp.h | 379 | header-y += tcp.h |
379 | header-y += tcp_metrics.h | 380 | header-y += tcp_metrics.h |
diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h index ca1a11bb4443..3735fa0a6784 100644 --- a/include/uapi/linux/fs.h +++ b/include/uapi/linux/fs.h | |||
@@ -37,6 +37,7 @@ | |||
37 | 37 | ||
38 | #define RENAME_NOREPLACE (1 << 0) /* Don't overwrite target */ | 38 | #define RENAME_NOREPLACE (1 << 0) /* Don't overwrite target */ |
39 | #define RENAME_EXCHANGE (1 << 1) /* Exchange source and dest */ | 39 | #define RENAME_EXCHANGE (1 << 1) /* Exchange source and dest */ |
40 | #define RENAME_WHITEOUT (1 << 2) /* Whiteout source */ | ||
40 | 41 | ||
41 | struct fstrim_range { | 42 | struct fstrim_range { |
42 | __u64 start; | 43 | __u64 start; |
diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h index 1874ebe9ac1e..a1d7e931ab72 100644 --- a/include/uapi/linux/input.h +++ b/include/uapi/linux/input.h | |||
@@ -739,6 +739,13 @@ struct input_keymap_entry { | |||
739 | #define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */ | 739 | #define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */ |
740 | #define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */ | 740 | #define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */ |
741 | 741 | ||
742 | #define KEY_KBDINPUTASSIST_PREV 0x260 | ||
743 | #define KEY_KBDINPUTASSIST_NEXT 0x261 | ||
744 | #define KEY_KBDINPUTASSIST_PREVGROUP 0x262 | ||
745 | #define KEY_KBDINPUTASSIST_NEXTGROUP 0x263 | ||
746 | #define KEY_KBDINPUTASSIST_ACCEPT 0x264 | ||
747 | #define KEY_KBDINPUTASSIST_CANCEL 0x265 | ||
748 | |||
742 | #define BTN_TRIGGER_HAPPY 0x2c0 | 749 | #define BTN_TRIGGER_HAPPY 0x2c0 |
743 | #define BTN_TRIGGER_HAPPY1 0x2c0 | 750 | #define BTN_TRIGGER_HAPPY1 0x2c0 |
744 | #define BTN_TRIGGER_HAPPY2 0x2c1 | 751 | #define BTN_TRIGGER_HAPPY2 0x2c1 |
diff --git a/include/uapi/linux/target_core_user.h b/include/uapi/linux/target_core_user.h new file mode 100644 index 000000000000..7dcfbe6771b1 --- /dev/null +++ b/include/uapi/linux/target_core_user.h | |||
@@ -0,0 +1,142 @@ | |||
1 | #ifndef __TARGET_CORE_USER_H | ||
2 | #define __TARGET_CORE_USER_H | ||
3 | |||
4 | /* This header will be used by application too */ | ||
5 | |||
6 | #include <linux/types.h> | ||
7 | #include <linux/uio.h> | ||
8 | |||
9 | #ifndef __packed | ||
10 | #define __packed __attribute__((packed)) | ||
11 | #endif | ||
12 | |||
13 | #define TCMU_VERSION "1.0" | ||
14 | |||
15 | /* | ||
16 | * Ring Design | ||
17 | * ----------- | ||
18 | * | ||
19 | * The mmaped area is divided into three parts: | ||
20 | * 1) The mailbox (struct tcmu_mailbox, below) | ||
21 | * 2) The command ring | ||
22 | * 3) Everything beyond the command ring (data) | ||
23 | * | ||
24 | * The mailbox tells userspace the offset of the command ring from the | ||
25 | * start of the shared memory region, and how big the command ring is. | ||
26 | * | ||
27 | * The kernel passes SCSI commands to userspace by putting a struct | ||
28 | * tcmu_cmd_entry in the ring, updating mailbox->cmd_head, and poking | ||
29 | * userspace via uio's interrupt mechanism. | ||
30 | * | ||
31 | * tcmu_cmd_entry contains a header. If the header type is PAD, | ||
32 | * userspace should skip hdr->length bytes (mod cmdr_size) to find the | ||
33 | * next cmd_entry. | ||
34 | * | ||
35 | * Otherwise, the entry will contain offsets into the mmaped area that | ||
36 | * contain the cdb and data buffers -- the latter accessible via the | ||
37 | * iov array. iov addresses are also offsets into the shared area. | ||
38 | * | ||
39 | * When userspace is completed handling the command, set | ||
40 | * entry->rsp.scsi_status, fill in rsp.sense_buffer if appropriate, | ||
41 | * and also set mailbox->cmd_tail equal to the old cmd_tail plus | ||
42 | * hdr->length, mod cmdr_size. If cmd_tail doesn't equal cmd_head, it | ||
43 | * should process the next packet the same way, and so on. | ||
44 | */ | ||
45 | |||
46 | #define TCMU_MAILBOX_VERSION 1 | ||
47 | #define ALIGN_SIZE 64 /* Should be enough for most CPUs */ | ||
48 | |||
49 | struct tcmu_mailbox { | ||
50 | __u16 version; | ||
51 | __u16 flags; | ||
52 | __u32 cmdr_off; | ||
53 | __u32 cmdr_size; | ||
54 | |||
55 | __u32 cmd_head; | ||
56 | |||
57 | /* Updated by user. On its own cacheline */ | ||
58 | __u32 cmd_tail __attribute__((__aligned__(ALIGN_SIZE))); | ||
59 | |||
60 | } __packed; | ||
61 | |||
62 | enum tcmu_opcode { | ||
63 | TCMU_OP_PAD = 0, | ||
64 | TCMU_OP_CMD, | ||
65 | }; | ||
66 | |||
67 | /* | ||
68 | * Only a few opcodes, and length is 8-byte aligned, so use low bits for opcode. | ||
69 | */ | ||
70 | struct tcmu_cmd_entry_hdr { | ||
71 | __u32 len_op; | ||
72 | } __packed; | ||
73 | |||
74 | #define TCMU_OP_MASK 0x7 | ||
75 | |||
76 | static inline enum tcmu_opcode tcmu_hdr_get_op(struct tcmu_cmd_entry_hdr *hdr) | ||
77 | { | ||
78 | return hdr->len_op & TCMU_OP_MASK; | ||
79 | } | ||
80 | |||
81 | static inline void tcmu_hdr_set_op(struct tcmu_cmd_entry_hdr *hdr, enum tcmu_opcode op) | ||
82 | { | ||
83 | hdr->len_op &= ~TCMU_OP_MASK; | ||
84 | hdr->len_op |= (op & TCMU_OP_MASK); | ||
85 | } | ||
86 | |||
87 | static inline __u32 tcmu_hdr_get_len(struct tcmu_cmd_entry_hdr *hdr) | ||
88 | { | ||
89 | return hdr->len_op & ~TCMU_OP_MASK; | ||
90 | } | ||
91 | |||
92 | static inline void tcmu_hdr_set_len(struct tcmu_cmd_entry_hdr *hdr, __u32 len) | ||
93 | { | ||
94 | hdr->len_op &= TCMU_OP_MASK; | ||
95 | hdr->len_op |= len; | ||
96 | } | ||
97 | |||
98 | /* Currently the same as SCSI_SENSE_BUFFERSIZE */ | ||
99 | #define TCMU_SENSE_BUFFERSIZE 96 | ||
100 | |||
101 | struct tcmu_cmd_entry { | ||
102 | struct tcmu_cmd_entry_hdr hdr; | ||
103 | |||
104 | uint16_t cmd_id; | ||
105 | uint16_t __pad1; | ||
106 | |||
107 | union { | ||
108 | struct { | ||
109 | uint64_t cdb_off; | ||
110 | uint64_t iov_cnt; | ||
111 | struct iovec iov[0]; | ||
112 | } req; | ||
113 | struct { | ||
114 | uint8_t scsi_status; | ||
115 | uint8_t __pad1; | ||
116 | uint16_t __pad2; | ||
117 | uint32_t __pad3; | ||
118 | char sense_buffer[TCMU_SENSE_BUFFERSIZE]; | ||
119 | } rsp; | ||
120 | }; | ||
121 | |||
122 | } __packed; | ||
123 | |||
124 | #define TCMU_OP_ALIGN_SIZE sizeof(uint64_t) | ||
125 | |||
126 | enum tcmu_genl_cmd { | ||
127 | TCMU_CMD_UNSPEC, | ||
128 | TCMU_CMD_ADDED_DEVICE, | ||
129 | TCMU_CMD_REMOVED_DEVICE, | ||
130 | __TCMU_CMD_MAX, | ||
131 | }; | ||
132 | #define TCMU_CMD_MAX (__TCMU_CMD_MAX - 1) | ||
133 | |||
134 | enum tcmu_genl_attr { | ||
135 | TCMU_ATTR_UNSPEC, | ||
136 | TCMU_ATTR_DEVICE, | ||
137 | TCMU_ATTR_MINOR, | ||
138 | __TCMU_ATTR_MAX, | ||
139 | }; | ||
140 | #define TCMU_ATTR_MAX (__TCMU_ATTR_MAX - 1) | ||
141 | |||
142 | #endif | ||
diff --git a/include/uapi/linux/v4l2-dv-timings.h b/include/uapi/linux/v4l2-dv-timings.h index 6a0764c89fcb..6c8f159e416e 100644 --- a/include/uapi/linux/v4l2-dv-timings.h +++ b/include/uapi/linux/v4l2-dv-timings.h | |||
@@ -21,8 +21,17 @@ | |||
21 | #ifndef _V4L2_DV_TIMINGS_H | 21 | #ifndef _V4L2_DV_TIMINGS_H |
22 | #define _V4L2_DV_TIMINGS_H | 22 | #define _V4L2_DV_TIMINGS_H |
23 | 23 | ||
24 | #if __GNUC__ < 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ < 6)) | ||
25 | /* Sadly gcc versions older than 4.6 have a bug in how they initialize | ||
26 | anonymous unions where they require additional curly brackets. | ||
27 | This violates the C1x standard. This workaround adds the curly brackets | ||
28 | if needed. */ | ||
24 | #define V4L2_INIT_BT_TIMINGS(_width, args...) \ | 29 | #define V4L2_INIT_BT_TIMINGS(_width, args...) \ |
25 | { .bt = { _width , ## args } } | 30 | { .bt = { _width , ## args } } |
31 | #else | ||
32 | #define V4L2_INIT_BT_TIMINGS(_width, args...) \ | ||
33 | .bt = { _width , ## args } | ||
34 | #endif | ||
26 | 35 | ||
27 | /* CEA-861-E timings (i.e. standard HDTV timings) */ | 36 | /* CEA-861-E timings (i.e. standard HDTV timings) */ |
28 | 37 | ||