diff options
Diffstat (limited to 'include')
54 files changed, 988 insertions, 401 deletions
diff --git a/include/asm-generic/cputime.h b/include/asm-generic/cputime.h index 9a62937c56ca..51969436b8b8 100644 --- a/include/asm-generic/cputime.h +++ b/include/asm-generic/cputime.h | |||
@@ -4,66 +4,12 @@ | |||
4 | #include <linux/time.h> | 4 | #include <linux/time.h> |
5 | #include <linux/jiffies.h> | 5 | #include <linux/jiffies.h> |
6 | 6 | ||
7 | typedef unsigned long __nocast cputime_t; | 7 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING |
8 | 8 | # include <asm-generic/cputime_jiffies.h> | |
9 | #define cputime_one_jiffy jiffies_to_cputime(1) | 9 | #endif |
10 | #define cputime_to_jiffies(__ct) (__force unsigned long)(__ct) | ||
11 | #define cputime_to_scaled(__ct) (__ct) | ||
12 | #define jiffies_to_cputime(__hz) (__force cputime_t)(__hz) | ||
13 | |||
14 | typedef u64 __nocast cputime64_t; | ||
15 | |||
16 | #define cputime64_to_jiffies64(__ct) (__force u64)(__ct) | ||
17 | #define jiffies64_to_cputime64(__jif) (__force cputime64_t)(__jif) | ||
18 | |||
19 | #define nsecs_to_cputime64(__ct) \ | ||
20 | jiffies64_to_cputime64(nsecs_to_jiffies64(__ct)) | ||
21 | |||
22 | |||
23 | /* | ||
24 | * Convert cputime to microseconds and back. | ||
25 | */ | ||
26 | #define cputime_to_usecs(__ct) \ | ||
27 | jiffies_to_usecs(cputime_to_jiffies(__ct)) | ||
28 | #define usecs_to_cputime(__usec) \ | ||
29 | jiffies_to_cputime(usecs_to_jiffies(__usec)) | ||
30 | #define usecs_to_cputime64(__usec) \ | ||
31 | jiffies64_to_cputime64(nsecs_to_jiffies64((__usec) * 1000)) | ||
32 | |||
33 | /* | ||
34 | * Convert cputime to seconds and back. | ||
35 | */ | ||
36 | #define cputime_to_secs(jif) (cputime_to_jiffies(jif) / HZ) | ||
37 | #define secs_to_cputime(sec) jiffies_to_cputime((sec) * HZ) | ||
38 | |||
39 | /* | ||
40 | * Convert cputime to timespec and back. | ||
41 | */ | ||
42 | #define timespec_to_cputime(__val) \ | ||
43 | jiffies_to_cputime(timespec_to_jiffies(__val)) | ||
44 | #define cputime_to_timespec(__ct,__val) \ | ||
45 | jiffies_to_timespec(cputime_to_jiffies(__ct),__val) | ||
46 | |||
47 | /* | ||
48 | * Convert cputime to timeval and back. | ||
49 | */ | ||
50 | #define timeval_to_cputime(__val) \ | ||
51 | jiffies_to_cputime(timeval_to_jiffies(__val)) | ||
52 | #define cputime_to_timeval(__ct,__val) \ | ||
53 | jiffies_to_timeval(cputime_to_jiffies(__ct),__val) | ||
54 | |||
55 | /* | ||
56 | * Convert cputime to clock and back. | ||
57 | */ | ||
58 | #define cputime_to_clock_t(__ct) \ | ||
59 | jiffies_to_clock_t(cputime_to_jiffies(__ct)) | ||
60 | #define clock_t_to_cputime(__x) \ | ||
61 | jiffies_to_cputime(clock_t_to_jiffies(__x)) | ||
62 | 10 | ||
63 | /* | 11 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN |
64 | * Convert cputime64 to clock. | 12 | # include <asm-generic/cputime_nsecs.h> |
65 | */ | 13 | #endif |
66 | #define cputime64_to_clock_t(__ct) \ | ||
67 | jiffies_64_to_clock_t(cputime64_to_jiffies64(__ct)) | ||
68 | 14 | ||
69 | #endif | 15 | #endif |
diff --git a/include/asm-generic/cputime_jiffies.h b/include/asm-generic/cputime_jiffies.h new file mode 100644 index 000000000000..272ecba9f588 --- /dev/null +++ b/include/asm-generic/cputime_jiffies.h | |||
@@ -0,0 +1,72 @@ | |||
1 | #ifndef _ASM_GENERIC_CPUTIME_JIFFIES_H | ||
2 | #define _ASM_GENERIC_CPUTIME_JIFFIES_H | ||
3 | |||
4 | typedef unsigned long __nocast cputime_t; | ||
5 | |||
6 | #define cputime_one_jiffy jiffies_to_cputime(1) | ||
7 | #define cputime_to_jiffies(__ct) (__force unsigned long)(__ct) | ||
8 | #define cputime_to_scaled(__ct) (__ct) | ||
9 | #define jiffies_to_cputime(__hz) (__force cputime_t)(__hz) | ||
10 | |||
11 | typedef u64 __nocast cputime64_t; | ||
12 | |||
13 | #define cputime64_to_jiffies64(__ct) (__force u64)(__ct) | ||
14 | #define jiffies64_to_cputime64(__jif) (__force cputime64_t)(__jif) | ||
15 | |||
16 | |||
17 | /* | ||
18 | * Convert nanoseconds to cputime | ||
19 | */ | ||
20 | #define nsecs_to_cputime64(__nsec) \ | ||
21 | jiffies64_to_cputime64(nsecs_to_jiffies64(__nsec)) | ||
22 | #define nsecs_to_cputime(__nsec) \ | ||
23 | jiffies_to_cputime(nsecs_to_jiffies(__nsec)) | ||
24 | |||
25 | |||
26 | /* | ||
27 | * Convert cputime to microseconds and back. | ||
28 | */ | ||
29 | #define cputime_to_usecs(__ct) \ | ||
30 | jiffies_to_usecs(cputime_to_jiffies(__ct)) | ||
31 | #define usecs_to_cputime(__usec) \ | ||
32 | jiffies_to_cputime(usecs_to_jiffies(__usec)) | ||
33 | #define usecs_to_cputime64(__usec) \ | ||
34 | jiffies64_to_cputime64(nsecs_to_jiffies64((__usec) * 1000)) | ||
35 | |||
36 | /* | ||
37 | * Convert cputime to seconds and back. | ||
38 | */ | ||
39 | #define cputime_to_secs(jif) (cputime_to_jiffies(jif) / HZ) | ||
40 | #define secs_to_cputime(sec) jiffies_to_cputime((sec) * HZ) | ||
41 | |||
42 | /* | ||
43 | * Convert cputime to timespec and back. | ||
44 | */ | ||
45 | #define timespec_to_cputime(__val) \ | ||
46 | jiffies_to_cputime(timespec_to_jiffies(__val)) | ||
47 | #define cputime_to_timespec(__ct,__val) \ | ||
48 | jiffies_to_timespec(cputime_to_jiffies(__ct),__val) | ||
49 | |||
50 | /* | ||
51 | * Convert cputime to timeval and back. | ||
52 | */ | ||
53 | #define timeval_to_cputime(__val) \ | ||
54 | jiffies_to_cputime(timeval_to_jiffies(__val)) | ||
55 | #define cputime_to_timeval(__ct,__val) \ | ||
56 | jiffies_to_timeval(cputime_to_jiffies(__ct),__val) | ||
57 | |||
58 | /* | ||
59 | * Convert cputime to clock and back. | ||
60 | */ | ||
61 | #define cputime_to_clock_t(__ct) \ | ||
62 | jiffies_to_clock_t(cputime_to_jiffies(__ct)) | ||
63 | #define clock_t_to_cputime(__x) \ | ||
64 | jiffies_to_cputime(clock_t_to_jiffies(__x)) | ||
65 | |||
66 | /* | ||
67 | * Convert cputime64 to clock. | ||
68 | */ | ||
69 | #define cputime64_to_clock_t(__ct) \ | ||
70 | jiffies_64_to_clock_t(cputime64_to_jiffies64(__ct)) | ||
71 | |||
72 | #endif | ||
diff --git a/include/asm-generic/cputime_nsecs.h b/include/asm-generic/cputime_nsecs.h new file mode 100644 index 000000000000..b6485cafb7bd --- /dev/null +++ b/include/asm-generic/cputime_nsecs.h | |||
@@ -0,0 +1,104 @@ | |||
1 | /* | ||
2 | * Definitions for measuring cputime in nsecs resolution. | ||
3 | * | ||
4 | * Based on <arch/ia64/include/asm/cputime.h> | ||
5 | * | ||
6 | * Copyright (C) 2007 FUJITSU LIMITED | ||
7 | * Copyright (C) 2007 Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License | ||
11 | * as published by the Free Software Foundation; either version | ||
12 | * 2 of the License, or (at your option) any later version. | ||
13 | * | ||
14 | */ | ||
15 | |||
16 | #ifndef _ASM_GENERIC_CPUTIME_NSECS_H | ||
17 | #define _ASM_GENERIC_CPUTIME_NSECS_H | ||
18 | |||
19 | typedef u64 __nocast cputime_t; | ||
20 | typedef u64 __nocast cputime64_t; | ||
21 | |||
22 | #define cputime_one_jiffy jiffies_to_cputime(1) | ||
23 | |||
24 | /* | ||
25 | * Convert cputime <-> jiffies (HZ) | ||
26 | */ | ||
27 | #define cputime_to_jiffies(__ct) \ | ||
28 | ((__force u64)(__ct) / (NSEC_PER_SEC / HZ)) | ||
29 | #define cputime_to_scaled(__ct) (__ct) | ||
30 | #define jiffies_to_cputime(__jif) \ | ||
31 | (__force cputime_t)((__jif) * (NSEC_PER_SEC / HZ)) | ||
32 | #define cputime64_to_jiffies64(__ct) \ | ||
33 | ((__force u64)(__ct) / (NSEC_PER_SEC / HZ)) | ||
34 | #define jiffies64_to_cputime64(__jif) \ | ||
35 | (__force cputime64_t)((__jif) * (NSEC_PER_SEC / HZ)) | ||
36 | |||
37 | |||
38 | /* | ||
39 | * Convert cputime <-> nanoseconds | ||
40 | */ | ||
41 | #define nsecs_to_cputime(__nsecs) ((__force u64)(__nsecs)) | ||
42 | |||
43 | |||
44 | /* | ||
45 | * Convert cputime <-> microseconds | ||
46 | */ | ||
47 | #define cputime_to_usecs(__ct) \ | ||
48 | ((__force u64)(__ct) / NSEC_PER_USEC) | ||
49 | #define usecs_to_cputime(__usecs) \ | ||
50 | (__force cputime_t)((__usecs) * NSEC_PER_USEC) | ||
51 | #define usecs_to_cputime64(__usecs) \ | ||
52 | (__force cputime64_t)((__usecs) * NSEC_PER_USEC) | ||
53 | |||
54 | /* | ||
55 | * Convert cputime <-> seconds | ||
56 | */ | ||
57 | #define cputime_to_secs(__ct) \ | ||
58 | ((__force u64)(__ct) / NSEC_PER_SEC) | ||
59 | #define secs_to_cputime(__secs) \ | ||
60 | (__force cputime_t)((__secs) * NSEC_PER_SEC) | ||
61 | |||
62 | /* | ||
63 | * Convert cputime <-> timespec (nsec) | ||
64 | */ | ||
65 | static inline cputime_t timespec_to_cputime(const struct timespec *val) | ||
66 | { | ||
67 | u64 ret = val->tv_sec * NSEC_PER_SEC + val->tv_nsec; | ||
68 | return (__force cputime_t) ret; | ||
69 | } | ||
70 | static inline void cputime_to_timespec(const cputime_t ct, struct timespec *val) | ||
71 | { | ||
72 | val->tv_sec = (__force u64) ct / NSEC_PER_SEC; | ||
73 | val->tv_nsec = (__force u64) ct % NSEC_PER_SEC; | ||
74 | } | ||
75 | |||
76 | /* | ||
77 | * Convert cputime <-> timeval (msec) | ||
78 | */ | ||
79 | static inline cputime_t timeval_to_cputime(struct timeval *val) | ||
80 | { | ||
81 | u64 ret = val->tv_sec * NSEC_PER_SEC + val->tv_usec * NSEC_PER_USEC; | ||
82 | return (__force cputime_t) ret; | ||
83 | } | ||
84 | static inline void cputime_to_timeval(const cputime_t ct, struct timeval *val) | ||
85 | { | ||
86 | val->tv_sec = (__force u64) ct / NSEC_PER_SEC; | ||
87 | val->tv_usec = ((__force u64) ct % NSEC_PER_SEC) / NSEC_PER_USEC; | ||
88 | } | ||
89 | |||
90 | /* | ||
91 | * Convert cputime <-> clock (USER_HZ) | ||
92 | */ | ||
93 | #define cputime_to_clock_t(__ct) \ | ||
94 | ((__force u64)(__ct) / (NSEC_PER_SEC / USER_HZ)) | ||
95 | #define clock_t_to_cputime(__x) \ | ||
96 | (__force cputime_t)((__x) * (NSEC_PER_SEC / USER_HZ)) | ||
97 | |||
98 | /* | ||
99 | * Convert cputime64 to clock. | ||
100 | */ | ||
101 | #define cputime64_to_clock_t(__ct) \ | ||
102 | cputime_to_clock_t((__force cputime_t)__ct) | ||
103 | |||
104 | #endif | ||
diff --git a/include/linux/aer.h b/include/linux/aer.h index 544abdb2238c..ec10e1b24c1c 100644 --- a/include/linux/aer.h +++ b/include/linux/aer.h | |||
@@ -49,8 +49,8 @@ static inline int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev) | |||
49 | } | 49 | } |
50 | #endif | 50 | #endif |
51 | 51 | ||
52 | extern void cper_print_aer(const char *prefix, int cper_severity, | 52 | extern void cper_print_aer(const char *prefix, struct pci_dev *dev, |
53 | struct aer_capability_regs *aer); | 53 | int cper_severity, struct aer_capability_regs *aer); |
54 | extern int cper_severity_to_aer(int cper_severity); | 54 | extern int cper_severity_to_aer(int cper_severity); |
55 | extern void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn, | 55 | extern void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn, |
56 | int severity); | 56 | int severity); |
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 8a7096fcb01e..66346521cb65 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h | |||
@@ -161,6 +161,15 @@ clockevents_calc_mult_shift(struct clock_event_device *ce, u32 freq, u32 minsec) | |||
161 | extern void clockevents_suspend(void); | 161 | extern void clockevents_suspend(void); |
162 | extern void clockevents_resume(void); | 162 | extern void clockevents_resume(void); |
163 | 163 | ||
164 | #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST | ||
165 | #ifdef CONFIG_ARCH_HAS_TICK_BROADCAST | ||
166 | extern void tick_broadcast(const struct cpumask *mask); | ||
167 | #else | ||
168 | #define tick_broadcast NULL | ||
169 | #endif | ||
170 | extern int tick_receive_broadcast(void); | ||
171 | #endif | ||
172 | |||
164 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | 173 | #ifdef CONFIG_GENERIC_CLOCKEVENTS |
165 | extern void clockevents_notify(unsigned long reason, void *arg); | 174 | extern void clockevents_notify(unsigned long reason, void *arg); |
166 | #else | 175 | #else |
diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h index e24339ccb7f0..b28d161c1091 100644 --- a/include/linux/context_tracking.h +++ b/include/linux/context_tracking.h | |||
@@ -3,12 +3,40 @@ | |||
3 | 3 | ||
4 | #ifdef CONFIG_CONTEXT_TRACKING | 4 | #ifdef CONFIG_CONTEXT_TRACKING |
5 | #include <linux/sched.h> | 5 | #include <linux/sched.h> |
6 | #include <linux/percpu.h> | ||
7 | |||
8 | struct context_tracking { | ||
9 | /* | ||
10 | * When active is false, probes are unset in order | ||
11 | * to minimize overhead: TIF flags are cleared | ||
12 | * and calls to user_enter/exit are ignored. This | ||
13 | * may be further optimized using static keys. | ||
14 | */ | ||
15 | bool active; | ||
16 | enum { | ||
17 | IN_KERNEL = 0, | ||
18 | IN_USER, | ||
19 | } state; | ||
20 | }; | ||
21 | |||
22 | DECLARE_PER_CPU(struct context_tracking, context_tracking); | ||
23 | |||
24 | static inline bool context_tracking_in_user(void) | ||
25 | { | ||
26 | return __this_cpu_read(context_tracking.state) == IN_USER; | ||
27 | } | ||
28 | |||
29 | static inline bool context_tracking_active(void) | ||
30 | { | ||
31 | return __this_cpu_read(context_tracking.active); | ||
32 | } | ||
6 | 33 | ||
7 | extern void user_enter(void); | 34 | extern void user_enter(void); |
8 | extern void user_exit(void); | 35 | extern void user_exit(void); |
9 | extern void context_tracking_task_switch(struct task_struct *prev, | 36 | extern void context_tracking_task_switch(struct task_struct *prev, |
10 | struct task_struct *next); | 37 | struct task_struct *next); |
11 | #else | 38 | #else |
39 | static inline bool context_tracking_in_user(void) { return false; } | ||
12 | static inline void user_enter(void) { } | 40 | static inline void user_enter(void) { } |
13 | static inline void user_exit(void) { } | 41 | static inline void user_exit(void) { } |
14 | static inline void context_tracking_task_switch(struct task_struct *prev, | 42 | static inline void context_tracking_task_switch(struct task_struct *prev, |
diff --git a/include/linux/efi.h b/include/linux/efi.h index 8b84916dc671..7a9498ab3c2d 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h | |||
@@ -618,18 +618,30 @@ extern int __init efi_setup_pcdp_console(char *); | |||
618 | #endif | 618 | #endif |
619 | 619 | ||
620 | /* | 620 | /* |
621 | * We play games with efi_enabled so that the compiler will, if possible, remove | 621 | * We play games with efi_enabled so that the compiler will, if |
622 | * EFI-related code altogether. | 622 | * possible, remove EFI-related code altogether. |
623 | */ | 623 | */ |
624 | #define EFI_BOOT 0 /* Were we booted from EFI? */ | ||
625 | #define EFI_SYSTEM_TABLES 1 /* Can we use EFI system tables? */ | ||
626 | #define EFI_CONFIG_TABLES 2 /* Can we use EFI config tables? */ | ||
627 | #define EFI_RUNTIME_SERVICES 3 /* Can we use runtime services? */ | ||
628 | #define EFI_MEMMAP 4 /* Can we use EFI memory map? */ | ||
629 | #define EFI_64BIT 5 /* Is the firmware 64-bit? */ | ||
630 | |||
624 | #ifdef CONFIG_EFI | 631 | #ifdef CONFIG_EFI |
625 | # ifdef CONFIG_X86 | 632 | # ifdef CONFIG_X86 |
626 | extern int efi_enabled; | 633 | extern int efi_enabled(int facility); |
627 | extern bool efi_64bit; | ||
628 | # else | 634 | # else |
629 | # define efi_enabled 1 | 635 | static inline int efi_enabled(int facility) |
636 | { | ||
637 | return 1; | ||
638 | } | ||
630 | # endif | 639 | # endif |
631 | #else | 640 | #else |
632 | # define efi_enabled 0 | 641 | static inline int efi_enabled(int facility) |
642 | { | ||
643 | return 0; | ||
644 | } | ||
633 | #endif | 645 | #endif |
634 | 646 | ||
635 | /* | 647 | /* |
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index 92691d85c320..e5ca8ef50e9b 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h | |||
@@ -74,7 +74,7 @@ typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip, | |||
74 | * SAVE_REGS - The ftrace_ops wants regs saved at each function called | 74 | * SAVE_REGS - The ftrace_ops wants regs saved at each function called |
75 | * and passed to the callback. If this flag is set, but the | 75 | * and passed to the callback. If this flag is set, but the |
76 | * architecture does not support passing regs | 76 | * architecture does not support passing regs |
77 | * (ARCH_SUPPORTS_FTRACE_SAVE_REGS is not defined), then the | 77 | * (CONFIG_DYNAMIC_FTRACE_WITH_REGS is not defined), then the |
78 | * ftrace_ops will fail to register, unless the next flag | 78 | * ftrace_ops will fail to register, unless the next flag |
79 | * is set. | 79 | * is set. |
80 | * SAVE_REGS_IF_SUPPORTED - This is the same as SAVE_REGS, but if the | 80 | * SAVE_REGS_IF_SUPPORTED - This is the same as SAVE_REGS, but if the |
@@ -418,7 +418,7 @@ void ftrace_modify_all_code(int command); | |||
418 | #endif | 418 | #endif |
419 | 419 | ||
420 | #ifndef FTRACE_REGS_ADDR | 420 | #ifndef FTRACE_REGS_ADDR |
421 | #ifdef ARCH_SUPPORTS_FTRACE_SAVE_REGS | 421 | #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS |
422 | # define FTRACE_REGS_ADDR ((unsigned long)ftrace_regs_caller) | 422 | # define FTRACE_REGS_ADDR ((unsigned long)ftrace_regs_caller) |
423 | #else | 423 | #else |
424 | # define FTRACE_REGS_ADDR FTRACE_ADDR | 424 | # define FTRACE_REGS_ADDR FTRACE_ADDR |
@@ -480,7 +480,7 @@ extern int ftrace_make_nop(struct module *mod, | |||
480 | */ | 480 | */ |
481 | extern int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr); | 481 | extern int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr); |
482 | 482 | ||
483 | #ifdef ARCH_SUPPORTS_FTRACE_SAVE_REGS | 483 | #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS |
484 | /** | 484 | /** |
485 | * ftrace_modify_call - convert from one addr to another (no nop) | 485 | * ftrace_modify_call - convert from one addr to another (no nop) |
486 | * @rec: the mcount call site record | 486 | * @rec: the mcount call site record |
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index a3d489531d83..13a54d0bdfa8 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
@@ -49,7 +49,6 @@ struct trace_entry { | |||
49 | unsigned char flags; | 49 | unsigned char flags; |
50 | unsigned char preempt_count; | 50 | unsigned char preempt_count; |
51 | int pid; | 51 | int pid; |
52 | int padding; | ||
53 | }; | 52 | }; |
54 | 53 | ||
55 | #define FTRACE_MAX_EVENT \ | 54 | #define FTRACE_MAX_EVENT \ |
@@ -84,6 +83,9 @@ struct trace_iterator { | |||
84 | long idx; | 83 | long idx; |
85 | 84 | ||
86 | cpumask_var_t started; | 85 | cpumask_var_t started; |
86 | |||
87 | /* it's true when current open file is snapshot */ | ||
88 | bool snapshot; | ||
87 | }; | 89 | }; |
88 | 90 | ||
89 | enum trace_iter_flags { | 91 | enum trace_iter_flags { |
@@ -272,7 +274,7 @@ extern int trace_define_field(struct ftrace_event_call *call, const char *type, | |||
272 | extern int trace_add_event_call(struct ftrace_event_call *call); | 274 | extern int trace_add_event_call(struct ftrace_event_call *call); |
273 | extern void trace_remove_event_call(struct ftrace_event_call *call); | 275 | extern void trace_remove_event_call(struct ftrace_event_call *call); |
274 | 276 | ||
275 | #define is_signed_type(type) (((type)(-1)) < 0) | 277 | #define is_signed_type(type) (((type)(-1)) < (type)0) |
276 | 278 | ||
277 | int trace_set_clr_event(const char *system, const char *event, int set); | 279 | int trace_set_clr_event(const char *system, const char *event, int set); |
278 | 280 | ||
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 624ef3f45c8e..29eb805ea4a6 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
@@ -153,7 +153,7 @@ extern void rcu_nmi_exit(void); | |||
153 | */ | 153 | */ |
154 | #define __irq_enter() \ | 154 | #define __irq_enter() \ |
155 | do { \ | 155 | do { \ |
156 | vtime_account_irq_enter(current); \ | 156 | account_irq_enter_time(current); \ |
157 | add_preempt_count(HARDIRQ_OFFSET); \ | 157 | add_preempt_count(HARDIRQ_OFFSET); \ |
158 | trace_hardirq_enter(); \ | 158 | trace_hardirq_enter(); \ |
159 | } while (0) | 159 | } while (0) |
@@ -169,7 +169,7 @@ extern void irq_enter(void); | |||
169 | #define __irq_exit() \ | 169 | #define __irq_exit() \ |
170 | do { \ | 170 | do { \ |
171 | trace_hardirq_exit(); \ | 171 | trace_hardirq_exit(); \ |
172 | vtime_account_irq_exit(current); \ | 172 | account_irq_exit_time(current); \ |
173 | sub_preempt_count(HARDIRQ_OFFSET); \ | 173 | sub_preempt_count(HARDIRQ_OFFSET); \ |
174 | } while (0) | 174 | } while (0) |
175 | 175 | ||
@@ -180,10 +180,10 @@ extern void irq_exit(void); | |||
180 | 180 | ||
181 | #define nmi_enter() \ | 181 | #define nmi_enter() \ |
182 | do { \ | 182 | do { \ |
183 | lockdep_off(); \ | ||
183 | ftrace_nmi_enter(); \ | 184 | ftrace_nmi_enter(); \ |
184 | BUG_ON(in_nmi()); \ | 185 | BUG_ON(in_nmi()); \ |
185 | add_preempt_count(NMI_OFFSET + HARDIRQ_OFFSET); \ | 186 | add_preempt_count(NMI_OFFSET + HARDIRQ_OFFSET); \ |
186 | lockdep_off(); \ | ||
187 | rcu_nmi_enter(); \ | 187 | rcu_nmi_enter(); \ |
188 | trace_hardirq_enter(); \ | 188 | trace_hardirq_enter(); \ |
189 | } while (0) | 189 | } while (0) |
@@ -192,10 +192,10 @@ extern void irq_exit(void); | |||
192 | do { \ | 192 | do { \ |
193 | trace_hardirq_exit(); \ | 193 | trace_hardirq_exit(); \ |
194 | rcu_nmi_exit(); \ | 194 | rcu_nmi_exit(); \ |
195 | lockdep_on(); \ | ||
196 | BUG_ON(!in_nmi()); \ | 195 | BUG_ON(!in_nmi()); \ |
197 | sub_preempt_count(NMI_OFFSET + HARDIRQ_OFFSET); \ | 196 | sub_preempt_count(NMI_OFFSET + HARDIRQ_OFFSET); \ |
198 | ftrace_nmi_exit(); \ | 197 | ftrace_nmi_exit(); \ |
198 | lockdep_on(); \ | ||
199 | } while (0) | 199 | } while (0) |
200 | 200 | ||
201 | #endif /* LINUX_HARDIRQ_H */ | 201 | #endif /* LINUX_HARDIRQ_H */ |
diff --git a/include/linux/init_task.h b/include/linux/init_task.h index 6d087c5f57f7..5cd0f0949927 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h | |||
@@ -10,7 +10,9 @@ | |||
10 | #include <linux/pid_namespace.h> | 10 | #include <linux/pid_namespace.h> |
11 | #include <linux/user_namespace.h> | 11 | #include <linux/user_namespace.h> |
12 | #include <linux/securebits.h> | 12 | #include <linux/securebits.h> |
13 | #include <linux/seqlock.h> | ||
13 | #include <net/net_namespace.h> | 14 | #include <net/net_namespace.h> |
15 | #include <linux/sched/rt.h> | ||
14 | 16 | ||
15 | #ifdef CONFIG_SMP | 17 | #ifdef CONFIG_SMP |
16 | # define INIT_PUSHABLE_TASKS(tsk) \ | 18 | # define INIT_PUSHABLE_TASKS(tsk) \ |
@@ -141,6 +143,15 @@ extern struct task_group root_task_group; | |||
141 | # define INIT_PERF_EVENTS(tsk) | 143 | # define INIT_PERF_EVENTS(tsk) |
142 | #endif | 144 | #endif |
143 | 145 | ||
146 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN | ||
147 | # define INIT_VTIME(tsk) \ | ||
148 | .vtime_seqlock = __SEQLOCK_UNLOCKED(tsk.vtime_seqlock), \ | ||
149 | .vtime_snap = 0, \ | ||
150 | .vtime_snap_whence = VTIME_SYS, | ||
151 | #else | ||
152 | # define INIT_VTIME(tsk) | ||
153 | #endif | ||
154 | |||
144 | #define INIT_TASK_COMM "swapper" | 155 | #define INIT_TASK_COMM "swapper" |
145 | 156 | ||
146 | /* | 157 | /* |
@@ -210,6 +221,7 @@ extern struct task_group root_task_group; | |||
210 | INIT_TRACE_RECURSION \ | 221 | INIT_TRACE_RECURSION \ |
211 | INIT_TASK_RCU_PREEMPT(tsk) \ | 222 | INIT_TASK_RCU_PREEMPT(tsk) \ |
212 | INIT_CPUSET_SEQ \ | 223 | INIT_CPUSET_SEQ \ |
224 | INIT_VTIME(tsk) \ | ||
213 | } | 225 | } |
214 | 226 | ||
215 | 227 | ||
diff --git a/include/linux/irq.h b/include/linux/irq.h index fdf2c4a238cc..bc4e06611958 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
@@ -509,8 +509,11 @@ static inline void irq_set_percpu_devid_flags(unsigned int irq) | |||
509 | 509 | ||
510 | /* Handle dynamic irq creation and destruction */ | 510 | /* Handle dynamic irq creation and destruction */ |
511 | extern unsigned int create_irq_nr(unsigned int irq_want, int node); | 511 | extern unsigned int create_irq_nr(unsigned int irq_want, int node); |
512 | extern unsigned int __create_irqs(unsigned int from, unsigned int count, | ||
513 | int node); | ||
512 | extern int create_irq(void); | 514 | extern int create_irq(void); |
513 | extern void destroy_irq(unsigned int irq); | 515 | extern void destroy_irq(unsigned int irq); |
516 | extern void destroy_irqs(unsigned int irq, unsigned int count); | ||
514 | 517 | ||
515 | /* | 518 | /* |
516 | * Dynamic irq helper functions. Obsolete. Use irq_alloc_desc* and | 519 | * Dynamic irq helper functions. Obsolete. Use irq_alloc_desc* and |
@@ -528,6 +531,8 @@ extern int irq_set_handler_data(unsigned int irq, void *data); | |||
528 | extern int irq_set_chip_data(unsigned int irq, void *data); | 531 | extern int irq_set_chip_data(unsigned int irq, void *data); |
529 | extern int irq_set_irq_type(unsigned int irq, unsigned int type); | 532 | extern int irq_set_irq_type(unsigned int irq, unsigned int type); |
530 | extern int irq_set_msi_desc(unsigned int irq, struct msi_desc *entry); | 533 | extern int irq_set_msi_desc(unsigned int irq, struct msi_desc *entry); |
534 | extern int irq_set_msi_desc_off(unsigned int irq_base, unsigned int irq_offset, | ||
535 | struct msi_desc *entry); | ||
531 | extern struct irq_data *irq_get_irq_data(unsigned int irq); | 536 | extern struct irq_data *irq_get_irq_data(unsigned int irq); |
532 | 537 | ||
533 | static inline struct irq_chip *irq_get_chip(unsigned int irq) | 538 | static inline struct irq_chip *irq_get_chip(unsigned int irq) |
@@ -590,6 +595,9 @@ int __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node, | |||
590 | #define irq_alloc_desc_from(from, node) \ | 595 | #define irq_alloc_desc_from(from, node) \ |
591 | irq_alloc_descs(-1, from, 1, node) | 596 | irq_alloc_descs(-1, from, 1, node) |
592 | 597 | ||
598 | #define irq_alloc_descs_from(from, cnt, node) \ | ||
599 | irq_alloc_descs(-1, from, cnt, node) | ||
600 | |||
593 | void irq_free_descs(unsigned int irq, unsigned int cnt); | 601 | void irq_free_descs(unsigned int irq, unsigned int cnt); |
594 | int irq_reserve_irqs(unsigned int from, unsigned int cnt); | 602 | int irq_reserve_irqs(unsigned int from, unsigned int cnt); |
595 | 603 | ||
diff --git a/include/linux/irq_work.h b/include/linux/irq_work.h index 6a9e8f5399e2..f5dbce50466e 100644 --- a/include/linux/irq_work.h +++ b/include/linux/irq_work.h | |||
@@ -3,6 +3,20 @@ | |||
3 | 3 | ||
4 | #include <linux/llist.h> | 4 | #include <linux/llist.h> |
5 | 5 | ||
6 | /* | ||
7 | * An entry can be in one of four states: | ||
8 | * | ||
9 | * free NULL, 0 -> {claimed} : free to be used | ||
10 | * claimed NULL, 3 -> {pending} : claimed to be enqueued | ||
11 | * pending next, 3 -> {busy} : queued, pending callback | ||
12 | * busy NULL, 2 -> {free, claimed} : callback in progress, can be claimed | ||
13 | */ | ||
14 | |||
15 | #define IRQ_WORK_PENDING 1UL | ||
16 | #define IRQ_WORK_BUSY 2UL | ||
17 | #define IRQ_WORK_FLAGS 3UL | ||
18 | #define IRQ_WORK_LAZY 4UL /* Doesn't want IPI, wait for tick */ | ||
19 | |||
6 | struct irq_work { | 20 | struct irq_work { |
7 | unsigned long flags; | 21 | unsigned long flags; |
8 | struct llist_node llnode; | 22 | struct llist_node llnode; |
@@ -16,8 +30,14 @@ void init_irq_work(struct irq_work *work, void (*func)(struct irq_work *)) | |||
16 | work->func = func; | 30 | work->func = func; |
17 | } | 31 | } |
18 | 32 | ||
19 | bool irq_work_queue(struct irq_work *work); | 33 | void irq_work_queue(struct irq_work *work); |
20 | void irq_work_run(void); | 34 | void irq_work_run(void); |
21 | void irq_work_sync(struct irq_work *work); | 35 | void irq_work_sync(struct irq_work *work); |
22 | 36 | ||
37 | #ifdef CONFIG_IRQ_WORK | ||
38 | bool irq_work_needs_cpu(void); | ||
39 | #else | ||
40 | static bool irq_work_needs_cpu(void) { return false; } | ||
41 | #endif | ||
42 | |||
23 | #endif /* _LINUX_IRQ_WORK_H */ | 43 | #endif /* _LINUX_IRQ_WORK_H */ |
diff --git a/include/linux/kernel_stat.h b/include/linux/kernel_stat.h index 66b70780e910..ed5f6ed6eb77 100644 --- a/include/linux/kernel_stat.h +++ b/include/linux/kernel_stat.h | |||
@@ -127,7 +127,7 @@ extern void account_system_time(struct task_struct *, int, cputime_t, cputime_t) | |||
127 | extern void account_steal_time(cputime_t); | 127 | extern void account_steal_time(cputime_t); |
128 | extern void account_idle_time(cputime_t); | 128 | extern void account_idle_time(cputime_t); |
129 | 129 | ||
130 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | 130 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE |
131 | static inline void account_process_tick(struct task_struct *tsk, int user) | 131 | static inline void account_process_tick(struct task_struct *tsk, int user) |
132 | { | 132 | { |
133 | vtime_account_user(tsk); | 133 | vtime_account_user(tsk); |
diff --git a/include/linux/kprobes.h b/include/linux/kprobes.h index 23755ba42abc..4b6ef4d33cc2 100644 --- a/include/linux/kprobes.h +++ b/include/linux/kprobes.h | |||
@@ -49,16 +49,6 @@ | |||
49 | #define KPROBE_REENTER 0x00000004 | 49 | #define KPROBE_REENTER 0x00000004 |
50 | #define KPROBE_HIT_SSDONE 0x00000008 | 50 | #define KPROBE_HIT_SSDONE 0x00000008 |
51 | 51 | ||
52 | /* | ||
53 | * If function tracer is enabled and the arch supports full | ||
54 | * passing of pt_regs to function tracing, then kprobes can | ||
55 | * optimize on top of function tracing. | ||
56 | */ | ||
57 | #if defined(CONFIG_FUNCTION_TRACER) && defined(ARCH_SUPPORTS_FTRACE_SAVE_REGS) \ | ||
58 | && defined(ARCH_SUPPORTS_KPROBES_ON_FTRACE) | ||
59 | # define KPROBES_CAN_USE_FTRACE | ||
60 | #endif | ||
61 | |||
62 | /* Attach to insert probes on any functions which should be ignored*/ | 52 | /* Attach to insert probes on any functions which should be ignored*/ |
63 | #define __kprobes __attribute__((__section__(".kprobes.text"))) | 53 | #define __kprobes __attribute__((__section__(".kprobes.text"))) |
64 | 54 | ||
@@ -316,7 +306,7 @@ extern int proc_kprobes_optimization_handler(struct ctl_table *table, | |||
316 | #endif | 306 | #endif |
317 | 307 | ||
318 | #endif /* CONFIG_OPTPROBES */ | 308 | #endif /* CONFIG_OPTPROBES */ |
319 | #ifdef KPROBES_CAN_USE_FTRACE | 309 | #ifdef CONFIG_KPROBES_ON_FTRACE |
320 | extern void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip, | 310 | extern void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip, |
321 | struct ftrace_ops *ops, struct pt_regs *regs); | 311 | struct ftrace_ops *ops, struct pt_regs *regs); |
322 | extern int arch_prepare_kprobe_ftrace(struct kprobe *p); | 312 | extern int arch_prepare_kprobe_ftrace(struct kprobe *p); |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 2c497ab0d03d..b7996a768eb2 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/rcupdate.h> | 22 | #include <linux/rcupdate.h> |
23 | #include <linux/ratelimit.h> | 23 | #include <linux/ratelimit.h> |
24 | #include <linux/err.h> | 24 | #include <linux/err.h> |
25 | #include <linux/irqflags.h> | ||
25 | #include <asm/signal.h> | 26 | #include <asm/signal.h> |
26 | 27 | ||
27 | #include <linux/kvm.h> | 28 | #include <linux/kvm.h> |
@@ -740,15 +741,52 @@ static inline int kvm_deassign_device(struct kvm *kvm, | |||
740 | } | 741 | } |
741 | #endif /* CONFIG_IOMMU_API */ | 742 | #endif /* CONFIG_IOMMU_API */ |
742 | 743 | ||
743 | static inline void kvm_guest_enter(void) | 744 | static inline void __guest_enter(void) |
744 | { | 745 | { |
745 | BUG_ON(preemptible()); | ||
746 | /* | 746 | /* |
747 | * This is running in ioctl context so we can avoid | 747 | * This is running in ioctl context so we can avoid |
748 | * the call to vtime_account() with its unnecessary idle check. | 748 | * the call to vtime_account() with its unnecessary idle check. |
749 | */ | 749 | */ |
750 | vtime_account_system_irqsafe(current); | 750 | vtime_account_system(current); |
751 | current->flags |= PF_VCPU; | 751 | current->flags |= PF_VCPU; |
752 | } | ||
753 | |||
754 | static inline void __guest_exit(void) | ||
755 | { | ||
756 | /* | ||
757 | * This is running in ioctl context so we can avoid | ||
758 | * the call to vtime_account() with its unnecessary idle check. | ||
759 | */ | ||
760 | vtime_account_system(current); | ||
761 | current->flags &= ~PF_VCPU; | ||
762 | } | ||
763 | |||
764 | #ifdef CONFIG_CONTEXT_TRACKING | ||
765 | extern void guest_enter(void); | ||
766 | extern void guest_exit(void); | ||
767 | |||
768 | #else /* !CONFIG_CONTEXT_TRACKING */ | ||
769 | static inline void guest_enter(void) | ||
770 | { | ||
771 | __guest_enter(); | ||
772 | } | ||
773 | |||
774 | static inline void guest_exit(void) | ||
775 | { | ||
776 | __guest_exit(); | ||
777 | } | ||
778 | #endif /* !CONFIG_CONTEXT_TRACKING */ | ||
779 | |||
780 | static inline void kvm_guest_enter(void) | ||
781 | { | ||
782 | unsigned long flags; | ||
783 | |||
784 | BUG_ON(preemptible()); | ||
785 | |||
786 | local_irq_save(flags); | ||
787 | guest_enter(); | ||
788 | local_irq_restore(flags); | ||
789 | |||
752 | /* KVM does not hold any references to rcu protected data when it | 790 | /* KVM does not hold any references to rcu protected data when it |
753 | * switches CPU into a guest mode. In fact switching to a guest mode | 791 | * switches CPU into a guest mode. In fact switching to a guest mode |
754 | * is very similar to exiting to userspase from rcu point of view. In | 792 | * is very similar to exiting to userspase from rcu point of view. In |
@@ -761,12 +799,11 @@ static inline void kvm_guest_enter(void) | |||
761 | 799 | ||
762 | static inline void kvm_guest_exit(void) | 800 | static inline void kvm_guest_exit(void) |
763 | { | 801 | { |
764 | /* | 802 | unsigned long flags; |
765 | * This is running in ioctl context so we can avoid | 803 | |
766 | * the call to vtime_account() with its unnecessary idle check. | 804 | local_irq_save(flags); |
767 | */ | 805 | guest_exit(); |
768 | vtime_account_system_irqsafe(current); | 806 | local_irq_restore(flags); |
769 | current->flags &= ~PF_VCPU; | ||
770 | } | 807 | } |
771 | 808 | ||
772 | /* | 809 | /* |
diff --git a/include/linux/llist.h b/include/linux/llist.h index a5199f6d0e82..d0ab98f73d38 100644 --- a/include/linux/llist.h +++ b/include/linux/llist.h | |||
@@ -125,6 +125,31 @@ static inline void init_llist_head(struct llist_head *list) | |||
125 | (pos) = llist_entry((pos)->member.next, typeof(*(pos)), member)) | 125 | (pos) = llist_entry((pos)->member.next, typeof(*(pos)), member)) |
126 | 126 | ||
127 | /** | 127 | /** |
128 | * llist_for_each_entry_safe - iterate safely against remove over some entries | ||
129 | * of lock-less list of given type. | ||
130 | * @pos: the type * to use as a loop cursor. | ||
131 | * @n: another type * to use as a temporary storage. | ||
132 | * @node: the fist entry of deleted list entries. | ||
133 | * @member: the name of the llist_node with the struct. | ||
134 | * | ||
135 | * In general, some entries of the lock-less list can be traversed | ||
136 | * safely only after being removed from list, so start with an entry | ||
137 | * instead of list head. This variant allows removal of entries | ||
138 | * as we iterate. | ||
139 | * | ||
140 | * If being used on entries deleted from lock-less list directly, the | ||
141 | * traverse order is from the newest to the oldest added entry. If | ||
142 | * you want to traverse from the oldest to the newest, you must | ||
143 | * reverse the order by yourself before traversing. | ||
144 | */ | ||
145 | #define llist_for_each_entry_safe(pos, n, node, member) \ | ||
146 | for ((pos) = llist_entry((node), typeof(*(pos)), member), \ | ||
147 | (n) = (pos)->member.next; \ | ||
148 | &(pos)->member != NULL; \ | ||
149 | (pos) = llist_entry(n, typeof(*(pos)), member), \ | ||
150 | (n) = (&(pos)->member != NULL) ? (pos)->member.next : NULL) | ||
151 | |||
152 | /** | ||
128 | * llist_empty - tests whether a lock-less list is empty | 153 | * llist_empty - tests whether a lock-less list is empty |
129 | * @head: the list to test | 154 | * @head: the list to test |
130 | * | 155 | * |
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 0108a56f814e..28bd5fa2ff2e 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
@@ -429,7 +429,7 @@ extern int memcg_limited_groups_array_size; | |||
429 | * the slab_mutex must be held when looping through those caches | 429 | * the slab_mutex must be held when looping through those caches |
430 | */ | 430 | */ |
431 | #define for_each_memcg_cache_index(_idx) \ | 431 | #define for_each_memcg_cache_index(_idx) \ |
432 | for ((_idx) = 0; i < memcg_limited_groups_array_size; (_idx)++) | 432 | for ((_idx) = 0; (_idx) < memcg_limited_groups_array_size; (_idx)++) |
433 | 433 | ||
434 | static inline bool memcg_kmem_enabled(void) | 434 | static inline bool memcg_kmem_enabled(void) |
435 | { | 435 | { |
diff --git a/include/linux/mfd/abx500.h b/include/linux/mfd/abx500.h index 2138bd33021a..e53dcfeaee69 100644 --- a/include/linux/mfd/abx500.h +++ b/include/linux/mfd/abx500.h | |||
@@ -272,8 +272,6 @@ struct abx500_bm_data { | |||
272 | const struct abx500_fg_parameters *fg_params; | 272 | const struct abx500_fg_parameters *fg_params; |
273 | }; | 273 | }; |
274 | 274 | ||
275 | extern struct abx500_bm_data ab8500_bm_data; | ||
276 | |||
277 | enum { | 275 | enum { |
278 | NTC_EXTERNAL = 0, | 276 | NTC_EXTERNAL = 0, |
279 | NTC_INTERNAL, | 277 | NTC_INTERNAL, |
diff --git a/include/linux/mfd/abx500/ab8500-bm.h b/include/linux/mfd/abx500/ab8500-bm.h index 44310c98ee6e..9bd037df97d9 100644 --- a/include/linux/mfd/abx500/ab8500-bm.h +++ b/include/linux/mfd/abx500/ab8500-bm.h | |||
@@ -422,7 +422,10 @@ struct ab8500_chargalg_platform_data { | |||
422 | struct ab8500_btemp; | 422 | struct ab8500_btemp; |
423 | struct ab8500_gpadc; | 423 | struct ab8500_gpadc; |
424 | struct ab8500_fg; | 424 | struct ab8500_fg; |
425 | |||
425 | #ifdef CONFIG_AB8500_BM | 426 | #ifdef CONFIG_AB8500_BM |
427 | extern struct abx500_bm_data ab8500_bm_data; | ||
428 | |||
426 | void ab8500_fg_reinit(void); | 429 | void ab8500_fg_reinit(void); |
427 | void ab8500_charger_usb_state_changed(u8 bm_usb_state, u16 mA); | 430 | void ab8500_charger_usb_state_changed(u8 bm_usb_state, u16 mA); |
428 | struct ab8500_btemp *ab8500_btemp_get(void); | 431 | struct ab8500_btemp *ab8500_btemp_get(void); |
@@ -434,31 +437,7 @@ int ab8500_fg_inst_curr_finalize(struct ab8500_fg *di, int *res); | |||
434 | int ab8500_fg_inst_curr_done(struct ab8500_fg *di); | 437 | int ab8500_fg_inst_curr_done(struct ab8500_fg *di); |
435 | 438 | ||
436 | #else | 439 | #else |
437 | int ab8500_fg_inst_curr_done(struct ab8500_fg *di) | 440 | static struct abx500_bm_data ab8500_bm_data; |
438 | { | ||
439 | } | ||
440 | static void ab8500_fg_reinit(void) | ||
441 | { | ||
442 | } | ||
443 | static void ab8500_charger_usb_state_changed(u8 bm_usb_state, u16 mA) | ||
444 | { | ||
445 | } | ||
446 | static struct ab8500_btemp *ab8500_btemp_get(void) | ||
447 | { | ||
448 | return NULL; | ||
449 | } | ||
450 | static int ab8500_btemp_get_batctrl_temp(struct ab8500_btemp *btemp) | ||
451 | { | ||
452 | return 0; | ||
453 | } | ||
454 | struct ab8500_fg *ab8500_fg_get(void) | ||
455 | { | ||
456 | return NULL; | ||
457 | } | ||
458 | static int ab8500_fg_inst_curr_blocking(struct ab8500_fg *dev) | ||
459 | { | ||
460 | return -ENODEV; | ||
461 | } | ||
462 | 441 | ||
463 | static inline int ab8500_fg_inst_curr_start(struct ab8500_fg *di) | 442 | static inline int ab8500_fg_inst_curr_start(struct ab8500_fg *di) |
464 | { | 443 | { |
diff --git a/include/linux/mfd/da9052/da9052.h b/include/linux/mfd/da9052/da9052.h index 86dd93de6ff2..786d02eb79d2 100644 --- a/include/linux/mfd/da9052/da9052.h +++ b/include/linux/mfd/da9052/da9052.h | |||
@@ -99,6 +99,9 @@ struct da9052 { | |||
99 | u8 chip_id; | 99 | u8 chip_id; |
100 | 100 | ||
101 | int chip_irq; | 101 | int chip_irq; |
102 | |||
103 | /* SOC I/O transfer related fixes for DA9052/53 */ | ||
104 | int (*fix_io) (struct da9052 *da9052, unsigned char reg); | ||
102 | }; | 105 | }; |
103 | 106 | ||
104 | /* ADC API */ | 107 | /* ADC API */ |
@@ -113,32 +116,87 @@ static inline int da9052_reg_read(struct da9052 *da9052, unsigned char reg) | |||
113 | ret = regmap_read(da9052->regmap, reg, &val); | 116 | ret = regmap_read(da9052->regmap, reg, &val); |
114 | if (ret < 0) | 117 | if (ret < 0) |
115 | return ret; | 118 | return ret; |
119 | |||
120 | if (da9052->fix_io) { | ||
121 | ret = da9052->fix_io(da9052, reg); | ||
122 | if (ret < 0) | ||
123 | return ret; | ||
124 | } | ||
125 | |||
116 | return val; | 126 | return val; |
117 | } | 127 | } |
118 | 128 | ||
119 | static inline int da9052_reg_write(struct da9052 *da9052, unsigned char reg, | 129 | static inline int da9052_reg_write(struct da9052 *da9052, unsigned char reg, |
120 | unsigned char val) | 130 | unsigned char val) |
121 | { | 131 | { |
122 | return regmap_write(da9052->regmap, reg, val); | 132 | int ret; |
133 | |||
134 | ret = regmap_write(da9052->regmap, reg, val); | ||
135 | if (ret < 0) | ||
136 | return ret; | ||
137 | |||
138 | if (da9052->fix_io) { | ||
139 | ret = da9052->fix_io(da9052, reg); | ||
140 | if (ret < 0) | ||
141 | return ret; | ||
142 | } | ||
143 | |||
144 | return ret; | ||
123 | } | 145 | } |
124 | 146 | ||
125 | static inline int da9052_group_read(struct da9052 *da9052, unsigned char reg, | 147 | static inline int da9052_group_read(struct da9052 *da9052, unsigned char reg, |
126 | unsigned reg_cnt, unsigned char *val) | 148 | unsigned reg_cnt, unsigned char *val) |
127 | { | 149 | { |
128 | return regmap_bulk_read(da9052->regmap, reg, val, reg_cnt); | 150 | int ret; |
151 | |||
152 | ret = regmap_bulk_read(da9052->regmap, reg, val, reg_cnt); | ||
153 | if (ret < 0) | ||
154 | return ret; | ||
155 | |||
156 | if (da9052->fix_io) { | ||
157 | ret = da9052->fix_io(da9052, reg); | ||
158 | if (ret < 0) | ||
159 | return ret; | ||
160 | } | ||
161 | |||
162 | return ret; | ||
129 | } | 163 | } |
130 | 164 | ||
131 | static inline int da9052_group_write(struct da9052 *da9052, unsigned char reg, | 165 | static inline int da9052_group_write(struct da9052 *da9052, unsigned char reg, |
132 | unsigned reg_cnt, unsigned char *val) | 166 | unsigned reg_cnt, unsigned char *val) |
133 | { | 167 | { |
134 | return regmap_raw_write(da9052->regmap, reg, val, reg_cnt); | 168 | int ret; |
169 | |||
170 | ret = regmap_raw_write(da9052->regmap, reg, val, reg_cnt); | ||
171 | if (ret < 0) | ||
172 | return ret; | ||
173 | |||
174 | if (da9052->fix_io) { | ||
175 | ret = da9052->fix_io(da9052, reg); | ||
176 | if (ret < 0) | ||
177 | return ret; | ||
178 | } | ||
179 | |||
180 | return ret; | ||
135 | } | 181 | } |
136 | 182 | ||
137 | static inline int da9052_reg_update(struct da9052 *da9052, unsigned char reg, | 183 | static inline int da9052_reg_update(struct da9052 *da9052, unsigned char reg, |
138 | unsigned char bit_mask, | 184 | unsigned char bit_mask, |
139 | unsigned char reg_val) | 185 | unsigned char reg_val) |
140 | { | 186 | { |
141 | return regmap_update_bits(da9052->regmap, reg, bit_mask, reg_val); | 187 | int ret; |
188 | |||
189 | ret = regmap_update_bits(da9052->regmap, reg, bit_mask, reg_val); | ||
190 | if (ret < 0) | ||
191 | return ret; | ||
192 | |||
193 | if (da9052->fix_io) { | ||
194 | ret = da9052->fix_io(da9052, reg); | ||
195 | if (ret < 0) | ||
196 | return ret; | ||
197 | } | ||
198 | |||
199 | return ret; | ||
142 | } | 200 | } |
143 | 201 | ||
144 | int da9052_device_init(struct da9052 *da9052, u8 chip_id); | 202 | int da9052_device_init(struct da9052 *da9052, u8 chip_id); |
diff --git a/include/linux/mfd/da9052/reg.h b/include/linux/mfd/da9052/reg.h index b97f7309d7f6..c4dd3a8add21 100644 --- a/include/linux/mfd/da9052/reg.h +++ b/include/linux/mfd/da9052/reg.h | |||
@@ -34,6 +34,9 @@ | |||
34 | #define DA9052_STATUS_C_REG 3 | 34 | #define DA9052_STATUS_C_REG 3 |
35 | #define DA9052_STATUS_D_REG 4 | 35 | #define DA9052_STATUS_D_REG 4 |
36 | 36 | ||
37 | /* PARK REGISTER */ | ||
38 | #define DA9052_PARK_REGISTER DA9052_STATUS_D_REG | ||
39 | |||
37 | /* EVENT REGISTERS */ | 40 | /* EVENT REGISTERS */ |
38 | #define DA9052_EVENT_A_REG 5 | 41 | #define DA9052_EVENT_A_REG 5 |
39 | #define DA9052_EVENT_B_REG 6 | 42 | #define DA9052_EVENT_B_REG 6 |
diff --git a/include/linux/mfd/rtsx_common.h b/include/linux/mfd/rtsx_common.h index a8d393e3066b..2b13970596f5 100644 --- a/include/linux/mfd/rtsx_common.h +++ b/include/linux/mfd/rtsx_common.h | |||
@@ -38,6 +38,9 @@ | |||
38 | #define RTSX_SD_CARD 0 | 38 | #define RTSX_SD_CARD 0 |
39 | #define RTSX_MS_CARD 1 | 39 | #define RTSX_MS_CARD 1 |
40 | 40 | ||
41 | #define CLK_TO_DIV_N 0 | ||
42 | #define DIV_N_TO_CLK 1 | ||
43 | |||
41 | struct platform_device; | 44 | struct platform_device; |
42 | 45 | ||
43 | struct rtsx_slot { | 46 | struct rtsx_slot { |
diff --git a/include/linux/mfd/rtsx_pci.h b/include/linux/mfd/rtsx_pci.h index 060b721fcbfb..4b117a3f54d4 100644 --- a/include/linux/mfd/rtsx_pci.h +++ b/include/linux/mfd/rtsx_pci.h | |||
@@ -158,10 +158,9 @@ | |||
158 | #define SG_TRANS_DATA (0x02 << 4) | 158 | #define SG_TRANS_DATA (0x02 << 4) |
159 | #define SG_LINK_DESC (0x03 << 4) | 159 | #define SG_LINK_DESC (0x03 << 4) |
160 | 160 | ||
161 | /* SD bank voltage */ | 161 | /* Output voltage */ |
162 | #define SD_IO_3V3 0 | 162 | #define OUTPUT_3V3 0 |
163 | #define SD_IO_1V8 1 | 163 | #define OUTPUT_1V8 1 |
164 | |||
165 | 164 | ||
166 | /* Card Clock Enable Register */ | 165 | /* Card Clock Enable Register */ |
167 | #define SD_CLK_EN 0x04 | 166 | #define SD_CLK_EN 0x04 |
@@ -201,6 +200,20 @@ | |||
201 | #define CHANGE_CLK 0x01 | 200 | #define CHANGE_CLK 0x01 |
202 | 201 | ||
203 | /* LDO_CTL */ | 202 | /* LDO_CTL */ |
203 | #define BPP_ASIC_1V7 0x00 | ||
204 | #define BPP_ASIC_1V8 0x01 | ||
205 | #define BPP_ASIC_1V9 0x02 | ||
206 | #define BPP_ASIC_2V0 0x03 | ||
207 | #define BPP_ASIC_2V7 0x04 | ||
208 | #define BPP_ASIC_2V8 0x05 | ||
209 | #define BPP_ASIC_3V2 0x06 | ||
210 | #define BPP_ASIC_3V3 0x07 | ||
211 | #define BPP_REG_TUNED18 0x07 | ||
212 | #define BPP_TUNED18_SHIFT_8402 5 | ||
213 | #define BPP_TUNED18_SHIFT_8411 4 | ||
214 | #define BPP_PAD_MASK 0x04 | ||
215 | #define BPP_PAD_3V3 0x04 | ||
216 | #define BPP_PAD_1V8 0x00 | ||
204 | #define BPP_LDO_POWB 0x03 | 217 | #define BPP_LDO_POWB 0x03 |
205 | #define BPP_LDO_ON 0x00 | 218 | #define BPP_LDO_ON 0x00 |
206 | #define BPP_LDO_SUSPEND 0x02 | 219 | #define BPP_LDO_SUSPEND 0x02 |
@@ -688,7 +701,10 @@ struct pcr_ops { | |||
688 | int (*disable_auto_blink)(struct rtsx_pcr *pcr); | 701 | int (*disable_auto_blink)(struct rtsx_pcr *pcr); |
689 | int (*card_power_on)(struct rtsx_pcr *pcr, int card); | 702 | int (*card_power_on)(struct rtsx_pcr *pcr, int card); |
690 | int (*card_power_off)(struct rtsx_pcr *pcr, int card); | 703 | int (*card_power_off)(struct rtsx_pcr *pcr, int card); |
704 | int (*switch_output_voltage)(struct rtsx_pcr *pcr, | ||
705 | u8 voltage); | ||
691 | unsigned int (*cd_deglitch)(struct rtsx_pcr *pcr); | 706 | unsigned int (*cd_deglitch)(struct rtsx_pcr *pcr); |
707 | int (*conv_clk_and_div_n)(int clk, int dir); | ||
692 | }; | 708 | }; |
693 | 709 | ||
694 | enum PDEV_STAT {PDEV_STAT_IDLE, PDEV_STAT_RUN}; | 710 | enum PDEV_STAT {PDEV_STAT_IDLE, PDEV_STAT_RUN}; |
@@ -783,6 +799,7 @@ int rtsx_pci_switch_clock(struct rtsx_pcr *pcr, unsigned int card_clock, | |||
783 | u8 ssc_depth, bool initial_mode, bool double_clk, bool vpclk); | 799 | u8 ssc_depth, bool initial_mode, bool double_clk, bool vpclk); |
784 | int rtsx_pci_card_power_on(struct rtsx_pcr *pcr, int card); | 800 | int rtsx_pci_card_power_on(struct rtsx_pcr *pcr, int card); |
785 | int rtsx_pci_card_power_off(struct rtsx_pcr *pcr, int card); | 801 | int rtsx_pci_card_power_off(struct rtsx_pcr *pcr, int card); |
802 | int rtsx_pci_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage); | ||
786 | unsigned int rtsx_pci_card_exist(struct rtsx_pcr *pcr); | 803 | unsigned int rtsx_pci_card_exist(struct rtsx_pcr *pcr); |
787 | void rtsx_pci_complete_unfinished_transfer(struct rtsx_pcr *pcr); | 804 | void rtsx_pci_complete_unfinished_transfer(struct rtsx_pcr *pcr); |
788 | 805 | ||
diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h index bc823c4c028b..deca87452528 100644 --- a/include/linux/mmu_notifier.h +++ b/include/linux/mmu_notifier.h | |||
@@ -151,7 +151,7 @@ struct mmu_notifier_ops { | |||
151 | * Therefore notifier chains can only be traversed when either | 151 | * Therefore notifier chains can only be traversed when either |
152 | * | 152 | * |
153 | * 1. mmap_sem is held. | 153 | * 1. mmap_sem is held. |
154 | * 2. One of the reverse map locks is held (i_mmap_mutex or anon_vma->mutex). | 154 | * 2. One of the reverse map locks is held (i_mmap_mutex or anon_vma->rwsem). |
155 | * 3. No other concurrent thread can access the list (release) | 155 | * 3. No other concurrent thread can access the list (release) |
156 | */ | 156 | */ |
157 | struct mmu_notifier { | 157 | struct mmu_notifier { |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 15472d691ee6..6fa4dd2a3b9e 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -1101,6 +1101,12 @@ static inline int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec) | |||
1101 | return -1; | 1101 | return -1; |
1102 | } | 1102 | } |
1103 | 1103 | ||
1104 | static inline int | ||
1105 | pci_enable_msi_block_auto(struct pci_dev *dev, unsigned int *maxvec) | ||
1106 | { | ||
1107 | return -1; | ||
1108 | } | ||
1109 | |||
1104 | static inline void pci_msi_shutdown(struct pci_dev *dev) | 1110 | static inline void pci_msi_shutdown(struct pci_dev *dev) |
1105 | { } | 1111 | { } |
1106 | static inline void pci_disable_msi(struct pci_dev *dev) | 1112 | static inline void pci_disable_msi(struct pci_dev *dev) |
@@ -1132,6 +1138,7 @@ static inline int pci_msi_enabled(void) | |||
1132 | } | 1138 | } |
1133 | #else | 1139 | #else |
1134 | extern int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec); | 1140 | extern int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec); |
1141 | extern int pci_enable_msi_block_auto(struct pci_dev *dev, unsigned int *maxvec); | ||
1135 | extern void pci_msi_shutdown(struct pci_dev *dev); | 1142 | extern void pci_msi_shutdown(struct pci_dev *dev); |
1136 | extern void pci_disable_msi(struct pci_dev *dev); | 1143 | extern void pci_disable_msi(struct pci_dev *dev); |
1137 | extern int pci_msix_table_size(struct pci_dev *dev); | 1144 | extern int pci_msix_table_size(struct pci_dev *dev); |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 6bfb2faa0b19..e47ee462c2f2 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
@@ -135,16 +135,21 @@ struct hw_perf_event { | |||
135 | struct { /* software */ | 135 | struct { /* software */ |
136 | struct hrtimer hrtimer; | 136 | struct hrtimer hrtimer; |
137 | }; | 137 | }; |
138 | struct { /* tracepoint */ | ||
139 | struct task_struct *tp_target; | ||
140 | /* for tp_event->class */ | ||
141 | struct list_head tp_list; | ||
142 | }; | ||
138 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | 143 | #ifdef CONFIG_HAVE_HW_BREAKPOINT |
139 | struct { /* breakpoint */ | 144 | struct { /* breakpoint */ |
140 | struct arch_hw_breakpoint info; | ||
141 | struct list_head bp_list; | ||
142 | /* | 145 | /* |
143 | * Crufty hack to avoid the chicken and egg | 146 | * Crufty hack to avoid the chicken and egg |
144 | * problem hw_breakpoint has with context | 147 | * problem hw_breakpoint has with context |
145 | * creation and event initalization. | 148 | * creation and event initalization. |
146 | */ | 149 | */ |
147 | struct task_struct *bp_target; | 150 | struct task_struct *bp_target; |
151 | struct arch_hw_breakpoint info; | ||
152 | struct list_head bp_list; | ||
148 | }; | 153 | }; |
149 | #endif | 154 | #endif |
150 | }; | 155 | }; |
@@ -817,6 +822,17 @@ do { \ | |||
817 | } while (0) | 822 | } while (0) |
818 | 823 | ||
819 | 824 | ||
825 | struct perf_pmu_events_attr { | ||
826 | struct device_attribute attr; | ||
827 | u64 id; | ||
828 | }; | ||
829 | |||
830 | #define PMU_EVENT_ATTR(_name, _var, _id, _show) \ | ||
831 | static struct perf_pmu_events_attr _var = { \ | ||
832 | .attr = __ATTR(_name, 0444, _show, NULL), \ | ||
833 | .id = _id, \ | ||
834 | }; | ||
835 | |||
820 | #define PMU_FORMAT_ATTR(_name, _format) \ | 836 | #define PMU_FORMAT_ATTR(_name, _format) \ |
821 | static ssize_t \ | 837 | static ssize_t \ |
822 | _name##_show(struct device *dev, \ | 838 | _name##_show(struct device *dev, \ |
diff --git a/include/linux/printk.h b/include/linux/printk.h index 9afc01e5a0a6..86c4b6294713 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h | |||
@@ -98,9 +98,6 @@ int no_printk(const char *fmt, ...) | |||
98 | extern asmlinkage __printf(1, 2) | 98 | extern asmlinkage __printf(1, 2) |
99 | void early_printk(const char *fmt, ...); | 99 | void early_printk(const char *fmt, ...); |
100 | 100 | ||
101 | extern int printk_needs_cpu(int cpu); | ||
102 | extern void printk_tick(void); | ||
103 | |||
104 | #ifdef CONFIG_PRINTK | 101 | #ifdef CONFIG_PRINTK |
105 | asmlinkage __printf(5, 0) | 102 | asmlinkage __printf(5, 0) |
106 | int vprintk_emit(int facility, int level, | 103 | int vprintk_emit(int facility, int level, |
diff --git a/include/linux/profile.h b/include/linux/profile.h index a0fc32279fc0..21123902366d 100644 --- a/include/linux/profile.h +++ b/include/linux/profile.h | |||
@@ -82,9 +82,6 @@ int task_handoff_unregister(struct notifier_block * n); | |||
82 | int profile_event_register(enum profile_type, struct notifier_block * n); | 82 | int profile_event_register(enum profile_type, struct notifier_block * n); |
83 | int profile_event_unregister(enum profile_type, struct notifier_block * n); | 83 | int profile_event_unregister(enum profile_type, struct notifier_block * n); |
84 | 84 | ||
85 | int register_timer_hook(int (*hook)(struct pt_regs *)); | ||
86 | void unregister_timer_hook(int (*hook)(struct pt_regs *)); | ||
87 | |||
88 | struct pt_regs; | 85 | struct pt_regs; |
89 | 86 | ||
90 | #else | 87 | #else |
@@ -135,16 +132,6 @@ static inline int profile_event_unregister(enum profile_type t, struct notifier_ | |||
135 | #define profile_handoff_task(a) (0) | 132 | #define profile_handoff_task(a) (0) |
136 | #define profile_munmap(a) do { } while (0) | 133 | #define profile_munmap(a) do { } while (0) |
137 | 134 | ||
138 | static inline int register_timer_hook(int (*hook)(struct pt_regs *)) | ||
139 | { | ||
140 | return -ENOSYS; | ||
141 | } | ||
142 | |||
143 | static inline void unregister_timer_hook(int (*hook)(struct pt_regs *)) | ||
144 | { | ||
145 | return; | ||
146 | } | ||
147 | |||
148 | #endif /* CONFIG_PROFILING */ | 135 | #endif /* CONFIG_PROFILING */ |
149 | 136 | ||
150 | #endif /* _LINUX_PROFILE_H */ | 137 | #endif /* _LINUX_PROFILE_H */ |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 275aa3f1062d..b758ce17b309 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
@@ -53,7 +53,10 @@ extern int rcutorture_runnable; /* for sysctl */ | |||
53 | extern void rcutorture_record_test_transition(void); | 53 | extern void rcutorture_record_test_transition(void); |
54 | extern void rcutorture_record_progress(unsigned long vernum); | 54 | extern void rcutorture_record_progress(unsigned long vernum); |
55 | extern void do_trace_rcu_torture_read(char *rcutorturename, | 55 | extern void do_trace_rcu_torture_read(char *rcutorturename, |
56 | struct rcu_head *rhp); | 56 | struct rcu_head *rhp, |
57 | unsigned long secs, | ||
58 | unsigned long c_old, | ||
59 | unsigned long c); | ||
57 | #else | 60 | #else |
58 | static inline void rcutorture_record_test_transition(void) | 61 | static inline void rcutorture_record_test_transition(void) |
59 | { | 62 | { |
@@ -63,9 +66,13 @@ static inline void rcutorture_record_progress(unsigned long vernum) | |||
63 | } | 66 | } |
64 | #ifdef CONFIG_RCU_TRACE | 67 | #ifdef CONFIG_RCU_TRACE |
65 | extern void do_trace_rcu_torture_read(char *rcutorturename, | 68 | extern void do_trace_rcu_torture_read(char *rcutorturename, |
66 | struct rcu_head *rhp); | 69 | struct rcu_head *rhp, |
70 | unsigned long secs, | ||
71 | unsigned long c_old, | ||
72 | unsigned long c); | ||
67 | #else | 73 | #else |
68 | #define do_trace_rcu_torture_read(rcutorturename, rhp) do { } while (0) | 74 | #define do_trace_rcu_torture_read(rcutorturename, rhp, secs, c_old, c) \ |
75 | do { } while (0) | ||
69 | #endif | 76 | #endif |
70 | #endif | 77 | #endif |
71 | 78 | ||
@@ -749,7 +756,7 @@ static inline void rcu_preempt_sleep_check(void) | |||
749 | * preemptible RCU implementations (TREE_PREEMPT_RCU and TINY_PREEMPT_RCU) | 756 | * preemptible RCU implementations (TREE_PREEMPT_RCU and TINY_PREEMPT_RCU) |
750 | * in CONFIG_PREEMPT kernel builds, RCU read-side critical sections may | 757 | * in CONFIG_PREEMPT kernel builds, RCU read-side critical sections may |
751 | * be preempted, but explicit blocking is illegal. Finally, in preemptible | 758 | * be preempted, but explicit blocking is illegal. Finally, in preemptible |
752 | * RCU implementations in real-time (CONFIG_PREEMPT_RT) kernel builds, | 759 | * RCU implementations in real-time (with -rt patchset) kernel builds, |
753 | * RCU read-side critical sections may be preempted and they may also | 760 | * RCU read-side critical sections may be preempted and they may also |
754 | * block, but only when acquiring spinlocks that are subject to priority | 761 | * block, but only when acquiring spinlocks that are subject to priority |
755 | * inheritance. | 762 | * inheritance. |
diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index 519777e3fa01..1342e69542f3 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h | |||
@@ -167,6 +167,7 @@ unsigned long ring_buffer_entries_cpu(struct ring_buffer *buffer, int cpu); | |||
167 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); | 167 | unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu); |
168 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); | 168 | unsigned long ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu); |
169 | unsigned long ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu); | 169 | unsigned long ring_buffer_dropped_events_cpu(struct ring_buffer *buffer, int cpu); |
170 | unsigned long ring_buffer_read_events_cpu(struct ring_buffer *buffer, int cpu); | ||
170 | 171 | ||
171 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); | 172 | u64 ring_buffer_time_stamp(struct ring_buffer *buffer, int cpu); |
172 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, | 173 | void ring_buffer_normalize_time_stamp(struct ring_buffer *buffer, |
diff --git a/include/linux/rtc.h b/include/linux/rtc.h index 9531845c419f..11d05f9fe8b6 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h | |||
@@ -138,6 +138,7 @@ extern void rtc_device_unregister(struct rtc_device *rtc); | |||
138 | extern int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm); | 138 | extern int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm); |
139 | extern int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm); | 139 | extern int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm); |
140 | extern int rtc_set_mmss(struct rtc_device *rtc, unsigned long secs); | 140 | extern int rtc_set_mmss(struct rtc_device *rtc, unsigned long secs); |
141 | extern int rtc_set_ntp_time(struct timespec now); | ||
141 | int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm); | 142 | int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm); |
142 | extern int rtc_read_alarm(struct rtc_device *rtc, | 143 | extern int rtc_read_alarm(struct rtc_device *rtc, |
143 | struct rtc_wkalrm *alrm); | 144 | struct rtc_wkalrm *alrm); |
diff --git a/include/linux/sched.h b/include/linux/sched.h index d2112477ff5e..33cc42130371 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -304,19 +304,6 @@ static inline void lockup_detector_init(void) | |||
304 | } | 304 | } |
305 | #endif | 305 | #endif |
306 | 306 | ||
307 | #ifdef CONFIG_DETECT_HUNG_TASK | ||
308 | extern unsigned int sysctl_hung_task_panic; | ||
309 | extern unsigned long sysctl_hung_task_check_count; | ||
310 | extern unsigned long sysctl_hung_task_timeout_secs; | ||
311 | extern unsigned long sysctl_hung_task_warnings; | ||
312 | extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, | ||
313 | void __user *buffer, | ||
314 | size_t *lenp, loff_t *ppos); | ||
315 | #else | ||
316 | /* Avoid need for ifdefs elsewhere in the code */ | ||
317 | enum { sysctl_hung_task_timeout_secs = 0 }; | ||
318 | #endif | ||
319 | |||
320 | /* Attach to any functions which should be ignored in wchan output. */ | 307 | /* Attach to any functions which should be ignored in wchan output. */ |
321 | #define __sched __attribute__((__section__(".sched.text"))) | 308 | #define __sched __attribute__((__section__(".sched.text"))) |
322 | 309 | ||
@@ -338,23 +325,6 @@ extern int mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner); | |||
338 | struct nsproxy; | 325 | struct nsproxy; |
339 | struct user_namespace; | 326 | struct user_namespace; |
340 | 327 | ||
341 | /* | ||
342 | * Default maximum number of active map areas, this limits the number of vmas | ||
343 | * per mm struct. Users can overwrite this number by sysctl but there is a | ||
344 | * problem. | ||
345 | * | ||
346 | * When a program's coredump is generated as ELF format, a section is created | ||
347 | * per a vma. In ELF, the number of sections is represented in unsigned short. | ||
348 | * This means the number of sections should be smaller than 65535 at coredump. | ||
349 | * Because the kernel adds some informative sections to a image of program at | ||
350 | * generating coredump, we need some margin. The number of extra sections is | ||
351 | * 1-3 now and depends on arch. We use "5" as safe margin, here. | ||
352 | */ | ||
353 | #define MAPCOUNT_ELF_CORE_MARGIN (5) | ||
354 | #define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN) | ||
355 | |||
356 | extern int sysctl_max_map_count; | ||
357 | |||
358 | #include <linux/aio.h> | 328 | #include <linux/aio.h> |
359 | 329 | ||
360 | #ifdef CONFIG_MMU | 330 | #ifdef CONFIG_MMU |
@@ -1194,6 +1164,7 @@ struct sched_entity { | |||
1194 | /* rq "owned" by this entity/group: */ | 1164 | /* rq "owned" by this entity/group: */ |
1195 | struct cfs_rq *my_q; | 1165 | struct cfs_rq *my_q; |
1196 | #endif | 1166 | #endif |
1167 | |||
1197 | /* | 1168 | /* |
1198 | * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be | 1169 | * Load-tracking only depends on SMP, FAIR_GROUP_SCHED dependency below may be |
1199 | * removed when useful for applications beyond shares distribution (e.g. | 1170 | * removed when useful for applications beyond shares distribution (e.g. |
@@ -1208,6 +1179,7 @@ struct sched_entity { | |||
1208 | struct sched_rt_entity { | 1179 | struct sched_rt_entity { |
1209 | struct list_head run_list; | 1180 | struct list_head run_list; |
1210 | unsigned long timeout; | 1181 | unsigned long timeout; |
1182 | unsigned long watchdog_stamp; | ||
1211 | unsigned int time_slice; | 1183 | unsigned int time_slice; |
1212 | 1184 | ||
1213 | struct sched_rt_entity *back; | 1185 | struct sched_rt_entity *back; |
@@ -1220,11 +1192,6 @@ struct sched_rt_entity { | |||
1220 | #endif | 1192 | #endif |
1221 | }; | 1193 | }; |
1222 | 1194 | ||
1223 | /* | ||
1224 | * default timeslice is 100 msecs (used only for SCHED_RR tasks). | ||
1225 | * Timeslices get refilled after they expire. | ||
1226 | */ | ||
1227 | #define RR_TIMESLICE (100 * HZ / 1000) | ||
1228 | 1195 | ||
1229 | struct rcu_node; | 1196 | struct rcu_node; |
1230 | 1197 | ||
@@ -1368,6 +1335,15 @@ struct task_struct { | |||
1368 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING | 1335 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING |
1369 | struct cputime prev_cputime; | 1336 | struct cputime prev_cputime; |
1370 | #endif | 1337 | #endif |
1338 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN | ||
1339 | seqlock_t vtime_seqlock; | ||
1340 | unsigned long long vtime_snap; | ||
1341 | enum { | ||
1342 | VTIME_SLEEPING = 0, | ||
1343 | VTIME_USER, | ||
1344 | VTIME_SYS, | ||
1345 | } vtime_snap_whence; | ||
1346 | #endif | ||
1371 | unsigned long nvcsw, nivcsw; /* context switch counts */ | 1347 | unsigned long nvcsw, nivcsw; /* context switch counts */ |
1372 | struct timespec start_time; /* monotonic time */ | 1348 | struct timespec start_time; /* monotonic time */ |
1373 | struct timespec real_start_time; /* boot based time */ | 1349 | struct timespec real_start_time; /* boot based time */ |
@@ -1622,37 +1598,6 @@ static inline void set_numabalancing_state(bool enabled) | |||
1622 | } | 1598 | } |
1623 | #endif | 1599 | #endif |
1624 | 1600 | ||
1625 | /* | ||
1626 | * Priority of a process goes from 0..MAX_PRIO-1, valid RT | ||
1627 | * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH | ||
1628 | * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority | ||
1629 | * values are inverted: lower p->prio value means higher priority. | ||
1630 | * | ||
1631 | * The MAX_USER_RT_PRIO value allows the actual maximum | ||
1632 | * RT priority to be separate from the value exported to | ||
1633 | * user-space. This allows kernel threads to set their | ||
1634 | * priority to a value higher than any user task. Note: | ||
1635 | * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO. | ||
1636 | */ | ||
1637 | |||
1638 | #define MAX_USER_RT_PRIO 100 | ||
1639 | #define MAX_RT_PRIO MAX_USER_RT_PRIO | ||
1640 | |||
1641 | #define MAX_PRIO (MAX_RT_PRIO + 40) | ||
1642 | #define DEFAULT_PRIO (MAX_RT_PRIO + 20) | ||
1643 | |||
1644 | static inline int rt_prio(int prio) | ||
1645 | { | ||
1646 | if (unlikely(prio < MAX_RT_PRIO)) | ||
1647 | return 1; | ||
1648 | return 0; | ||
1649 | } | ||
1650 | |||
1651 | static inline int rt_task(struct task_struct *p) | ||
1652 | { | ||
1653 | return rt_prio(p->prio); | ||
1654 | } | ||
1655 | |||
1656 | static inline struct pid *task_pid(struct task_struct *task) | 1601 | static inline struct pid *task_pid(struct task_struct *task) |
1657 | { | 1602 | { |
1658 | return task->pids[PIDTYPE_PID].pid; | 1603 | return task->pids[PIDTYPE_PID].pid; |
@@ -1792,6 +1737,37 @@ static inline void put_task_struct(struct task_struct *t) | |||
1792 | __put_task_struct(t); | 1737 | __put_task_struct(t); |
1793 | } | 1738 | } |
1794 | 1739 | ||
1740 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN | ||
1741 | extern void task_cputime(struct task_struct *t, | ||
1742 | cputime_t *utime, cputime_t *stime); | ||
1743 | extern void task_cputime_scaled(struct task_struct *t, | ||
1744 | cputime_t *utimescaled, cputime_t *stimescaled); | ||
1745 | extern cputime_t task_gtime(struct task_struct *t); | ||
1746 | #else | ||
1747 | static inline void task_cputime(struct task_struct *t, | ||
1748 | cputime_t *utime, cputime_t *stime) | ||
1749 | { | ||
1750 | if (utime) | ||
1751 | *utime = t->utime; | ||
1752 | if (stime) | ||
1753 | *stime = t->stime; | ||
1754 | } | ||
1755 | |||
1756 | static inline void task_cputime_scaled(struct task_struct *t, | ||
1757 | cputime_t *utimescaled, | ||
1758 | cputime_t *stimescaled) | ||
1759 | { | ||
1760 | if (utimescaled) | ||
1761 | *utimescaled = t->utimescaled; | ||
1762 | if (stimescaled) | ||
1763 | *stimescaled = t->stimescaled; | ||
1764 | } | ||
1765 | |||
1766 | static inline cputime_t task_gtime(struct task_struct *t) | ||
1767 | { | ||
1768 | return t->gtime; | ||
1769 | } | ||
1770 | #endif | ||
1795 | extern void task_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st); | 1771 | extern void task_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st); |
1796 | extern void thread_group_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st); | 1772 | extern void thread_group_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st); |
1797 | 1773 | ||
@@ -2033,58 +2009,7 @@ extern void wake_up_idle_cpu(int cpu); | |||
2033 | static inline void wake_up_idle_cpu(int cpu) { } | 2009 | static inline void wake_up_idle_cpu(int cpu) { } |
2034 | #endif | 2010 | #endif |
2035 | 2011 | ||
2036 | extern unsigned int sysctl_sched_latency; | ||
2037 | extern unsigned int sysctl_sched_min_granularity; | ||
2038 | extern unsigned int sysctl_sched_wakeup_granularity; | ||
2039 | extern unsigned int sysctl_sched_child_runs_first; | ||
2040 | |||
2041 | enum sched_tunable_scaling { | ||
2042 | SCHED_TUNABLESCALING_NONE, | ||
2043 | SCHED_TUNABLESCALING_LOG, | ||
2044 | SCHED_TUNABLESCALING_LINEAR, | ||
2045 | SCHED_TUNABLESCALING_END, | ||
2046 | }; | ||
2047 | extern enum sched_tunable_scaling sysctl_sched_tunable_scaling; | ||
2048 | |||
2049 | extern unsigned int sysctl_numa_balancing_scan_delay; | ||
2050 | extern unsigned int sysctl_numa_balancing_scan_period_min; | ||
2051 | extern unsigned int sysctl_numa_balancing_scan_period_max; | ||
2052 | extern unsigned int sysctl_numa_balancing_scan_period_reset; | ||
2053 | extern unsigned int sysctl_numa_balancing_scan_size; | ||
2054 | extern unsigned int sysctl_numa_balancing_settle_count; | ||
2055 | |||
2056 | #ifdef CONFIG_SCHED_DEBUG | ||
2057 | extern unsigned int sysctl_sched_migration_cost; | ||
2058 | extern unsigned int sysctl_sched_nr_migrate; | ||
2059 | extern unsigned int sysctl_sched_time_avg; | ||
2060 | extern unsigned int sysctl_timer_migration; | ||
2061 | extern unsigned int sysctl_sched_shares_window; | ||
2062 | |||
2063 | int sched_proc_update_handler(struct ctl_table *table, int write, | ||
2064 | void __user *buffer, size_t *length, | ||
2065 | loff_t *ppos); | ||
2066 | #endif | ||
2067 | #ifdef CONFIG_SCHED_DEBUG | ||
2068 | static inline unsigned int get_sysctl_timer_migration(void) | ||
2069 | { | ||
2070 | return sysctl_timer_migration; | ||
2071 | } | ||
2072 | #else | ||
2073 | static inline unsigned int get_sysctl_timer_migration(void) | ||
2074 | { | ||
2075 | return 1; | ||
2076 | } | ||
2077 | #endif | ||
2078 | extern unsigned int sysctl_sched_rt_period; | ||
2079 | extern int sysctl_sched_rt_runtime; | ||
2080 | |||
2081 | int sched_rt_handler(struct ctl_table *table, int write, | ||
2082 | void __user *buffer, size_t *lenp, | ||
2083 | loff_t *ppos); | ||
2084 | |||
2085 | #ifdef CONFIG_SCHED_AUTOGROUP | 2012 | #ifdef CONFIG_SCHED_AUTOGROUP |
2086 | extern unsigned int sysctl_sched_autogroup_enabled; | ||
2087 | |||
2088 | extern void sched_autogroup_create_attach(struct task_struct *p); | 2013 | extern void sched_autogroup_create_attach(struct task_struct *p); |
2089 | extern void sched_autogroup_detach(struct task_struct *p); | 2014 | extern void sched_autogroup_detach(struct task_struct *p); |
2090 | extern void sched_autogroup_fork(struct signal_struct *sig); | 2015 | extern void sched_autogroup_fork(struct signal_struct *sig); |
@@ -2100,30 +2025,6 @@ static inline void sched_autogroup_fork(struct signal_struct *sig) { } | |||
2100 | static inline void sched_autogroup_exit(struct signal_struct *sig) { } | 2025 | static inline void sched_autogroup_exit(struct signal_struct *sig) { } |
2101 | #endif | 2026 | #endif |
2102 | 2027 | ||
2103 | #ifdef CONFIG_CFS_BANDWIDTH | ||
2104 | extern unsigned int sysctl_sched_cfs_bandwidth_slice; | ||
2105 | #endif | ||
2106 | |||
2107 | #ifdef CONFIG_RT_MUTEXES | ||
2108 | extern int rt_mutex_getprio(struct task_struct *p); | ||
2109 | extern void rt_mutex_setprio(struct task_struct *p, int prio); | ||
2110 | extern void rt_mutex_adjust_pi(struct task_struct *p); | ||
2111 | static inline bool tsk_is_pi_blocked(struct task_struct *tsk) | ||
2112 | { | ||
2113 | return tsk->pi_blocked_on != NULL; | ||
2114 | } | ||
2115 | #else | ||
2116 | static inline int rt_mutex_getprio(struct task_struct *p) | ||
2117 | { | ||
2118 | return p->normal_prio; | ||
2119 | } | ||
2120 | # define rt_mutex_adjust_pi(p) do { } while (0) | ||
2121 | static inline bool tsk_is_pi_blocked(struct task_struct *tsk) | ||
2122 | { | ||
2123 | return false; | ||
2124 | } | ||
2125 | #endif | ||
2126 | |||
2127 | extern bool yield_to(struct task_struct *p, bool preempt); | 2028 | extern bool yield_to(struct task_struct *p, bool preempt); |
2128 | extern void set_user_nice(struct task_struct *p, long nice); | 2029 | extern void set_user_nice(struct task_struct *p, long nice); |
2129 | extern int task_prio(const struct task_struct *p); | 2030 | extern int task_prio(const struct task_struct *p); |
@@ -2753,8 +2654,6 @@ static inline void set_task_cpu(struct task_struct *p, unsigned int cpu) | |||
2753 | extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask); | 2654 | extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask); |
2754 | extern long sched_getaffinity(pid_t pid, struct cpumask *mask); | 2655 | extern long sched_getaffinity(pid_t pid, struct cpumask *mask); |
2755 | 2656 | ||
2756 | extern void normalize_rt_tasks(void); | ||
2757 | |||
2758 | #ifdef CONFIG_CGROUP_SCHED | 2657 | #ifdef CONFIG_CGROUP_SCHED |
2759 | 2658 | ||
2760 | extern struct task_group root_task_group; | 2659 | extern struct task_group root_task_group; |
diff --git a/include/linux/sched/rt.h b/include/linux/sched/rt.h new file mode 100644 index 000000000000..94e19ea28fc3 --- /dev/null +++ b/include/linux/sched/rt.h | |||
@@ -0,0 +1,58 @@ | |||
1 | #ifndef _SCHED_RT_H | ||
2 | #define _SCHED_RT_H | ||
3 | |||
4 | /* | ||
5 | * Priority of a process goes from 0..MAX_PRIO-1, valid RT | ||
6 | * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH | ||
7 | * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority | ||
8 | * values are inverted: lower p->prio value means higher priority. | ||
9 | * | ||
10 | * The MAX_USER_RT_PRIO value allows the actual maximum | ||
11 | * RT priority to be separate from the value exported to | ||
12 | * user-space. This allows kernel threads to set their | ||
13 | * priority to a value higher than any user task. Note: | ||
14 | * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO. | ||
15 | */ | ||
16 | |||
17 | #define MAX_USER_RT_PRIO 100 | ||
18 | #define MAX_RT_PRIO MAX_USER_RT_PRIO | ||
19 | |||
20 | #define MAX_PRIO (MAX_RT_PRIO + 40) | ||
21 | #define DEFAULT_PRIO (MAX_RT_PRIO + 20) | ||
22 | |||
23 | static inline int rt_prio(int prio) | ||
24 | { | ||
25 | if (unlikely(prio < MAX_RT_PRIO)) | ||
26 | return 1; | ||
27 | return 0; | ||
28 | } | ||
29 | |||
30 | static inline int rt_task(struct task_struct *p) | ||
31 | { | ||
32 | return rt_prio(p->prio); | ||
33 | } | ||
34 | |||
35 | #ifdef CONFIG_RT_MUTEXES | ||
36 | extern int rt_mutex_getprio(struct task_struct *p); | ||
37 | extern void rt_mutex_setprio(struct task_struct *p, int prio); | ||
38 | extern void rt_mutex_adjust_pi(struct task_struct *p); | ||
39 | static inline bool tsk_is_pi_blocked(struct task_struct *tsk) | ||
40 | { | ||
41 | return tsk->pi_blocked_on != NULL; | ||
42 | } | ||
43 | #else | ||
44 | static inline int rt_mutex_getprio(struct task_struct *p) | ||
45 | { | ||
46 | return p->normal_prio; | ||
47 | } | ||
48 | # define rt_mutex_adjust_pi(p) do { } while (0) | ||
49 | static inline bool tsk_is_pi_blocked(struct task_struct *tsk) | ||
50 | { | ||
51 | return false; | ||
52 | } | ||
53 | #endif | ||
54 | |||
55 | extern void normalize_rt_tasks(void); | ||
56 | |||
57 | |||
58 | #endif /* _SCHED_RT_H */ | ||
diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h new file mode 100644 index 000000000000..d2bb0ae979d0 --- /dev/null +++ b/include/linux/sched/sysctl.h | |||
@@ -0,0 +1,110 @@ | |||
1 | #ifndef _SCHED_SYSCTL_H | ||
2 | #define _SCHED_SYSCTL_H | ||
3 | |||
4 | #ifdef CONFIG_DETECT_HUNG_TASK | ||
5 | extern unsigned int sysctl_hung_task_panic; | ||
6 | extern unsigned long sysctl_hung_task_check_count; | ||
7 | extern unsigned long sysctl_hung_task_timeout_secs; | ||
8 | extern unsigned long sysctl_hung_task_warnings; | ||
9 | extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write, | ||
10 | void __user *buffer, | ||
11 | size_t *lenp, loff_t *ppos); | ||
12 | #else | ||
13 | /* Avoid need for ifdefs elsewhere in the code */ | ||
14 | enum { sysctl_hung_task_timeout_secs = 0 }; | ||
15 | #endif | ||
16 | |||
17 | /* | ||
18 | * Default maximum number of active map areas, this limits the number of vmas | ||
19 | * per mm struct. Users can overwrite this number by sysctl but there is a | ||
20 | * problem. | ||
21 | * | ||
22 | * When a program's coredump is generated as ELF format, a section is created | ||
23 | * per a vma. In ELF, the number of sections is represented in unsigned short. | ||
24 | * This means the number of sections should be smaller than 65535 at coredump. | ||
25 | * Because the kernel adds some informative sections to a image of program at | ||
26 | * generating coredump, we need some margin. The number of extra sections is | ||
27 | * 1-3 now and depends on arch. We use "5" as safe margin, here. | ||
28 | */ | ||
29 | #define MAPCOUNT_ELF_CORE_MARGIN (5) | ||
30 | #define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN) | ||
31 | |||
32 | extern int sysctl_max_map_count; | ||
33 | |||
34 | extern unsigned int sysctl_sched_latency; | ||
35 | extern unsigned int sysctl_sched_min_granularity; | ||
36 | extern unsigned int sysctl_sched_wakeup_granularity; | ||
37 | extern unsigned int sysctl_sched_child_runs_first; | ||
38 | |||
39 | enum sched_tunable_scaling { | ||
40 | SCHED_TUNABLESCALING_NONE, | ||
41 | SCHED_TUNABLESCALING_LOG, | ||
42 | SCHED_TUNABLESCALING_LINEAR, | ||
43 | SCHED_TUNABLESCALING_END, | ||
44 | }; | ||
45 | extern enum sched_tunable_scaling sysctl_sched_tunable_scaling; | ||
46 | |||
47 | extern unsigned int sysctl_numa_balancing_scan_delay; | ||
48 | extern unsigned int sysctl_numa_balancing_scan_period_min; | ||
49 | extern unsigned int sysctl_numa_balancing_scan_period_max; | ||
50 | extern unsigned int sysctl_numa_balancing_scan_period_reset; | ||
51 | extern unsigned int sysctl_numa_balancing_scan_size; | ||
52 | extern unsigned int sysctl_numa_balancing_settle_count; | ||
53 | |||
54 | #ifdef CONFIG_SCHED_DEBUG | ||
55 | extern unsigned int sysctl_sched_migration_cost; | ||
56 | extern unsigned int sysctl_sched_nr_migrate; | ||
57 | extern unsigned int sysctl_sched_time_avg; | ||
58 | extern unsigned int sysctl_timer_migration; | ||
59 | extern unsigned int sysctl_sched_shares_window; | ||
60 | |||
61 | int sched_proc_update_handler(struct ctl_table *table, int write, | ||
62 | void __user *buffer, size_t *length, | ||
63 | loff_t *ppos); | ||
64 | #endif | ||
65 | #ifdef CONFIG_SCHED_DEBUG | ||
66 | static inline unsigned int get_sysctl_timer_migration(void) | ||
67 | { | ||
68 | return sysctl_timer_migration; | ||
69 | } | ||
70 | #else | ||
71 | static inline unsigned int get_sysctl_timer_migration(void) | ||
72 | { | ||
73 | return 1; | ||
74 | } | ||
75 | #endif | ||
76 | |||
77 | /* | ||
78 | * control realtime throttling: | ||
79 | * | ||
80 | * /proc/sys/kernel/sched_rt_period_us | ||
81 | * /proc/sys/kernel/sched_rt_runtime_us | ||
82 | */ | ||
83 | extern unsigned int sysctl_sched_rt_period; | ||
84 | extern int sysctl_sched_rt_runtime; | ||
85 | |||
86 | #ifdef CONFIG_CFS_BANDWIDTH | ||
87 | extern unsigned int sysctl_sched_cfs_bandwidth_slice; | ||
88 | #endif | ||
89 | |||
90 | #ifdef CONFIG_SCHED_AUTOGROUP | ||
91 | extern unsigned int sysctl_sched_autogroup_enabled; | ||
92 | #endif | ||
93 | |||
94 | /* | ||
95 | * default timeslice is 100 msecs (used only for SCHED_RR tasks). | ||
96 | * Timeslices get refilled after they expire. | ||
97 | */ | ||
98 | #define RR_TIMESLICE (100 * HZ / 1000) | ||
99 | |||
100 | extern int sched_rr_timeslice; | ||
101 | |||
102 | extern int sched_rr_handler(struct ctl_table *table, int write, | ||
103 | void __user *buffer, size_t *lenp, | ||
104 | loff_t *ppos); | ||
105 | |||
106 | extern int sched_rt_handler(struct ctl_table *table, int write, | ||
107 | void __user *buffer, size_t *lenp, | ||
108 | loff_t *ppos); | ||
109 | |||
110 | #endif /* _SCHED_SYSCTL_H */ | ||
diff --git a/include/linux/security.h b/include/linux/security.h index 0f6afc657f77..eee7478cda70 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
@@ -989,17 +989,29 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts) | |||
989 | * tells the LSM to decrement the number of secmark labeling rules loaded | 989 | * tells the LSM to decrement the number of secmark labeling rules loaded |
990 | * @req_classify_flow: | 990 | * @req_classify_flow: |
991 | * Sets the flow's sid to the openreq sid. | 991 | * Sets the flow's sid to the openreq sid. |
992 | * @tun_dev_alloc_security: | ||
993 | * This hook allows a module to allocate a security structure for a TUN | ||
994 | * device. | ||
995 | * @security pointer to a security structure pointer. | ||
996 | * Returns a zero on success, negative values on failure. | ||
997 | * @tun_dev_free_security: | ||
998 | * This hook allows a module to free the security structure for a TUN | ||
999 | * device. | ||
1000 | * @security pointer to the TUN device's security structure | ||
992 | * @tun_dev_create: | 1001 | * @tun_dev_create: |
993 | * Check permissions prior to creating a new TUN device. | 1002 | * Check permissions prior to creating a new TUN device. |
994 | * @tun_dev_post_create: | 1003 | * @tun_dev_attach_queue: |
995 | * This hook allows a module to update or allocate a per-socket security | 1004 | * Check permissions prior to attaching to a TUN device queue. |
996 | * structure. | 1005 | * @security pointer to the TUN device's security structure. |
997 | * @sk contains the newly created sock structure. | ||
998 | * @tun_dev_attach: | 1006 | * @tun_dev_attach: |
999 | * Check permissions prior to attaching to a persistent TUN device. This | 1007 | * This hook can be used by the module to update any security state |
1000 | * hook can also be used by the module to update any security state | ||
1001 | * associated with the TUN device's sock structure. | 1008 | * associated with the TUN device's sock structure. |
1002 | * @sk contains the existing sock structure. | 1009 | * @sk contains the existing sock structure. |
1010 | * @security pointer to the TUN device's security structure. | ||
1011 | * @tun_dev_open: | ||
1012 | * This hook can be used by the module to update any security state | ||
1013 | * associated with the TUN device's security structure. | ||
1014 | * @security pointer to the TUN devices's security structure. | ||
1003 | * | 1015 | * |
1004 | * Security hooks for XFRM operations. | 1016 | * Security hooks for XFRM operations. |
1005 | * | 1017 | * |
@@ -1620,9 +1632,12 @@ struct security_operations { | |||
1620 | void (*secmark_refcount_inc) (void); | 1632 | void (*secmark_refcount_inc) (void); |
1621 | void (*secmark_refcount_dec) (void); | 1633 | void (*secmark_refcount_dec) (void); |
1622 | void (*req_classify_flow) (const struct request_sock *req, struct flowi *fl); | 1634 | void (*req_classify_flow) (const struct request_sock *req, struct flowi *fl); |
1623 | int (*tun_dev_create)(void); | 1635 | int (*tun_dev_alloc_security) (void **security); |
1624 | void (*tun_dev_post_create)(struct sock *sk); | 1636 | void (*tun_dev_free_security) (void *security); |
1625 | int (*tun_dev_attach)(struct sock *sk); | 1637 | int (*tun_dev_create) (void); |
1638 | int (*tun_dev_attach_queue) (void *security); | ||
1639 | int (*tun_dev_attach) (struct sock *sk, void *security); | ||
1640 | int (*tun_dev_open) (void *security); | ||
1626 | #endif /* CONFIG_SECURITY_NETWORK */ | 1641 | #endif /* CONFIG_SECURITY_NETWORK */ |
1627 | 1642 | ||
1628 | #ifdef CONFIG_SECURITY_NETWORK_XFRM | 1643 | #ifdef CONFIG_SECURITY_NETWORK_XFRM |
@@ -2566,9 +2581,12 @@ void security_inet_conn_established(struct sock *sk, | |||
2566 | int security_secmark_relabel_packet(u32 secid); | 2581 | int security_secmark_relabel_packet(u32 secid); |
2567 | void security_secmark_refcount_inc(void); | 2582 | void security_secmark_refcount_inc(void); |
2568 | void security_secmark_refcount_dec(void); | 2583 | void security_secmark_refcount_dec(void); |
2584 | int security_tun_dev_alloc_security(void **security); | ||
2585 | void security_tun_dev_free_security(void *security); | ||
2569 | int security_tun_dev_create(void); | 2586 | int security_tun_dev_create(void); |
2570 | void security_tun_dev_post_create(struct sock *sk); | 2587 | int security_tun_dev_attach_queue(void *security); |
2571 | int security_tun_dev_attach(struct sock *sk); | 2588 | int security_tun_dev_attach(struct sock *sk, void *security); |
2589 | int security_tun_dev_open(void *security); | ||
2572 | 2590 | ||
2573 | #else /* CONFIG_SECURITY_NETWORK */ | 2591 | #else /* CONFIG_SECURITY_NETWORK */ |
2574 | static inline int security_unix_stream_connect(struct sock *sock, | 2592 | static inline int security_unix_stream_connect(struct sock *sock, |
@@ -2733,16 +2751,31 @@ static inline void security_secmark_refcount_dec(void) | |||
2733 | { | 2751 | { |
2734 | } | 2752 | } |
2735 | 2753 | ||
2754 | static inline int security_tun_dev_alloc_security(void **security) | ||
2755 | { | ||
2756 | return 0; | ||
2757 | } | ||
2758 | |||
2759 | static inline void security_tun_dev_free_security(void *security) | ||
2760 | { | ||
2761 | } | ||
2762 | |||
2736 | static inline int security_tun_dev_create(void) | 2763 | static inline int security_tun_dev_create(void) |
2737 | { | 2764 | { |
2738 | return 0; | 2765 | return 0; |
2739 | } | 2766 | } |
2740 | 2767 | ||
2741 | static inline void security_tun_dev_post_create(struct sock *sk) | 2768 | static inline int security_tun_dev_attach_queue(void *security) |
2769 | { | ||
2770 | return 0; | ||
2771 | } | ||
2772 | |||
2773 | static inline int security_tun_dev_attach(struct sock *sk, void *security) | ||
2742 | { | 2774 | { |
2775 | return 0; | ||
2743 | } | 2776 | } |
2744 | 2777 | ||
2745 | static inline int security_tun_dev_attach(struct sock *sk) | 2778 | static inline int security_tun_dev_open(void *security) |
2746 | { | 2779 | { |
2747 | return 0; | 2780 | return 0; |
2748 | } | 2781 | } |
diff --git a/include/linux/smpboot.h b/include/linux/smpboot.h index e0106d8581d3..c65dee059913 100644 --- a/include/linux/smpboot.h +++ b/include/linux/smpboot.h | |||
@@ -14,6 +14,8 @@ struct smpboot_thread_data; | |||
14 | * @thread_should_run: Check whether the thread should run or not. Called with | 14 | * @thread_should_run: Check whether the thread should run or not. Called with |
15 | * preemption disabled. | 15 | * preemption disabled. |
16 | * @thread_fn: The associated thread function | 16 | * @thread_fn: The associated thread function |
17 | * @create: Optional setup function, called when the thread gets | ||
18 | * created (Not called from the thread context) | ||
17 | * @setup: Optional setup function, called when the thread gets | 19 | * @setup: Optional setup function, called when the thread gets |
18 | * operational the first time | 20 | * operational the first time |
19 | * @cleanup: Optional cleanup function, called when the thread | 21 | * @cleanup: Optional cleanup function, called when the thread |
@@ -22,6 +24,7 @@ struct smpboot_thread_data; | |||
22 | * parked (cpu offline) | 24 | * parked (cpu offline) |
23 | * @unpark: Optional unpark function, called when the thread is | 25 | * @unpark: Optional unpark function, called when the thread is |
24 | * unparked (cpu online) | 26 | * unparked (cpu online) |
27 | * @selfparking: Thread is not parked by the park function. | ||
25 | * @thread_comm: The base name of the thread | 28 | * @thread_comm: The base name of the thread |
26 | */ | 29 | */ |
27 | struct smp_hotplug_thread { | 30 | struct smp_hotplug_thread { |
@@ -29,10 +32,12 @@ struct smp_hotplug_thread { | |||
29 | struct list_head list; | 32 | struct list_head list; |
30 | int (*thread_should_run)(unsigned int cpu); | 33 | int (*thread_should_run)(unsigned int cpu); |
31 | void (*thread_fn)(unsigned int cpu); | 34 | void (*thread_fn)(unsigned int cpu); |
35 | void (*create)(unsigned int cpu); | ||
32 | void (*setup)(unsigned int cpu); | 36 | void (*setup)(unsigned int cpu); |
33 | void (*cleanup)(unsigned int cpu, bool online); | 37 | void (*cleanup)(unsigned int cpu, bool online); |
34 | void (*park)(unsigned int cpu); | 38 | void (*park)(unsigned int cpu); |
35 | void (*unpark)(unsigned int cpu); | 39 | void (*unpark)(unsigned int cpu); |
40 | bool selfparking; | ||
36 | const char *thread_comm; | 41 | const char *thread_comm; |
37 | }; | 42 | }; |
38 | 43 | ||
diff --git a/include/linux/srcu.h b/include/linux/srcu.h index 6eb691b08358..04f4121a23ae 100644 --- a/include/linux/srcu.h +++ b/include/linux/srcu.h | |||
@@ -151,30 +151,14 @@ void srcu_barrier(struct srcu_struct *sp); | |||
151 | * Checks debug_lockdep_rcu_enabled() to prevent false positives during boot | 151 | * Checks debug_lockdep_rcu_enabled() to prevent false positives during boot |
152 | * and while lockdep is disabled. | 152 | * and while lockdep is disabled. |
153 | * | 153 | * |
154 | * Note that if the CPU is in the idle loop from an RCU point of view | 154 | * Note that SRCU is based on its own statemachine and it doesn't |
155 | * (ie: that we are in the section between rcu_idle_enter() and | 155 | * relies on normal RCU, it can be called from the CPU which |
156 | * rcu_idle_exit()) then srcu_read_lock_held() returns false even if | 156 | * is in the idle loop from an RCU point of view or offline. |
157 | * the CPU did an srcu_read_lock(). The reason for this is that RCU | ||
158 | * ignores CPUs that are in such a section, considering these as in | ||
159 | * extended quiescent state, so such a CPU is effectively never in an | ||
160 | * RCU read-side critical section regardless of what RCU primitives it | ||
161 | * invokes. This state of affairs is required --- we need to keep an | ||
162 | * RCU-free window in idle where the CPU may possibly enter into low | ||
163 | * power mode. This way we can notice an extended quiescent state to | ||
164 | * other CPUs that started a grace period. Otherwise we would delay any | ||
165 | * grace period as long as we run in the idle task. | ||
166 | * | ||
167 | * Similarly, we avoid claiming an SRCU read lock held if the current | ||
168 | * CPU is offline. | ||
169 | */ | 157 | */ |
170 | static inline int srcu_read_lock_held(struct srcu_struct *sp) | 158 | static inline int srcu_read_lock_held(struct srcu_struct *sp) |
171 | { | 159 | { |
172 | if (!debug_lockdep_rcu_enabled()) | 160 | if (!debug_lockdep_rcu_enabled()) |
173 | return 1; | 161 | return 1; |
174 | if (rcu_is_cpu_idle()) | ||
175 | return 0; | ||
176 | if (!rcu_lockdep_current_cpu_online()) | ||
177 | return 0; | ||
178 | return lock_is_held(&sp->dep_map); | 162 | return lock_is_held(&sp->dep_map); |
179 | } | 163 | } |
180 | 164 | ||
@@ -236,8 +220,6 @@ static inline int srcu_read_lock(struct srcu_struct *sp) __acquires(sp) | |||
236 | int retval = __srcu_read_lock(sp); | 220 | int retval = __srcu_read_lock(sp); |
237 | 221 | ||
238 | rcu_lock_acquire(&(sp)->dep_map); | 222 | rcu_lock_acquire(&(sp)->dep_map); |
239 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | ||
240 | "srcu_read_lock() used illegally while idle"); | ||
241 | return retval; | 223 | return retval; |
242 | } | 224 | } |
243 | 225 | ||
@@ -251,8 +233,6 @@ static inline int srcu_read_lock(struct srcu_struct *sp) __acquires(sp) | |||
251 | static inline void srcu_read_unlock(struct srcu_struct *sp, int idx) | 233 | static inline void srcu_read_unlock(struct srcu_struct *sp, int idx) |
252 | __releases(sp) | 234 | __releases(sp) |
253 | { | 235 | { |
254 | rcu_lockdep_assert(!rcu_is_cpu_idle(), | ||
255 | "srcu_read_unlock() used illegally while idle"); | ||
256 | rcu_lock_release(&(sp)->dep_map); | 236 | rcu_lock_release(&(sp)->dep_map); |
257 | __srcu_read_unlock(sp, idx); | 237 | __srcu_read_unlock(sp, idx); |
258 | } | 238 | } |
diff --git a/include/linux/tick.h b/include/linux/tick.h index 1a6567b48492..553272e6af55 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h | |||
@@ -8,6 +8,8 @@ | |||
8 | 8 | ||
9 | #include <linux/clockchips.h> | 9 | #include <linux/clockchips.h> |
10 | #include <linux/irqflags.h> | 10 | #include <linux/irqflags.h> |
11 | #include <linux/percpu.h> | ||
12 | #include <linux/hrtimer.h> | ||
11 | 13 | ||
12 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | 14 | #ifdef CONFIG_GENERIC_CLOCKEVENTS |
13 | 15 | ||
@@ -122,13 +124,26 @@ static inline int tick_oneshot_mode_active(void) { return 0; } | |||
122 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ | 124 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ |
123 | 125 | ||
124 | # ifdef CONFIG_NO_HZ | 126 | # ifdef CONFIG_NO_HZ |
127 | DECLARE_PER_CPU(struct tick_sched, tick_cpu_sched); | ||
128 | |||
129 | static inline int tick_nohz_tick_stopped(void) | ||
130 | { | ||
131 | return __this_cpu_read(tick_cpu_sched.tick_stopped); | ||
132 | } | ||
133 | |||
125 | extern void tick_nohz_idle_enter(void); | 134 | extern void tick_nohz_idle_enter(void); |
126 | extern void tick_nohz_idle_exit(void); | 135 | extern void tick_nohz_idle_exit(void); |
127 | extern void tick_nohz_irq_exit(void); | 136 | extern void tick_nohz_irq_exit(void); |
128 | extern ktime_t tick_nohz_get_sleep_length(void); | 137 | extern ktime_t tick_nohz_get_sleep_length(void); |
129 | extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time); | 138 | extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time); |
130 | extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time); | 139 | extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time); |
131 | # else | 140 | |
141 | # else /* !CONFIG_NO_HZ */ | ||
142 | static inline int tick_nohz_tick_stopped(void) | ||
143 | { | ||
144 | return 0; | ||
145 | } | ||
146 | |||
132 | static inline void tick_nohz_idle_enter(void) { } | 147 | static inline void tick_nohz_idle_enter(void) { } |
133 | static inline void tick_nohz_idle_exit(void) { } | 148 | static inline void tick_nohz_idle_exit(void) { } |
134 | 149 | ||
diff --git a/include/linux/time.h b/include/linux/time.h index 4d358e9d10f1..a3ab6a814a9c 100644 --- a/include/linux/time.h +++ b/include/linux/time.h | |||
@@ -115,8 +115,20 @@ static inline bool timespec_valid_strict(const struct timespec *ts) | |||
115 | return true; | 115 | return true; |
116 | } | 116 | } |
117 | 117 | ||
118 | extern bool persistent_clock_exist; | ||
119 | |||
120 | #ifdef ALWAYS_USE_PERSISTENT_CLOCK | ||
121 | #define has_persistent_clock() true | ||
122 | #else | ||
123 | static inline bool has_persistent_clock(void) | ||
124 | { | ||
125 | return persistent_clock_exist; | ||
126 | } | ||
127 | #endif | ||
128 | |||
118 | extern void read_persistent_clock(struct timespec *ts); | 129 | extern void read_persistent_clock(struct timespec *ts); |
119 | extern void read_boot_clock(struct timespec *ts); | 130 | extern void read_boot_clock(struct timespec *ts); |
131 | extern int persistent_clock_is_local; | ||
120 | extern int update_persistent_clock(struct timespec now); | 132 | extern int update_persistent_clock(struct timespec now); |
121 | void timekeeping_init(void); | 133 | void timekeeping_init(void); |
122 | extern int timekeeping_suspended; | 134 | extern int timekeeping_suspended; |
@@ -158,6 +170,7 @@ extern int do_setitimer(int which, struct itimerval *value, | |||
158 | struct itimerval *ovalue); | 170 | struct itimerval *ovalue); |
159 | extern unsigned int alarm_setitimer(unsigned int seconds); | 171 | extern unsigned int alarm_setitimer(unsigned int seconds); |
160 | extern int do_getitimer(int which, struct itimerval *value); | 172 | extern int do_getitimer(int which, struct itimerval *value); |
173 | extern int __getnstimeofday(struct timespec *tv); | ||
161 | extern void getnstimeofday(struct timespec *tv); | 174 | extern void getnstimeofday(struct timespec *tv); |
162 | extern void getrawmonotonic(struct timespec *ts); | 175 | extern void getrawmonotonic(struct timespec *ts); |
163 | extern void getnstime_raw_and_real(struct timespec *ts_raw, | 176 | extern void getnstime_raw_and_real(struct timespec *ts_raw, |
diff --git a/include/linux/tsacct_kern.h b/include/linux/tsacct_kern.h index 44893e5ec8f7..3251965bf4cc 100644 --- a/include/linux/tsacct_kern.h +++ b/include/linux/tsacct_kern.h | |||
@@ -23,12 +23,15 @@ static inline void bacct_add_tsk(struct user_namespace *user_ns, | |||
23 | #ifdef CONFIG_TASK_XACCT | 23 | #ifdef CONFIG_TASK_XACCT |
24 | extern void xacct_add_tsk(struct taskstats *stats, struct task_struct *p); | 24 | extern void xacct_add_tsk(struct taskstats *stats, struct task_struct *p); |
25 | extern void acct_update_integrals(struct task_struct *tsk); | 25 | extern void acct_update_integrals(struct task_struct *tsk); |
26 | extern void acct_account_cputime(struct task_struct *tsk); | ||
26 | extern void acct_clear_integrals(struct task_struct *tsk); | 27 | extern void acct_clear_integrals(struct task_struct *tsk); |
27 | #else | 28 | #else |
28 | static inline void xacct_add_tsk(struct taskstats *stats, struct task_struct *p) | 29 | static inline void xacct_add_tsk(struct taskstats *stats, struct task_struct *p) |
29 | {} | 30 | {} |
30 | static inline void acct_update_integrals(struct task_struct *tsk) | 31 | static inline void acct_update_integrals(struct task_struct *tsk) |
31 | {} | 32 | {} |
33 | static inline void acct_account_cputime(struct task_struct *tsk) | ||
34 | {} | ||
32 | static inline void acct_clear_integrals(struct task_struct *tsk) | 35 | static inline void acct_clear_integrals(struct task_struct *tsk) |
33 | {} | 36 | {} |
34 | #endif /* CONFIG_TASK_XACCT */ | 37 | #endif /* CONFIG_TASK_XACCT */ |
diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h index 4f628a6fc5b4..02b83db8e2c5 100644 --- a/include/linux/uprobes.h +++ b/include/linux/uprobes.h | |||
@@ -35,13 +35,20 @@ struct inode; | |||
35 | # include <asm/uprobes.h> | 35 | # include <asm/uprobes.h> |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | #define UPROBE_HANDLER_REMOVE 1 | ||
39 | #define UPROBE_HANDLER_MASK 1 | ||
40 | |||
41 | enum uprobe_filter_ctx { | ||
42 | UPROBE_FILTER_REGISTER, | ||
43 | UPROBE_FILTER_UNREGISTER, | ||
44 | UPROBE_FILTER_MMAP, | ||
45 | }; | ||
46 | |||
38 | struct uprobe_consumer { | 47 | struct uprobe_consumer { |
39 | int (*handler)(struct uprobe_consumer *self, struct pt_regs *regs); | 48 | int (*handler)(struct uprobe_consumer *self, struct pt_regs *regs); |
40 | /* | 49 | bool (*filter)(struct uprobe_consumer *self, |
41 | * filter is optional; If a filter exists, handler is run | 50 | enum uprobe_filter_ctx ctx, |
42 | * if and only if filter returns true. | 51 | struct mm_struct *mm); |
43 | */ | ||
44 | bool (*filter)(struct uprobe_consumer *self, struct task_struct *task); | ||
45 | 52 | ||
46 | struct uprobe_consumer *next; | 53 | struct uprobe_consumer *next; |
47 | }; | 54 | }; |
@@ -94,6 +101,7 @@ extern int __weak set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsign | |||
94 | extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); | 101 | extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr); |
95 | extern bool __weak is_swbp_insn(uprobe_opcode_t *insn); | 102 | extern bool __weak is_swbp_insn(uprobe_opcode_t *insn); |
96 | extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); | 103 | extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); |
104 | extern int uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool); | ||
97 | extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); | 105 | extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); |
98 | extern int uprobe_mmap(struct vm_area_struct *vma); | 106 | extern int uprobe_mmap(struct vm_area_struct *vma); |
99 | extern void uprobe_munmap(struct vm_area_struct *vma, unsigned long start, unsigned long end); | 107 | extern void uprobe_munmap(struct vm_area_struct *vma, unsigned long start, unsigned long end); |
@@ -117,6 +125,11 @@ uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) | |||
117 | { | 125 | { |
118 | return -ENOSYS; | 126 | return -ENOSYS; |
119 | } | 127 | } |
128 | static inline int | ||
129 | uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool add) | ||
130 | { | ||
131 | return -ENOSYS; | ||
132 | } | ||
120 | static inline void | 133 | static inline void |
121 | uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) | 134 | uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc) |
122 | { | 135 | { |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 689b14b26c8d..4d22d0f6167a 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
@@ -357,6 +357,8 @@ struct usb_bus { | |||
357 | int bandwidth_int_reqs; /* number of Interrupt requests */ | 357 | int bandwidth_int_reqs; /* number of Interrupt requests */ |
358 | int bandwidth_isoc_reqs; /* number of Isoc. requests */ | 358 | int bandwidth_isoc_reqs; /* number of Isoc. requests */ |
359 | 359 | ||
360 | unsigned resuming_ports; /* bit array: resuming root-hub ports */ | ||
361 | |||
360 | #if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE) | 362 | #if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE) |
361 | struct mon_bus *mon_bus; /* non-null when associated */ | 363 | struct mon_bus *mon_bus; /* non-null when associated */ |
362 | int monitored; /* non-zero when monitored */ | 364 | int monitored; /* non-zero when monitored */ |
diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h index 608050b2545f..0a78df5f6cfd 100644 --- a/include/linux/usb/hcd.h +++ b/include/linux/usb/hcd.h | |||
@@ -430,6 +430,9 @@ extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd); | |||
430 | extern void usb_wakeup_notification(struct usb_device *hdev, | 430 | extern void usb_wakeup_notification(struct usb_device *hdev, |
431 | unsigned int portnum); | 431 | unsigned int portnum); |
432 | 432 | ||
433 | extern void usb_hcd_start_port_resume(struct usb_bus *bus, int portnum); | ||
434 | extern void usb_hcd_end_port_resume(struct usb_bus *bus, int portnum); | ||
435 | |||
433 | /* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */ | 436 | /* The D0/D1 toggle bits ... USE WITH CAUTION (they're almost hcd-internal) */ |
434 | #define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1) | 437 | #define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> (ep)) & 1) |
435 | #define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep))) | 438 | #define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << (ep))) |
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h index bd45eb7bedc8..0e5ac93bab10 100644 --- a/include/linux/usb/usbnet.h +++ b/include/linux/usb/usbnet.h | |||
@@ -33,6 +33,7 @@ struct usbnet { | |||
33 | wait_queue_head_t *wait; | 33 | wait_queue_head_t *wait; |
34 | struct mutex phy_mutex; | 34 | struct mutex phy_mutex; |
35 | unsigned char suspend_count; | 35 | unsigned char suspend_count; |
36 | unsigned char pkt_cnt, pkt_err; | ||
36 | 37 | ||
37 | /* i/o info: pipes etc */ | 38 | /* i/o info: pipes etc */ |
38 | unsigned in, out; | 39 | unsigned in, out; |
@@ -70,6 +71,7 @@ struct usbnet { | |||
70 | # define EVENT_DEV_OPEN 7 | 71 | # define EVENT_DEV_OPEN 7 |
71 | # define EVENT_DEVICE_REPORT_IDLE 8 | 72 | # define EVENT_DEVICE_REPORT_IDLE 8 |
72 | # define EVENT_NO_RUNTIME_PM 9 | 73 | # define EVENT_NO_RUNTIME_PM 9 |
74 | # define EVENT_RX_KILL 10 | ||
73 | }; | 75 | }; |
74 | 76 | ||
75 | static inline struct usb_driver *driver_of(struct usb_interface *intf) | 77 | static inline struct usb_driver *driver_of(struct usb_interface *intf) |
@@ -107,6 +109,7 @@ struct driver_info { | |||
107 | */ | 109 | */ |
108 | #define FLAG_MULTI_PACKET 0x2000 | 110 | #define FLAG_MULTI_PACKET 0x2000 |
109 | #define FLAG_RX_ASSEMBLE 0x4000 /* rx packets may span >1 frames */ | 111 | #define FLAG_RX_ASSEMBLE 0x4000 /* rx packets may span >1 frames */ |
112 | #define FLAG_NOARP 0x8000 /* device can't do ARP */ | ||
110 | 113 | ||
111 | /* init device ... can sleep, or cause probe() failure */ | 114 | /* init device ... can sleep, or cause probe() failure */ |
112 | int (*bind)(struct usbnet *, struct usb_interface *); | 115 | int (*bind)(struct usbnet *, struct usb_interface *); |
diff --git a/include/linux/vtime.h b/include/linux/vtime.h index ae30ab58431a..71a5782d8c59 100644 --- a/include/linux/vtime.h +++ b/include/linux/vtime.h | |||
@@ -6,15 +6,46 @@ struct task_struct; | |||
6 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | 6 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING |
7 | extern void vtime_task_switch(struct task_struct *prev); | 7 | extern void vtime_task_switch(struct task_struct *prev); |
8 | extern void vtime_account_system(struct task_struct *tsk); | 8 | extern void vtime_account_system(struct task_struct *tsk); |
9 | extern void vtime_account_system_irqsafe(struct task_struct *tsk); | ||
10 | extern void vtime_account_idle(struct task_struct *tsk); | 9 | extern void vtime_account_idle(struct task_struct *tsk); |
11 | extern void vtime_account_user(struct task_struct *tsk); | 10 | extern void vtime_account_user(struct task_struct *tsk); |
12 | extern void vtime_account(struct task_struct *tsk); | 11 | extern void vtime_account_irq_enter(struct task_struct *tsk); |
13 | #else | 12 | |
13 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE | ||
14 | static inline bool vtime_accounting_enabled(void) { return true; } | ||
15 | #endif | ||
16 | |||
17 | #else /* !CONFIG_VIRT_CPU_ACCOUNTING */ | ||
18 | |||
14 | static inline void vtime_task_switch(struct task_struct *prev) { } | 19 | static inline void vtime_task_switch(struct task_struct *prev) { } |
15 | static inline void vtime_account_system(struct task_struct *tsk) { } | 20 | static inline void vtime_account_system(struct task_struct *tsk) { } |
16 | static inline void vtime_account_system_irqsafe(struct task_struct *tsk) { } | 21 | static inline void vtime_account_user(struct task_struct *tsk) { } |
17 | static inline void vtime_account(struct task_struct *tsk) { } | 22 | static inline void vtime_account_irq_enter(struct task_struct *tsk) { } |
23 | static inline bool vtime_accounting_enabled(void) { return false; } | ||
24 | #endif | ||
25 | |||
26 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN | ||
27 | extern void arch_vtime_task_switch(struct task_struct *tsk); | ||
28 | extern void vtime_account_irq_exit(struct task_struct *tsk); | ||
29 | extern bool vtime_accounting_enabled(void); | ||
30 | extern void vtime_user_enter(struct task_struct *tsk); | ||
31 | static inline void vtime_user_exit(struct task_struct *tsk) | ||
32 | { | ||
33 | vtime_account_user(tsk); | ||
34 | } | ||
35 | extern void vtime_guest_enter(struct task_struct *tsk); | ||
36 | extern void vtime_guest_exit(struct task_struct *tsk); | ||
37 | extern void vtime_init_idle(struct task_struct *tsk); | ||
38 | #else | ||
39 | static inline void vtime_account_irq_exit(struct task_struct *tsk) | ||
40 | { | ||
41 | /* On hard|softirq exit we always account to hard|softirq cputime */ | ||
42 | vtime_account_system(tsk); | ||
43 | } | ||
44 | static inline void vtime_user_enter(struct task_struct *tsk) { } | ||
45 | static inline void vtime_user_exit(struct task_struct *tsk) { } | ||
46 | static inline void vtime_guest_enter(struct task_struct *tsk) { } | ||
47 | static inline void vtime_guest_exit(struct task_struct *tsk) { } | ||
48 | static inline void vtime_init_idle(struct task_struct *tsk) { } | ||
18 | #endif | 49 | #endif |
19 | 50 | ||
20 | #ifdef CONFIG_IRQ_TIME_ACCOUNTING | 51 | #ifdef CONFIG_IRQ_TIME_ACCOUNTING |
@@ -23,25 +54,15 @@ extern void irqtime_account_irq(struct task_struct *tsk); | |||
23 | static inline void irqtime_account_irq(struct task_struct *tsk) { } | 54 | static inline void irqtime_account_irq(struct task_struct *tsk) { } |
24 | #endif | 55 | #endif |
25 | 56 | ||
26 | static inline void vtime_account_irq_enter(struct task_struct *tsk) | 57 | static inline void account_irq_enter_time(struct task_struct *tsk) |
27 | { | 58 | { |
28 | /* | 59 | vtime_account_irq_enter(tsk); |
29 | * Hardirq can interrupt idle task anytime. So we need vtime_account() | ||
30 | * that performs the idle check in CONFIG_VIRT_CPU_ACCOUNTING. | ||
31 | * Softirq can also interrupt idle task directly if it calls | ||
32 | * local_bh_enable(). Such case probably don't exist but we never know. | ||
33 | * Ksoftirqd is not concerned because idle time is flushed on context | ||
34 | * switch. Softirqs in the end of hardirqs are also not a problem because | ||
35 | * the idle time is flushed on hardirq time already. | ||
36 | */ | ||
37 | vtime_account(tsk); | ||
38 | irqtime_account_irq(tsk); | 60 | irqtime_account_irq(tsk); |
39 | } | 61 | } |
40 | 62 | ||
41 | static inline void vtime_account_irq_exit(struct task_struct *tsk) | 63 | static inline void account_irq_exit_time(struct task_struct *tsk) |
42 | { | 64 | { |
43 | /* On hard|softirq exit we always account to hard|softirq cputime */ | 65 | vtime_account_irq_exit(tsk); |
44 | vtime_account_system(tsk); | ||
45 | irqtime_account_irq(tsk); | 66 | irqtime_account_irq(tsk); |
46 | } | 67 | } |
47 | 68 | ||
diff --git a/include/net/ip.h b/include/net/ip.h index 0707fb9551aa..a68f838a132c 100644 --- a/include/net/ip.h +++ b/include/net/ip.h | |||
@@ -143,6 +143,8 @@ static inline struct sk_buff *ip_finish_skb(struct sock *sk, struct flowi4 *fl4) | |||
143 | extern int ip4_datagram_connect(struct sock *sk, | 143 | extern int ip4_datagram_connect(struct sock *sk, |
144 | struct sockaddr *uaddr, int addr_len); | 144 | struct sockaddr *uaddr, int addr_len); |
145 | 145 | ||
146 | extern void ip4_datagram_release_cb(struct sock *sk); | ||
147 | |||
146 | struct ip_reply_arg { | 148 | struct ip_reply_arg { |
147 | struct kvec iov[1]; | 149 | struct kvec iov[1]; |
148 | int flags; | 150 | int flags; |
diff --git a/include/net/netfilter/nf_conntrack_core.h b/include/net/netfilter/nf_conntrack_core.h index d8f5b9f52169..e98aeb3da033 100644 --- a/include/net/netfilter/nf_conntrack_core.h +++ b/include/net/netfilter/nf_conntrack_core.h | |||
@@ -31,6 +31,8 @@ extern void nf_conntrack_cleanup(struct net *net); | |||
31 | extern int nf_conntrack_proto_init(struct net *net); | 31 | extern int nf_conntrack_proto_init(struct net *net); |
32 | extern void nf_conntrack_proto_fini(struct net *net); | 32 | extern void nf_conntrack_proto_fini(struct net *net); |
33 | 33 | ||
34 | extern void nf_conntrack_cleanup_end(void); | ||
35 | |||
34 | extern bool | 36 | extern bool |
35 | nf_ct_get_tuple(const struct sk_buff *skb, | 37 | nf_ct_get_tuple(const struct sk_buff *skb, |
36 | unsigned int nhoff, | 38 | unsigned int nhoff, |
diff --git a/include/net/transp_v6.h b/include/net/transp_v6.h index 498433dd067d..938b7fd11204 100644 --- a/include/net/transp_v6.h +++ b/include/net/transp_v6.h | |||
@@ -34,17 +34,17 @@ extern int udpv6_connect(struct sock *sk, | |||
34 | struct sockaddr *uaddr, | 34 | struct sockaddr *uaddr, |
35 | int addr_len); | 35 | int addr_len); |
36 | 36 | ||
37 | extern int datagram_recv_ctl(struct sock *sk, | 37 | extern int ip6_datagram_recv_ctl(struct sock *sk, |
38 | struct msghdr *msg, | 38 | struct msghdr *msg, |
39 | struct sk_buff *skb); | 39 | struct sk_buff *skb); |
40 | 40 | ||
41 | extern int datagram_send_ctl(struct net *net, | 41 | extern int ip6_datagram_send_ctl(struct net *net, |
42 | struct sock *sk, | 42 | struct sock *sk, |
43 | struct msghdr *msg, | 43 | struct msghdr *msg, |
44 | struct flowi6 *fl6, | 44 | struct flowi6 *fl6, |
45 | struct ipv6_txoptions *opt, | 45 | struct ipv6_txoptions *opt, |
46 | int *hlimit, int *tclass, | 46 | int *hlimit, int *tclass, |
47 | int *dontfrag); | 47 | int *dontfrag); |
48 | 48 | ||
49 | #define LOOPBACK4_IPV6 cpu_to_be32(0x7f000006) | 49 | #define LOOPBACK4_IPV6 cpu_to_be32(0x7f000006) |
50 | 50 | ||
diff --git a/include/trace/events/ras.h b/include/trace/events/ras.h new file mode 100644 index 000000000000..88b878383797 --- /dev/null +++ b/include/trace/events/ras.h | |||
@@ -0,0 +1,77 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM ras | ||
3 | |||
4 | #if !defined(_TRACE_AER_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_AER_H | ||
6 | |||
7 | #include <linux/tracepoint.h> | ||
8 | #include <linux/edac.h> | ||
9 | |||
10 | |||
11 | /* | ||
12 | * PCIe AER Trace event | ||
13 | * | ||
14 | * These events are generated when hardware detects a corrected or | ||
15 | * uncorrected event on a PCIe device. The event report has | ||
16 | * the following structure: | ||
17 | * | ||
18 | * char * dev_name - The name of the slot where the device resides | ||
19 | * ([domain:]bus:device.function). | ||
20 | * u32 status - Either the correctable or uncorrectable register | ||
21 | * indicating what error or errors have been seen | ||
22 | * u8 severity - error severity 0:NONFATAL 1:FATAL 2:CORRECTED | ||
23 | */ | ||
24 | |||
25 | #define aer_correctable_errors \ | ||
26 | {BIT(0), "Receiver Error"}, \ | ||
27 | {BIT(6), "Bad TLP"}, \ | ||
28 | {BIT(7), "Bad DLLP"}, \ | ||
29 | {BIT(8), "RELAY_NUM Rollover"}, \ | ||
30 | {BIT(12), "Replay Timer Timeout"}, \ | ||
31 | {BIT(13), "Advisory Non-Fatal"} | ||
32 | |||
33 | #define aer_uncorrectable_errors \ | ||
34 | {BIT(4), "Data Link Protocol"}, \ | ||
35 | {BIT(12), "Poisoned TLP"}, \ | ||
36 | {BIT(13), "Flow Control Protocol"}, \ | ||
37 | {BIT(14), "Completion Timeout"}, \ | ||
38 | {BIT(15), "Completer Abort"}, \ | ||
39 | {BIT(16), "Unexpected Completion"}, \ | ||
40 | {BIT(17), "Receiver Overflow"}, \ | ||
41 | {BIT(18), "Malformed TLP"}, \ | ||
42 | {BIT(19), "ECRC"}, \ | ||
43 | {BIT(20), "Unsupported Request"} | ||
44 | |||
45 | TRACE_EVENT(aer_event, | ||
46 | TP_PROTO(const char *dev_name, | ||
47 | const u32 status, | ||
48 | const u8 severity), | ||
49 | |||
50 | TP_ARGS(dev_name, status, severity), | ||
51 | |||
52 | TP_STRUCT__entry( | ||
53 | __string( dev_name, dev_name ) | ||
54 | __field( u32, status ) | ||
55 | __field( u8, severity ) | ||
56 | ), | ||
57 | |||
58 | TP_fast_assign( | ||
59 | __assign_str(dev_name, dev_name); | ||
60 | __entry->status = status; | ||
61 | __entry->severity = severity; | ||
62 | ), | ||
63 | |||
64 | TP_printk("%s PCIe Bus Error: severity=%s, %s\n", | ||
65 | __get_str(dev_name), | ||
66 | __entry->severity == HW_EVENT_ERR_CORRECTED ? "Corrected" : | ||
67 | __entry->severity == HW_EVENT_ERR_FATAL ? | ||
68 | "Fatal" : "Uncorrected", | ||
69 | __entry->severity == HW_EVENT_ERR_CORRECTED ? | ||
70 | __print_flags(__entry->status, "|", aer_correctable_errors) : | ||
71 | __print_flags(__entry->status, "|", aer_uncorrectable_errors)) | ||
72 | ); | ||
73 | |||
74 | #endif /* _TRACE_AER_H */ | ||
75 | |||
76 | /* This part must be outside protection */ | ||
77 | #include <trace/define_trace.h> | ||
diff --git a/include/trace/events/rcu.h b/include/trace/events/rcu.h index d4f559b1ec34..1918e832da4f 100644 --- a/include/trace/events/rcu.h +++ b/include/trace/events/rcu.h | |||
@@ -44,8 +44,10 @@ TRACE_EVENT(rcu_utilization, | |||
44 | * of a new grace period or the end of an old grace period ("cpustart" | 44 | * of a new grace period or the end of an old grace period ("cpustart" |
45 | * and "cpuend", respectively), a CPU passing through a quiescent | 45 | * and "cpuend", respectively), a CPU passing through a quiescent |
46 | * state ("cpuqs"), a CPU coming online or going offline ("cpuonl" | 46 | * state ("cpuqs"), a CPU coming online or going offline ("cpuonl" |
47 | * and "cpuofl", respectively), and a CPU being kicked for being too | 47 | * and "cpuofl", respectively), a CPU being kicked for being too |
48 | * long in dyntick-idle mode ("kick"). | 48 | * long in dyntick-idle mode ("kick"), a CPU accelerating its new |
49 | * callbacks to RCU_NEXT_READY_TAIL ("AccReadyCB"), and a CPU | ||
50 | * accelerating its new callbacks to RCU_WAIT_TAIL ("AccWaitCB"). | ||
49 | */ | 51 | */ |
50 | TRACE_EVENT(rcu_grace_period, | 52 | TRACE_EVENT(rcu_grace_period, |
51 | 53 | ||
@@ -393,7 +395,7 @@ TRACE_EVENT(rcu_kfree_callback, | |||
393 | */ | 395 | */ |
394 | TRACE_EVENT(rcu_batch_start, | 396 | TRACE_EVENT(rcu_batch_start, |
395 | 397 | ||
396 | TP_PROTO(char *rcuname, long qlen_lazy, long qlen, int blimit), | 398 | TP_PROTO(char *rcuname, long qlen_lazy, long qlen, long blimit), |
397 | 399 | ||
398 | TP_ARGS(rcuname, qlen_lazy, qlen, blimit), | 400 | TP_ARGS(rcuname, qlen_lazy, qlen, blimit), |
399 | 401 | ||
@@ -401,7 +403,7 @@ TRACE_EVENT(rcu_batch_start, | |||
401 | __field(char *, rcuname) | 403 | __field(char *, rcuname) |
402 | __field(long, qlen_lazy) | 404 | __field(long, qlen_lazy) |
403 | __field(long, qlen) | 405 | __field(long, qlen) |
404 | __field(int, blimit) | 406 | __field(long, blimit) |
405 | ), | 407 | ), |
406 | 408 | ||
407 | TP_fast_assign( | 409 | TP_fast_assign( |
@@ -411,7 +413,7 @@ TRACE_EVENT(rcu_batch_start, | |||
411 | __entry->blimit = blimit; | 413 | __entry->blimit = blimit; |
412 | ), | 414 | ), |
413 | 415 | ||
414 | TP_printk("%s CBs=%ld/%ld bl=%d", | 416 | TP_printk("%s CBs=%ld/%ld bl=%ld", |
415 | __entry->rcuname, __entry->qlen_lazy, __entry->qlen, | 417 | __entry->rcuname, __entry->qlen_lazy, __entry->qlen, |
416 | __entry->blimit) | 418 | __entry->blimit) |
417 | ); | 419 | ); |
@@ -523,22 +525,30 @@ TRACE_EVENT(rcu_batch_end, | |||
523 | */ | 525 | */ |
524 | TRACE_EVENT(rcu_torture_read, | 526 | TRACE_EVENT(rcu_torture_read, |
525 | 527 | ||
526 | TP_PROTO(char *rcutorturename, struct rcu_head *rhp), | 528 | TP_PROTO(char *rcutorturename, struct rcu_head *rhp, |
529 | unsigned long secs, unsigned long c_old, unsigned long c), | ||
527 | 530 | ||
528 | TP_ARGS(rcutorturename, rhp), | 531 | TP_ARGS(rcutorturename, rhp, secs, c_old, c), |
529 | 532 | ||
530 | TP_STRUCT__entry( | 533 | TP_STRUCT__entry( |
531 | __field(char *, rcutorturename) | 534 | __field(char *, rcutorturename) |
532 | __field(struct rcu_head *, rhp) | 535 | __field(struct rcu_head *, rhp) |
536 | __field(unsigned long, secs) | ||
537 | __field(unsigned long, c_old) | ||
538 | __field(unsigned long, c) | ||
533 | ), | 539 | ), |
534 | 540 | ||
535 | TP_fast_assign( | 541 | TP_fast_assign( |
536 | __entry->rcutorturename = rcutorturename; | 542 | __entry->rcutorturename = rcutorturename; |
537 | __entry->rhp = rhp; | 543 | __entry->rhp = rhp; |
544 | __entry->secs = secs; | ||
545 | __entry->c_old = c_old; | ||
546 | __entry->c = c; | ||
538 | ), | 547 | ), |
539 | 548 | ||
540 | TP_printk("%s torture read %p", | 549 | TP_printk("%s torture read %p %luus c: %lu %lu", |
541 | __entry->rcutorturename, __entry->rhp) | 550 | __entry->rcutorturename, __entry->rhp, |
551 | __entry->secs, __entry->c_old, __entry->c) | ||
542 | ); | 552 | ); |
543 | 553 | ||
544 | /* | 554 | /* |
@@ -608,7 +618,8 @@ TRACE_EVENT(rcu_barrier, | |||
608 | #define trace_rcu_invoke_kfree_callback(rcuname, rhp, offset) do { } while (0) | 618 | #define trace_rcu_invoke_kfree_callback(rcuname, rhp, offset) do { } while (0) |
609 | #define trace_rcu_batch_end(rcuname, callbacks_invoked, cb, nr, iit, risk) \ | 619 | #define trace_rcu_batch_end(rcuname, callbacks_invoked, cb, nr, iit, risk) \ |
610 | do { } while (0) | 620 | do { } while (0) |
611 | #define trace_rcu_torture_read(rcutorturename, rhp) do { } while (0) | 621 | #define trace_rcu_torture_read(rcutorturename, rhp, secs, c_old, c) \ |
622 | do { } while (0) | ||
612 | #define trace_rcu_barrier(name, s, cpu, cnt, done) do { } while (0) | 623 | #define trace_rcu_barrier(name, s, cpu, cnt, done) do { } while (0) |
613 | 624 | ||
614 | #endif /* #else #ifdef CONFIG_RCU_TRACE */ | 625 | #endif /* #else #ifdef CONFIG_RCU_TRACE */ |
diff --git a/include/uapi/linux/auto_fs.h b/include/uapi/linux/auto_fs.h index 77cdba9df274..bb991dfe134f 100644 --- a/include/uapi/linux/auto_fs.h +++ b/include/uapi/linux/auto_fs.h | |||
@@ -28,25 +28,16 @@ | |||
28 | #define AUTOFS_MIN_PROTO_VERSION AUTOFS_PROTO_VERSION | 28 | #define AUTOFS_MIN_PROTO_VERSION AUTOFS_PROTO_VERSION |
29 | 29 | ||
30 | /* | 30 | /* |
31 | * Architectures where both 32- and 64-bit binaries can be executed | 31 | * The wait_queue_token (autofs_wqt_t) is part of a structure which is passed |
32 | * on 64-bit kernels need this. This keeps the structure format | 32 | * back to the kernel via ioctl from userspace. On architectures where 32- and |
33 | * uniform, and makes sure the wait_queue_token isn't too big to be | 33 | * 64-bit userspace binaries can be executed it's important that the size of |
34 | * passed back down to the kernel. | 34 | * autofs_wqt_t stays constant between 32- and 64-bit Linux kernels so that we |
35 | * | 35 | * do not break the binary ABI interface by changing the structure size. |
36 | * This assumes that on these architectures: | ||
37 | * mode 32 bit 64 bit | ||
38 | * ------------------------- | ||
39 | * int 32 bit 32 bit | ||
40 | * long 32 bit 64 bit | ||
41 | * | ||
42 | * If so, 32-bit user-space code should be backwards compatible. | ||
43 | */ | 36 | */ |
44 | 37 | #if defined(__ia64__) || defined(__alpha__) /* pure 64bit architectures */ | |
45 | #if defined(__sparc__) || defined(__mips__) || defined(__x86_64__) \ | ||
46 | || defined(__powerpc__) || defined(__s390__) | ||
47 | typedef unsigned int autofs_wqt_t; | ||
48 | #else | ||
49 | typedef unsigned long autofs_wqt_t; | 38 | typedef unsigned long autofs_wqt_t; |
39 | #else | ||
40 | typedef unsigned int autofs_wqt_t; | ||
50 | #endif | 41 | #endif |
51 | 42 | ||
52 | /* Packet types */ | 43 | /* Packet types */ |
diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h index 4f63c05d27c9..9fa9c622a7f4 100644 --- a/include/uapi/linux/perf_event.h +++ b/include/uapi/linux/perf_event.h | |||
@@ -579,7 +579,8 @@ enum perf_event_type { | |||
579 | * { u32 size; | 579 | * { u32 size; |
580 | * char data[size];}&& PERF_SAMPLE_RAW | 580 | * char data[size];}&& PERF_SAMPLE_RAW |
581 | * | 581 | * |
582 | * { u64 from, to, flags } lbr[nr];} && PERF_SAMPLE_BRANCH_STACK | 582 | * { u64 nr; |
583 | * { u64 from, to, flags } lbr[nr];} && PERF_SAMPLE_BRANCH_STACK | ||
583 | * | 584 | * |
584 | * { u64 abi; # enum perf_sample_regs_abi | 585 | * { u64 abi; # enum perf_sample_regs_abi |
585 | * u64 regs[weight(mask)]; } && PERF_SAMPLE_REGS_USER | 586 | * u64 regs[weight(mask)]; } && PERF_SAMPLE_REGS_USER |
diff --git a/include/uapi/linux/usb/ch9.h b/include/uapi/linux/usb/ch9.h index 50598472dc41..f738e25377ff 100644 --- a/include/uapi/linux/usb/ch9.h +++ b/include/uapi/linux/usb/ch9.h | |||
@@ -152,6 +152,12 @@ | |||
152 | #define USB_INTRF_FUNC_SUSPEND_LP (1 << (8 + 0)) | 152 | #define USB_INTRF_FUNC_SUSPEND_LP (1 << (8 + 0)) |
153 | #define USB_INTRF_FUNC_SUSPEND_RW (1 << (8 + 1)) | 153 | #define USB_INTRF_FUNC_SUSPEND_RW (1 << (8 + 1)) |
154 | 154 | ||
155 | /* | ||
156 | * Interface status, Figure 9-5 USB 3.0 spec | ||
157 | */ | ||
158 | #define USB_INTRF_STAT_FUNC_RW_CAP 1 | ||
159 | #define USB_INTRF_STAT_FUNC_RW 2 | ||
160 | |||
155 | #define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */ | 161 | #define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */ |
156 | 162 | ||
157 | /* Bit array elements as returned by the USB_REQ_GET_STATUS request. */ | 163 | /* Bit array elements as returned by the USB_REQ_GET_STATUS request. */ |