diff options
33 files changed, 103 insertions, 76 deletions
diff --git a/Documentation/slow-work.txt b/Documentation/slow-work.txt index 52bc31433723..9dbf4470c7e1 100644 --- a/Documentation/slow-work.txt +++ b/Documentation/slow-work.txt | |||
@@ -279,9 +279,9 @@ The slow-work thread pool has a number of configurables: | |||
279 | VIEWING EXECUTING AND QUEUED ITEMS | 279 | VIEWING EXECUTING AND QUEUED ITEMS |
280 | ================================== | 280 | ================================== |
281 | 281 | ||
282 | If CONFIG_SLOW_WORK_PROC is enabled, a proc file is made available: | 282 | If CONFIG_SLOW_WORK_DEBUG is enabled, a debugfs file is made available: |
283 | 283 | ||
284 | /proc/slow_work_rq | 284 | /sys/kernel/debug/slow_work/runqueue |
285 | 285 | ||
286 | through which the list of work items being executed and the queues of items to | 286 | through which the list of work items being executed and the queues of items to |
287 | be executed may be viewed. The owner of a work item is given the chance to | 287 | be executed may be viewed. The owner of a work item is given the chance to |
diff --git a/arch/alpha/include/asm/thread_info.h b/arch/alpha/include/asm/thread_info.h index 815680b585ed..b3e888638bb7 100644 --- a/arch/alpha/include/asm/thread_info.h +++ b/arch/alpha/include/asm/thread_info.h | |||
@@ -61,21 +61,24 @@ register struct thread_info *__current_thread_info __asm__("$8"); | |||
61 | /* | 61 | /* |
62 | * Thread information flags: | 62 | * Thread information flags: |
63 | * - these are process state flags and used from assembly | 63 | * - these are process state flags and used from assembly |
64 | * - pending work-to-be-done flags come first to fit in and immediate operand. | 64 | * - pending work-to-be-done flags come first and must be assigned to be |
65 | * within bits 0 to 7 to fit in and immediate operand. | ||
66 | * - ALPHA_UAC_SHIFT below must be kept consistent with the unaligned | ||
67 | * control flags. | ||
65 | * | 68 | * |
66 | * TIF_SYSCALL_TRACE is known to be 0 via blbs. | 69 | * TIF_SYSCALL_TRACE is known to be 0 via blbs. |
67 | */ | 70 | */ |
68 | #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ | 71 | #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ |
69 | #define TIF_SIGPENDING 1 /* signal pending */ | 72 | #define TIF_NOTIFY_RESUME 1 /* callback before returning to user */ |
70 | #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ | 73 | #define TIF_SIGPENDING 2 /* signal pending */ |
71 | #define TIF_POLLING_NRFLAG 3 /* poll_idle is polling NEED_RESCHED */ | 74 | #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ |
72 | #define TIF_DIE_IF_KERNEL 4 /* dik recursion lock */ | 75 | #define TIF_POLLING_NRFLAG 8 /* poll_idle is polling NEED_RESCHED */ |
73 | #define TIF_UAC_NOPRINT 5 /* see sysinfo.h */ | 76 | #define TIF_DIE_IF_KERNEL 9 /* dik recursion lock */ |
74 | #define TIF_UAC_NOFIX 6 | 77 | #define TIF_UAC_NOPRINT 10 /* see sysinfo.h */ |
75 | #define TIF_UAC_SIGBUS 7 | 78 | #define TIF_UAC_NOFIX 11 |
76 | #define TIF_MEMDIE 8 | 79 | #define TIF_UAC_SIGBUS 12 |
77 | #define TIF_RESTORE_SIGMASK 9 /* restore signal mask in do_signal */ | 80 | #define TIF_MEMDIE 13 |
78 | #define TIF_NOTIFY_RESUME 10 /* callback before returning to user */ | 81 | #define TIF_RESTORE_SIGMASK 14 /* restore signal mask in do_signal */ |
79 | #define TIF_FREEZE 16 /* is freezing for suspend */ | 82 | #define TIF_FREEZE 16 /* is freezing for suspend */ |
80 | 83 | ||
81 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) | 84 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) |
@@ -94,7 +97,7 @@ register struct thread_info *__current_thread_info __asm__("$8"); | |||
94 | #define _TIF_ALLWORK_MASK (_TIF_WORK_MASK \ | 97 | #define _TIF_ALLWORK_MASK (_TIF_WORK_MASK \ |
95 | | _TIF_SYSCALL_TRACE) | 98 | | _TIF_SYSCALL_TRACE) |
96 | 99 | ||
97 | #define ALPHA_UAC_SHIFT 6 | 100 | #define ALPHA_UAC_SHIFT 10 |
98 | #define ALPHA_UAC_MASK (1 << TIF_UAC_NOPRINT | 1 << TIF_UAC_NOFIX | \ | 101 | #define ALPHA_UAC_MASK (1 << TIF_UAC_NOPRINT | 1 << TIF_UAC_NOFIX | \ |
99 | 1 << TIF_UAC_SIGBUS) | 102 | 1 << TIF_UAC_SIGBUS) |
100 | 103 | ||
diff --git a/arch/alpha/kernel/core_marvel.c b/arch/alpha/kernel/core_marvel.c index 8e059e58b0ac..53dd2f1a53aa 100644 --- a/arch/alpha/kernel/core_marvel.c +++ b/arch/alpha/kernel/core_marvel.c | |||
@@ -1103,6 +1103,8 @@ marvel_agp_info(void) | |||
1103 | * Allocate the info structure. | 1103 | * Allocate the info structure. |
1104 | */ | 1104 | */ |
1105 | agp = kmalloc(sizeof(*agp), GFP_KERNEL); | 1105 | agp = kmalloc(sizeof(*agp), GFP_KERNEL); |
1106 | if (!agp) | ||
1107 | return NULL; | ||
1106 | 1108 | ||
1107 | /* | 1109 | /* |
1108 | * Fill it in. | 1110 | * Fill it in. |
diff --git a/arch/alpha/kernel/core_titan.c b/arch/alpha/kernel/core_titan.c index 76686497b1e2..219bf271c0ba 100644 --- a/arch/alpha/kernel/core_titan.c +++ b/arch/alpha/kernel/core_titan.c | |||
@@ -757,6 +757,8 @@ titan_agp_info(void) | |||
757 | * Allocate the info structure. | 757 | * Allocate the info structure. |
758 | */ | 758 | */ |
759 | agp = kmalloc(sizeof(*agp), GFP_KERNEL); | 759 | agp = kmalloc(sizeof(*agp), GFP_KERNEL); |
760 | if (!agp) | ||
761 | return NULL; | ||
760 | 762 | ||
761 | /* | 763 | /* |
762 | * Fill it in. | 764 | * Fill it in. |
diff --git a/arch/alpha/kernel/irq.c b/arch/alpha/kernel/irq.c index cc7834661427..c0de072b8305 100644 --- a/arch/alpha/kernel/irq.c +++ b/arch/alpha/kernel/irq.c | |||
@@ -92,7 +92,7 @@ show_interrupts(struct seq_file *p, void *v) | |||
92 | for_each_online_cpu(j) | 92 | for_each_online_cpu(j) |
93 | seq_printf(p, "%10u ", kstat_irqs_cpu(irq, j)); | 93 | seq_printf(p, "%10u ", kstat_irqs_cpu(irq, j)); |
94 | #endif | 94 | #endif |
95 | seq_printf(p, " %14s", irq_desc[irq].chip->typename); | 95 | seq_printf(p, " %14s", irq_desc[irq].chip->name); |
96 | seq_printf(p, " %c%s", | 96 | seq_printf(p, " %c%s", |
97 | (action->flags & IRQF_DISABLED)?'+':' ', | 97 | (action->flags & IRQF_DISABLED)?'+':' ', |
98 | action->name); | 98 | action->name); |
diff --git a/arch/alpha/kernel/irq_alpha.c b/arch/alpha/kernel/irq_alpha.c index 38c805dfc544..cfde865b78e0 100644 --- a/arch/alpha/kernel/irq_alpha.c +++ b/arch/alpha/kernel/irq_alpha.c | |||
@@ -228,7 +228,7 @@ struct irqaction timer_irqaction = { | |||
228 | }; | 228 | }; |
229 | 229 | ||
230 | static struct irq_chip rtc_irq_type = { | 230 | static struct irq_chip rtc_irq_type = { |
231 | .typename = "RTC", | 231 | .name = "RTC", |
232 | .startup = rtc_startup, | 232 | .startup = rtc_startup, |
233 | .shutdown = rtc_enable_disable, | 233 | .shutdown = rtc_enable_disable, |
234 | .enable = rtc_enable_disable, | 234 | .enable = rtc_enable_disable, |
diff --git a/arch/alpha/kernel/irq_i8259.c b/arch/alpha/kernel/irq_i8259.c index 50bfec9b588f..83a9ac280890 100644 --- a/arch/alpha/kernel/irq_i8259.c +++ b/arch/alpha/kernel/irq_i8259.c | |||
@@ -84,7 +84,7 @@ i8259a_end_irq(unsigned int irq) | |||
84 | } | 84 | } |
85 | 85 | ||
86 | struct irq_chip i8259a_irq_type = { | 86 | struct irq_chip i8259a_irq_type = { |
87 | .typename = "XT-PIC", | 87 | .name = "XT-PIC", |
88 | .startup = i8259a_startup_irq, | 88 | .startup = i8259a_startup_irq, |
89 | .shutdown = i8259a_disable_irq, | 89 | .shutdown = i8259a_disable_irq, |
90 | .enable = i8259a_enable_irq, | 90 | .enable = i8259a_enable_irq, |
diff --git a/arch/alpha/kernel/irq_pyxis.c b/arch/alpha/kernel/irq_pyxis.c index 69199a76ec4a..989ce46a0cf3 100644 --- a/arch/alpha/kernel/irq_pyxis.c +++ b/arch/alpha/kernel/irq_pyxis.c | |||
@@ -71,7 +71,7 @@ pyxis_mask_and_ack_irq(unsigned int irq) | |||
71 | } | 71 | } |
72 | 72 | ||
73 | static struct irq_chip pyxis_irq_type = { | 73 | static struct irq_chip pyxis_irq_type = { |
74 | .typename = "PYXIS", | 74 | .name = "PYXIS", |
75 | .startup = pyxis_startup_irq, | 75 | .startup = pyxis_startup_irq, |
76 | .shutdown = pyxis_disable_irq, | 76 | .shutdown = pyxis_disable_irq, |
77 | .enable = pyxis_enable_irq, | 77 | .enable = pyxis_enable_irq, |
diff --git a/arch/alpha/kernel/irq_srm.c b/arch/alpha/kernel/irq_srm.c index 85229369a1f8..d63e93e1e8bf 100644 --- a/arch/alpha/kernel/irq_srm.c +++ b/arch/alpha/kernel/irq_srm.c | |||
@@ -49,7 +49,7 @@ srm_end_irq(unsigned int irq) | |||
49 | 49 | ||
50 | /* Handle interrupts from the SRM, assuming no additional weirdness. */ | 50 | /* Handle interrupts from the SRM, assuming no additional weirdness. */ |
51 | static struct irq_chip srm_irq_type = { | 51 | static struct irq_chip srm_irq_type = { |
52 | .typename = "SRM", | 52 | .name = "SRM", |
53 | .startup = srm_startup_irq, | 53 | .startup = srm_startup_irq, |
54 | .shutdown = srm_disable_irq, | 54 | .shutdown = srm_disable_irq, |
55 | .enable = srm_enable_irq, | 55 | .enable = srm_enable_irq, |
diff --git a/arch/alpha/kernel/sys_alcor.c b/arch/alpha/kernel/sys_alcor.c index 382035ef7394..20a30b8b9655 100644 --- a/arch/alpha/kernel/sys_alcor.c +++ b/arch/alpha/kernel/sys_alcor.c | |||
@@ -90,7 +90,7 @@ alcor_end_irq(unsigned int irq) | |||
90 | } | 90 | } |
91 | 91 | ||
92 | static struct irq_chip alcor_irq_type = { | 92 | static struct irq_chip alcor_irq_type = { |
93 | .typename = "ALCOR", | 93 | .name = "ALCOR", |
94 | .startup = alcor_startup_irq, | 94 | .startup = alcor_startup_irq, |
95 | .shutdown = alcor_disable_irq, | 95 | .shutdown = alcor_disable_irq, |
96 | .enable = alcor_enable_irq, | 96 | .enable = alcor_enable_irq, |
diff --git a/arch/alpha/kernel/sys_cabriolet.c b/arch/alpha/kernel/sys_cabriolet.c index ed349436732b..affd0f3f25df 100644 --- a/arch/alpha/kernel/sys_cabriolet.c +++ b/arch/alpha/kernel/sys_cabriolet.c | |||
@@ -72,7 +72,7 @@ cabriolet_end_irq(unsigned int irq) | |||
72 | } | 72 | } |
73 | 73 | ||
74 | static struct irq_chip cabriolet_irq_type = { | 74 | static struct irq_chip cabriolet_irq_type = { |
75 | .typename = "CABRIOLET", | 75 | .name = "CABRIOLET", |
76 | .startup = cabriolet_startup_irq, | 76 | .startup = cabriolet_startup_irq, |
77 | .shutdown = cabriolet_disable_irq, | 77 | .shutdown = cabriolet_disable_irq, |
78 | .enable = cabriolet_enable_irq, | 78 | .enable = cabriolet_enable_irq, |
diff --git a/arch/alpha/kernel/sys_dp264.c b/arch/alpha/kernel/sys_dp264.c index 46e70ece5176..d64e1e497e76 100644 --- a/arch/alpha/kernel/sys_dp264.c +++ b/arch/alpha/kernel/sys_dp264.c | |||
@@ -199,7 +199,7 @@ clipper_set_affinity(unsigned int irq, const struct cpumask *affinity) | |||
199 | } | 199 | } |
200 | 200 | ||
201 | static struct irq_chip dp264_irq_type = { | 201 | static struct irq_chip dp264_irq_type = { |
202 | .typename = "DP264", | 202 | .name = "DP264", |
203 | .startup = dp264_startup_irq, | 203 | .startup = dp264_startup_irq, |
204 | .shutdown = dp264_disable_irq, | 204 | .shutdown = dp264_disable_irq, |
205 | .enable = dp264_enable_irq, | 205 | .enable = dp264_enable_irq, |
@@ -210,7 +210,7 @@ static struct irq_chip dp264_irq_type = { | |||
210 | }; | 210 | }; |
211 | 211 | ||
212 | static struct irq_chip clipper_irq_type = { | 212 | static struct irq_chip clipper_irq_type = { |
213 | .typename = "CLIPPER", | 213 | .name = "CLIPPER", |
214 | .startup = clipper_startup_irq, | 214 | .startup = clipper_startup_irq, |
215 | .shutdown = clipper_disable_irq, | 215 | .shutdown = clipper_disable_irq, |
216 | .enable = clipper_enable_irq, | 216 | .enable = clipper_enable_irq, |
diff --git a/arch/alpha/kernel/sys_eb64p.c b/arch/alpha/kernel/sys_eb64p.c index 660c23ef661f..df2090ce5e7f 100644 --- a/arch/alpha/kernel/sys_eb64p.c +++ b/arch/alpha/kernel/sys_eb64p.c | |||
@@ -70,7 +70,7 @@ eb64p_end_irq(unsigned int irq) | |||
70 | } | 70 | } |
71 | 71 | ||
72 | static struct irq_chip eb64p_irq_type = { | 72 | static struct irq_chip eb64p_irq_type = { |
73 | .typename = "EB64P", | 73 | .name = "EB64P", |
74 | .startup = eb64p_startup_irq, | 74 | .startup = eb64p_startup_irq, |
75 | .shutdown = eb64p_disable_irq, | 75 | .shutdown = eb64p_disable_irq, |
76 | .enable = eb64p_enable_irq, | 76 | .enable = eb64p_enable_irq, |
diff --git a/arch/alpha/kernel/sys_eiger.c b/arch/alpha/kernel/sys_eiger.c index b99ea488d844..3ca1dbcf4044 100644 --- a/arch/alpha/kernel/sys_eiger.c +++ b/arch/alpha/kernel/sys_eiger.c | |||
@@ -81,7 +81,7 @@ eiger_end_irq(unsigned int irq) | |||
81 | } | 81 | } |
82 | 82 | ||
83 | static struct irq_chip eiger_irq_type = { | 83 | static struct irq_chip eiger_irq_type = { |
84 | .typename = "EIGER", | 84 | .name = "EIGER", |
85 | .startup = eiger_startup_irq, | 85 | .startup = eiger_startup_irq, |
86 | .shutdown = eiger_disable_irq, | 86 | .shutdown = eiger_disable_irq, |
87 | .enable = eiger_enable_irq, | 87 | .enable = eiger_enable_irq, |
diff --git a/arch/alpha/kernel/sys_jensen.c b/arch/alpha/kernel/sys_jensen.c index ef0b83a070ac..7a7ae36fff91 100644 --- a/arch/alpha/kernel/sys_jensen.c +++ b/arch/alpha/kernel/sys_jensen.c | |||
@@ -119,7 +119,7 @@ jensen_local_end(unsigned int irq) | |||
119 | } | 119 | } |
120 | 120 | ||
121 | static struct irq_chip jensen_local_irq_type = { | 121 | static struct irq_chip jensen_local_irq_type = { |
122 | .typename = "LOCAL", | 122 | .name = "LOCAL", |
123 | .startup = jensen_local_startup, | 123 | .startup = jensen_local_startup, |
124 | .shutdown = jensen_local_shutdown, | 124 | .shutdown = jensen_local_shutdown, |
125 | .enable = jensen_local_enable, | 125 | .enable = jensen_local_enable, |
diff --git a/arch/alpha/kernel/sys_marvel.c b/arch/alpha/kernel/sys_marvel.c index bbfc4f20ca72..0bb3b5c4f693 100644 --- a/arch/alpha/kernel/sys_marvel.c +++ b/arch/alpha/kernel/sys_marvel.c | |||
@@ -170,7 +170,7 @@ marvel_irq_noop_return(unsigned int irq) | |||
170 | } | 170 | } |
171 | 171 | ||
172 | static struct irq_chip marvel_legacy_irq_type = { | 172 | static struct irq_chip marvel_legacy_irq_type = { |
173 | .typename = "LEGACY", | 173 | .name = "LEGACY", |
174 | .startup = marvel_irq_noop_return, | 174 | .startup = marvel_irq_noop_return, |
175 | .shutdown = marvel_irq_noop, | 175 | .shutdown = marvel_irq_noop, |
176 | .enable = marvel_irq_noop, | 176 | .enable = marvel_irq_noop, |
@@ -180,7 +180,7 @@ static struct irq_chip marvel_legacy_irq_type = { | |||
180 | }; | 180 | }; |
181 | 181 | ||
182 | static struct irq_chip io7_lsi_irq_type = { | 182 | static struct irq_chip io7_lsi_irq_type = { |
183 | .typename = "LSI", | 183 | .name = "LSI", |
184 | .startup = io7_startup_irq, | 184 | .startup = io7_startup_irq, |
185 | .shutdown = io7_disable_irq, | 185 | .shutdown = io7_disable_irq, |
186 | .enable = io7_enable_irq, | 186 | .enable = io7_enable_irq, |
@@ -190,7 +190,7 @@ static struct irq_chip io7_lsi_irq_type = { | |||
190 | }; | 190 | }; |
191 | 191 | ||
192 | static struct irq_chip io7_msi_irq_type = { | 192 | static struct irq_chip io7_msi_irq_type = { |
193 | .typename = "MSI", | 193 | .name = "MSI", |
194 | .startup = io7_startup_irq, | 194 | .startup = io7_startup_irq, |
195 | .shutdown = io7_disable_irq, | 195 | .shutdown = io7_disable_irq, |
196 | .enable = io7_enable_irq, | 196 | .enable = io7_enable_irq, |
diff --git a/arch/alpha/kernel/sys_mikasa.c b/arch/alpha/kernel/sys_mikasa.c index 4e366641a08e..ee8865169811 100644 --- a/arch/alpha/kernel/sys_mikasa.c +++ b/arch/alpha/kernel/sys_mikasa.c | |||
@@ -69,7 +69,7 @@ mikasa_end_irq(unsigned int irq) | |||
69 | } | 69 | } |
70 | 70 | ||
71 | static struct irq_chip mikasa_irq_type = { | 71 | static struct irq_chip mikasa_irq_type = { |
72 | .typename = "MIKASA", | 72 | .name = "MIKASA", |
73 | .startup = mikasa_startup_irq, | 73 | .startup = mikasa_startup_irq, |
74 | .shutdown = mikasa_disable_irq, | 74 | .shutdown = mikasa_disable_irq, |
75 | .enable = mikasa_enable_irq, | 75 | .enable = mikasa_enable_irq, |
diff --git a/arch/alpha/kernel/sys_noritake.c b/arch/alpha/kernel/sys_noritake.c index 35753a173bac..86503fe73a88 100644 --- a/arch/alpha/kernel/sys_noritake.c +++ b/arch/alpha/kernel/sys_noritake.c | |||
@@ -74,7 +74,7 @@ noritake_end_irq(unsigned int irq) | |||
74 | } | 74 | } |
75 | 75 | ||
76 | static struct irq_chip noritake_irq_type = { | 76 | static struct irq_chip noritake_irq_type = { |
77 | .typename = "NORITAKE", | 77 | .name = "NORITAKE", |
78 | .startup = noritake_startup_irq, | 78 | .startup = noritake_startup_irq, |
79 | .shutdown = noritake_disable_irq, | 79 | .shutdown = noritake_disable_irq, |
80 | .enable = noritake_enable_irq, | 80 | .enable = noritake_enable_irq, |
diff --git a/arch/alpha/kernel/sys_rawhide.c b/arch/alpha/kernel/sys_rawhide.c index f3aec7e085c8..26c322bf89ee 100644 --- a/arch/alpha/kernel/sys_rawhide.c +++ b/arch/alpha/kernel/sys_rawhide.c | |||
@@ -136,7 +136,7 @@ rawhide_end_irq(unsigned int irq) | |||
136 | } | 136 | } |
137 | 137 | ||
138 | static struct irq_chip rawhide_irq_type = { | 138 | static struct irq_chip rawhide_irq_type = { |
139 | .typename = "RAWHIDE", | 139 | .name = "RAWHIDE", |
140 | .startup = rawhide_startup_irq, | 140 | .startup = rawhide_startup_irq, |
141 | .shutdown = rawhide_disable_irq, | 141 | .shutdown = rawhide_disable_irq, |
142 | .enable = rawhide_enable_irq, | 142 | .enable = rawhide_enable_irq, |
diff --git a/arch/alpha/kernel/sys_ruffian.c b/arch/alpha/kernel/sys_ruffian.c index d9f9cfeb9931..8de1046fe91e 100644 --- a/arch/alpha/kernel/sys_ruffian.c +++ b/arch/alpha/kernel/sys_ruffian.c | |||
@@ -66,7 +66,7 @@ ruffian_init_irq(void) | |||
66 | common_init_isa_dma(); | 66 | common_init_isa_dma(); |
67 | } | 67 | } |
68 | 68 | ||
69 | #define RUFFIAN_LATCH ((PIT_TICK_RATE + HZ / 2) / HZ) | 69 | #define RUFFIAN_LATCH DIV_ROUND_CLOSEST(PIT_TICK_RATE, HZ) |
70 | 70 | ||
71 | static void __init | 71 | static void __init |
72 | ruffian_init_rtc(void) | 72 | ruffian_init_rtc(void) |
diff --git a/arch/alpha/kernel/sys_rx164.c b/arch/alpha/kernel/sys_rx164.c index fc9246373452..be161129eab9 100644 --- a/arch/alpha/kernel/sys_rx164.c +++ b/arch/alpha/kernel/sys_rx164.c | |||
@@ -73,7 +73,7 @@ rx164_end_irq(unsigned int irq) | |||
73 | } | 73 | } |
74 | 74 | ||
75 | static struct irq_chip rx164_irq_type = { | 75 | static struct irq_chip rx164_irq_type = { |
76 | .typename = "RX164", | 76 | .name = "RX164", |
77 | .startup = rx164_startup_irq, | 77 | .startup = rx164_startup_irq, |
78 | .shutdown = rx164_disable_irq, | 78 | .shutdown = rx164_disable_irq, |
79 | .enable = rx164_enable_irq, | 79 | .enable = rx164_enable_irq, |
diff --git a/arch/alpha/kernel/sys_sable.c b/arch/alpha/kernel/sys_sable.c index 426eb6906d01..b2abe27a23cf 100644 --- a/arch/alpha/kernel/sys_sable.c +++ b/arch/alpha/kernel/sys_sable.c | |||
@@ -502,7 +502,7 @@ sable_lynx_mask_and_ack_irq(unsigned int irq) | |||
502 | } | 502 | } |
503 | 503 | ||
504 | static struct irq_chip sable_lynx_irq_type = { | 504 | static struct irq_chip sable_lynx_irq_type = { |
505 | .typename = "SABLE/LYNX", | 505 | .name = "SABLE/LYNX", |
506 | .startup = sable_lynx_startup_irq, | 506 | .startup = sable_lynx_startup_irq, |
507 | .shutdown = sable_lynx_disable_irq, | 507 | .shutdown = sable_lynx_disable_irq, |
508 | .enable = sable_lynx_enable_irq, | 508 | .enable = sable_lynx_enable_irq, |
diff --git a/arch/alpha/kernel/sys_takara.c b/arch/alpha/kernel/sys_takara.c index 830318c21661..230464885b5c 100644 --- a/arch/alpha/kernel/sys_takara.c +++ b/arch/alpha/kernel/sys_takara.c | |||
@@ -75,7 +75,7 @@ takara_end_irq(unsigned int irq) | |||
75 | } | 75 | } |
76 | 76 | ||
77 | static struct irq_chip takara_irq_type = { | 77 | static struct irq_chip takara_irq_type = { |
78 | .typename = "TAKARA", | 78 | .name = "TAKARA", |
79 | .startup = takara_startup_irq, | 79 | .startup = takara_startup_irq, |
80 | .shutdown = takara_disable_irq, | 80 | .shutdown = takara_disable_irq, |
81 | .enable = takara_enable_irq, | 81 | .enable = takara_enable_irq, |
diff --git a/arch/alpha/kernel/sys_titan.c b/arch/alpha/kernel/sys_titan.c index 88978fc60f83..288053342c83 100644 --- a/arch/alpha/kernel/sys_titan.c +++ b/arch/alpha/kernel/sys_titan.c | |||
@@ -195,7 +195,7 @@ init_titan_irqs(struct irq_chip * ops, int imin, int imax) | |||
195 | } | 195 | } |
196 | 196 | ||
197 | static struct irq_chip titan_irq_type = { | 197 | static struct irq_chip titan_irq_type = { |
198 | .typename = "TITAN", | 198 | .name = "TITAN", |
199 | .startup = titan_startup_irq, | 199 | .startup = titan_startup_irq, |
200 | .shutdown = titan_disable_irq, | 200 | .shutdown = titan_disable_irq, |
201 | .enable = titan_enable_irq, | 201 | .enable = titan_enable_irq, |
diff --git a/arch/alpha/kernel/sys_wildfire.c b/arch/alpha/kernel/sys_wildfire.c index e91b4c3838a8..62fd972e18ef 100644 --- a/arch/alpha/kernel/sys_wildfire.c +++ b/arch/alpha/kernel/sys_wildfire.c | |||
@@ -158,7 +158,7 @@ wildfire_end_irq(unsigned int irq) | |||
158 | } | 158 | } |
159 | 159 | ||
160 | static struct irq_chip wildfire_irq_type = { | 160 | static struct irq_chip wildfire_irq_type = { |
161 | .typename = "WILDFIRE", | 161 | .name = "WILDFIRE", |
162 | .startup = wildfire_startup_irq, | 162 | .startup = wildfire_startup_irq, |
163 | .shutdown = wildfire_disable_irq, | 163 | .shutdown = wildfire_disable_irq, |
164 | .enable = wildfire_enable_irq, | 164 | .enable = wildfire_enable_irq, |
diff --git a/fs/9p/cache.c b/fs/9p/cache.c index bcc5357a9069..e777961939f3 100644 --- a/fs/9p/cache.c +++ b/fs/9p/cache.c | |||
@@ -343,7 +343,7 @@ int __v9fs_fscache_release_page(struct page *page, gfp_t gfp) | |||
343 | 343 | ||
344 | BUG_ON(!vcookie->fscache); | 344 | BUG_ON(!vcookie->fscache); |
345 | 345 | ||
346 | return fscache_maybe_release_page(vnode->cache, page, gfp); | 346 | return fscache_maybe_release_page(vcookie->fscache, page, gfp); |
347 | } | 347 | } |
348 | 348 | ||
349 | void __v9fs_fscache_invalidate_page(struct page *page) | 349 | void __v9fs_fscache_invalidate_page(struct page *page) |
diff --git a/fs/cachefiles/rdwr.c b/fs/cachefiles/rdwr.c index 1d8332563863..a6c8c6fe8df9 100644 --- a/fs/cachefiles/rdwr.c +++ b/fs/cachefiles/rdwr.c | |||
@@ -11,6 +11,7 @@ | |||
11 | 11 | ||
12 | #include <linux/mount.h> | 12 | #include <linux/mount.h> |
13 | #include <linux/file.h> | 13 | #include <linux/file.h> |
14 | #include <linux/ima.h> | ||
14 | #include "internal.h" | 15 | #include "internal.h" |
15 | 16 | ||
16 | /* | 17 | /* |
@@ -922,6 +923,7 @@ int cachefiles_write_page(struct fscache_storage *op, struct page *page) | |||
922 | if (IS_ERR(file)) { | 923 | if (IS_ERR(file)) { |
923 | ret = PTR_ERR(file); | 924 | ret = PTR_ERR(file); |
924 | } else { | 925 | } else { |
926 | ima_counts_get(file); | ||
925 | ret = -EIO; | 927 | ret = -EIO; |
926 | if (file->f_op->write) { | 928 | if (file->f_op->write) { |
927 | pos = (loff_t) page->index << PAGE_SHIFT; | 929 | pos = (loff_t) page->index << PAGE_SHIFT; |
diff --git a/include/linux/slow-work.h b/include/linux/slow-work.h index 5035a2691739..13337bf6c3f5 100644 --- a/include/linux/slow-work.h +++ b/include/linux/slow-work.h | |||
@@ -20,7 +20,7 @@ | |||
20 | #include <linux/timer.h> | 20 | #include <linux/timer.h> |
21 | 21 | ||
22 | struct slow_work; | 22 | struct slow_work; |
23 | #ifdef CONFIG_SLOW_WORK_PROC | 23 | #ifdef CONFIG_SLOW_WORK_DEBUG |
24 | struct seq_file; | 24 | struct seq_file; |
25 | #endif | 25 | #endif |
26 | 26 | ||
@@ -42,8 +42,8 @@ struct slow_work_ops { | |||
42 | /* execute a work item */ | 42 | /* execute a work item */ |
43 | void (*execute)(struct slow_work *work); | 43 | void (*execute)(struct slow_work *work); |
44 | 44 | ||
45 | #ifdef CONFIG_SLOW_WORK_PROC | 45 | #ifdef CONFIG_SLOW_WORK_DEBUG |
46 | /* describe a work item for /proc */ | 46 | /* describe a work item for debugfs */ |
47 | void (*desc)(struct slow_work *work, struct seq_file *m); | 47 | void (*desc)(struct slow_work *work, struct seq_file *m); |
48 | #endif | 48 | #endif |
49 | }; | 49 | }; |
@@ -64,7 +64,7 @@ struct slow_work { | |||
64 | #define SLOW_WORK_DELAYED 5 /* item is struct delayed_slow_work with active timer */ | 64 | #define SLOW_WORK_DELAYED 5 /* item is struct delayed_slow_work with active timer */ |
65 | const struct slow_work_ops *ops; /* operations table for this item */ | 65 | const struct slow_work_ops *ops; /* operations table for this item */ |
66 | struct list_head link; /* link in queue */ | 66 | struct list_head link; /* link in queue */ |
67 | #ifdef CONFIG_SLOW_WORK_PROC | 67 | #ifdef CONFIG_SLOW_WORK_DEBUG |
68 | struct timespec mark; /* jiffies at which queued or exec begun */ | 68 | struct timespec mark; /* jiffies at which queued or exec begun */ |
69 | #endif | 69 | #endif |
70 | }; | 70 | }; |
diff --git a/init/Kconfig b/init/Kconfig index ab5c64801fe5..39923ccc287b 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
@@ -1098,12 +1098,12 @@ config SLOW_WORK | |||
1098 | 1098 | ||
1099 | See Documentation/slow-work.txt. | 1099 | See Documentation/slow-work.txt. |
1100 | 1100 | ||
1101 | config SLOW_WORK_PROC | 1101 | config SLOW_WORK_DEBUG |
1102 | bool "Slow work debugging through /proc" | 1102 | bool "Slow work debugging through debugfs" |
1103 | default n | 1103 | default n |
1104 | depends on SLOW_WORK && PROC_FS | 1104 | depends on SLOW_WORK && DEBUG_FS |
1105 | help | 1105 | help |
1106 | Display the contents of the slow work run queue through /proc, | 1106 | Display the contents of the slow work run queue through debugfs, |
1107 | including items currently executing. | 1107 | including items currently executing. |
1108 | 1108 | ||
1109 | See Documentation/slow-work.txt. | 1109 | See Documentation/slow-work.txt. |
diff --git a/kernel/Makefile b/kernel/Makefile index 776ffed1556d..d7c13d249b2d 100644 --- a/kernel/Makefile +++ b/kernel/Makefile | |||
@@ -94,7 +94,7 @@ obj-$(CONFIG_X86_DS) += trace/ | |||
94 | obj-$(CONFIG_RING_BUFFER) += trace/ | 94 | obj-$(CONFIG_RING_BUFFER) += trace/ |
95 | obj-$(CONFIG_SMP) += sched_cpupri.o | 95 | obj-$(CONFIG_SMP) += sched_cpupri.o |
96 | obj-$(CONFIG_SLOW_WORK) += slow-work.o | 96 | obj-$(CONFIG_SLOW_WORK) += slow-work.o |
97 | obj-$(CONFIG_SLOW_WORK_PROC) += slow-work-proc.o | 97 | obj-$(CONFIG_SLOW_WORK_DEBUG) += slow-work-debugfs.o |
98 | obj-$(CONFIG_PERF_EVENTS) += perf_event.o | 98 | obj-$(CONFIG_PERF_EVENTS) += perf_event.o |
99 | 99 | ||
100 | ifneq ($(CONFIG_SCHED_OMIT_FRAME_POINTER),y) | 100 | ifneq ($(CONFIG_SCHED_OMIT_FRAME_POINTER),y) |
diff --git a/kernel/slow-work-proc.c b/kernel/slow-work-debugfs.c index 3988032571f5..e45c43645298 100644 --- a/kernel/slow-work-proc.c +++ b/kernel/slow-work-debugfs.c | |||
@@ -57,7 +57,7 @@ static void slow_work_print_mark(struct seq_file *m, struct slow_work *work) | |||
57 | } | 57 | } |
58 | 58 | ||
59 | /* | 59 | /* |
60 | * Describe a slow work item for /proc | 60 | * Describe a slow work item for debugfs |
61 | */ | 61 | */ |
62 | static int slow_work_runqueue_show(struct seq_file *m, void *v) | 62 | static int slow_work_runqueue_show(struct seq_file *m, void *v) |
63 | { | 63 | { |
@@ -211,7 +211,7 @@ static const struct seq_operations slow_work_runqueue_ops = { | |||
211 | }; | 211 | }; |
212 | 212 | ||
213 | /* | 213 | /* |
214 | * open "/proc/slow_work_rq" to list queue contents | 214 | * open "/sys/kernel/debug/slow_work/runqueue" to list queue contents |
215 | */ | 215 | */ |
216 | static int slow_work_runqueue_open(struct inode *inode, struct file *file) | 216 | static int slow_work_runqueue_open(struct inode *inode, struct file *file) |
217 | { | 217 | { |
diff --git a/kernel/slow-work.c b/kernel/slow-work.c index da94f3c101af..00889bd3c590 100644 --- a/kernel/slow-work.c +++ b/kernel/slow-work.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include <linux/kthread.h> | 16 | #include <linux/kthread.h> |
17 | #include <linux/freezer.h> | 17 | #include <linux/freezer.h> |
18 | #include <linux/wait.h> | 18 | #include <linux/wait.h> |
19 | #include <linux/proc_fs.h> | 19 | #include <linux/debugfs.h> |
20 | #include "slow-work.h" | 20 | #include "slow-work.h" |
21 | 21 | ||
22 | static void slow_work_cull_timeout(unsigned long); | 22 | static void slow_work_cull_timeout(unsigned long); |
@@ -109,12 +109,36 @@ static struct module *slow_work_unreg_module; | |||
109 | static struct slow_work *slow_work_unreg_work_item; | 109 | static struct slow_work *slow_work_unreg_work_item; |
110 | static DECLARE_WAIT_QUEUE_HEAD(slow_work_unreg_wq); | 110 | static DECLARE_WAIT_QUEUE_HEAD(slow_work_unreg_wq); |
111 | static DEFINE_MUTEX(slow_work_unreg_sync_lock); | 111 | static DEFINE_MUTEX(slow_work_unreg_sync_lock); |
112 | |||
113 | static void slow_work_set_thread_processing(int id, struct slow_work *work) | ||
114 | { | ||
115 | if (work) | ||
116 | slow_work_thread_processing[id] = work->owner; | ||
117 | } | ||
118 | static void slow_work_done_thread_processing(int id, struct slow_work *work) | ||
119 | { | ||
120 | struct module *module = slow_work_thread_processing[id]; | ||
121 | |||
122 | slow_work_thread_processing[id] = NULL; | ||
123 | smp_mb(); | ||
124 | if (slow_work_unreg_work_item == work || | ||
125 | slow_work_unreg_module == module) | ||
126 | wake_up_all(&slow_work_unreg_wq); | ||
127 | } | ||
128 | static void slow_work_clear_thread_processing(int id) | ||
129 | { | ||
130 | slow_work_thread_processing[id] = NULL; | ||
131 | } | ||
132 | #else | ||
133 | static void slow_work_set_thread_processing(int id, struct slow_work *work) {} | ||
134 | static void slow_work_done_thread_processing(int id, struct slow_work *work) {} | ||
135 | static void slow_work_clear_thread_processing(int id) {} | ||
112 | #endif | 136 | #endif |
113 | 137 | ||
114 | /* | 138 | /* |
115 | * Data for tracking currently executing items for indication through /proc | 139 | * Data for tracking currently executing items for indication through /proc |
116 | */ | 140 | */ |
117 | #ifdef CONFIG_SLOW_WORK_PROC | 141 | #ifdef CONFIG_SLOW_WORK_DEBUG |
118 | struct slow_work *slow_work_execs[SLOW_WORK_THREAD_LIMIT]; | 142 | struct slow_work *slow_work_execs[SLOW_WORK_THREAD_LIMIT]; |
119 | pid_t slow_work_pids[SLOW_WORK_THREAD_LIMIT]; | 143 | pid_t slow_work_pids[SLOW_WORK_THREAD_LIMIT]; |
120 | DEFINE_RWLOCK(slow_work_execs_lock); | 144 | DEFINE_RWLOCK(slow_work_execs_lock); |
@@ -197,9 +221,6 @@ static unsigned slow_work_calc_vsmax(void) | |||
197 | */ | 221 | */ |
198 | static noinline bool slow_work_execute(int id) | 222 | static noinline bool slow_work_execute(int id) |
199 | { | 223 | { |
200 | #ifdef CONFIG_MODULES | ||
201 | struct module *module; | ||
202 | #endif | ||
203 | struct slow_work *work = NULL; | 224 | struct slow_work *work = NULL; |
204 | unsigned vsmax; | 225 | unsigned vsmax; |
205 | bool very_slow; | 226 | bool very_slow; |
@@ -236,10 +257,7 @@ static noinline bool slow_work_execute(int id) | |||
236 | very_slow = false; /* avoid the compiler warning */ | 257 | very_slow = false; /* avoid the compiler warning */ |
237 | } | 258 | } |
238 | 259 | ||
239 | #ifdef CONFIG_MODULES | 260 | slow_work_set_thread_processing(id, work); |
240 | if (work) | ||
241 | slow_work_thread_processing[id] = work->owner; | ||
242 | #endif | ||
243 | if (work) { | 261 | if (work) { |
244 | slow_work_mark_time(work); | 262 | slow_work_mark_time(work); |
245 | slow_work_begin_exec(id, work); | 263 | slow_work_begin_exec(id, work); |
@@ -287,15 +305,7 @@ static noinline bool slow_work_execute(int id) | |||
287 | 305 | ||
288 | /* sort out the race between module unloading and put_ref() */ | 306 | /* sort out the race between module unloading and put_ref() */ |
289 | slow_work_put_ref(work); | 307 | slow_work_put_ref(work); |
290 | 308 | slow_work_done_thread_processing(id, work); | |
291 | #ifdef CONFIG_MODULES | ||
292 | module = slow_work_thread_processing[id]; | ||
293 | slow_work_thread_processing[id] = NULL; | ||
294 | smp_mb(); | ||
295 | if (slow_work_unreg_work_item == work || | ||
296 | slow_work_unreg_module == module) | ||
297 | wake_up_all(&slow_work_unreg_wq); | ||
298 | #endif | ||
299 | 309 | ||
300 | return true; | 310 | return true; |
301 | 311 | ||
@@ -310,7 +320,7 @@ auto_requeue: | |||
310 | else | 320 | else |
311 | list_add_tail(&work->link, &slow_work_queue); | 321 | list_add_tail(&work->link, &slow_work_queue); |
312 | spin_unlock_irq(&slow_work_queue_lock); | 322 | spin_unlock_irq(&slow_work_queue_lock); |
313 | slow_work_thread_processing[id] = NULL; | 323 | slow_work_clear_thread_processing(id); |
314 | return true; | 324 | return true; |
315 | } | 325 | } |
316 | 326 | ||
@@ -813,7 +823,7 @@ static void slow_work_new_thread_execute(struct slow_work *work) | |||
813 | static const struct slow_work_ops slow_work_new_thread_ops = { | 823 | static const struct slow_work_ops slow_work_new_thread_ops = { |
814 | .owner = THIS_MODULE, | 824 | .owner = THIS_MODULE, |
815 | .execute = slow_work_new_thread_execute, | 825 | .execute = slow_work_new_thread_execute, |
816 | #ifdef CONFIG_SLOW_WORK_PROC | 826 | #ifdef CONFIG_SLOW_WORK_DEBUG |
817 | .desc = slow_work_new_thread_desc, | 827 | .desc = slow_work_new_thread_desc, |
818 | #endif | 828 | #endif |
819 | }; | 829 | }; |
@@ -943,6 +953,7 @@ EXPORT_SYMBOL(slow_work_register_user); | |||
943 | */ | 953 | */ |
944 | static void slow_work_wait_for_items(struct module *module) | 954 | static void slow_work_wait_for_items(struct module *module) |
945 | { | 955 | { |
956 | #ifdef CONFIG_MODULES | ||
946 | DECLARE_WAITQUEUE(myself, current); | 957 | DECLARE_WAITQUEUE(myself, current); |
947 | struct slow_work *work; | 958 | struct slow_work *work; |
948 | int loop; | 959 | int loop; |
@@ -989,6 +1000,7 @@ static void slow_work_wait_for_items(struct module *module) | |||
989 | 1000 | ||
990 | remove_wait_queue(&slow_work_unreg_wq, &myself); | 1001 | remove_wait_queue(&slow_work_unreg_wq, &myself); |
991 | mutex_unlock(&slow_work_unreg_sync_lock); | 1002 | mutex_unlock(&slow_work_unreg_sync_lock); |
1003 | #endif /* CONFIG_MODULES */ | ||
992 | } | 1004 | } |
993 | 1005 | ||
994 | /** | 1006 | /** |
@@ -1043,9 +1055,15 @@ static int __init init_slow_work(void) | |||
1043 | if (slow_work_max_max_threads < nr_cpus * 2) | 1055 | if (slow_work_max_max_threads < nr_cpus * 2) |
1044 | slow_work_max_max_threads = nr_cpus * 2; | 1056 | slow_work_max_max_threads = nr_cpus * 2; |
1045 | #endif | 1057 | #endif |
1046 | #ifdef CONFIG_SLOW_WORK_PROC | 1058 | #ifdef CONFIG_SLOW_WORK_DEBUG |
1047 | proc_create("slow_work_rq", S_IFREG | 0400, NULL, | 1059 | { |
1048 | &slow_work_runqueue_fops); | 1060 | struct dentry *dbdir; |
1061 | |||
1062 | dbdir = debugfs_create_dir("slow_work", NULL); | ||
1063 | if (dbdir && !IS_ERR(dbdir)) | ||
1064 | debugfs_create_file("runqueue", S_IFREG | 0400, dbdir, | ||
1065 | NULL, &slow_work_runqueue_fops); | ||
1066 | } | ||
1049 | #endif | 1067 | #endif |
1050 | return 0; | 1068 | return 0; |
1051 | } | 1069 | } |
diff --git a/kernel/slow-work.h b/kernel/slow-work.h index 3c2f007f3ad6..321f3c59d732 100644 --- a/kernel/slow-work.h +++ b/kernel/slow-work.h | |||
@@ -19,7 +19,7 @@ | |||
19 | /* | 19 | /* |
20 | * slow-work.c | 20 | * slow-work.c |
21 | */ | 21 | */ |
22 | #ifdef CONFIG_SLOW_WORK_PROC | 22 | #ifdef CONFIG_SLOW_WORK_DEBUG |
23 | extern struct slow_work *slow_work_execs[]; | 23 | extern struct slow_work *slow_work_execs[]; |
24 | extern pid_t slow_work_pids[]; | 24 | extern pid_t slow_work_pids[]; |
25 | extern rwlock_t slow_work_execs_lock; | 25 | extern rwlock_t slow_work_execs_lock; |
@@ -30,9 +30,9 @@ extern struct list_head vslow_work_queue; | |||
30 | extern spinlock_t slow_work_queue_lock; | 30 | extern spinlock_t slow_work_queue_lock; |
31 | 31 | ||
32 | /* | 32 | /* |
33 | * slow-work-proc.c | 33 | * slow-work-debugfs.c |
34 | */ | 34 | */ |
35 | #ifdef CONFIG_SLOW_WORK_PROC | 35 | #ifdef CONFIG_SLOW_WORK_DEBUG |
36 | extern const struct file_operations slow_work_runqueue_fops; | 36 | extern const struct file_operations slow_work_runqueue_fops; |
37 | 37 | ||
38 | extern void slow_work_new_thread_desc(struct slow_work *, struct seq_file *); | 38 | extern void slow_work_new_thread_desc(struct slow_work *, struct seq_file *); |