diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/irq/chip.c | 6 | ||||
-rw-r--r-- | kernel/irq/resend.c | 3 | ||||
-rw-r--r-- | kernel/kmod.c | 5 | ||||
-rw-r--r-- | kernel/lockdep_internals.h | 2 | ||||
-rw-r--r-- | kernel/rcupdate.c | 6 |
5 files changed, 13 insertions, 9 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 9336f2e89e40..ac1f850d4937 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
@@ -252,7 +252,7 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
252 | mask_ack_irq(desc, irq); | 252 | mask_ack_irq(desc, irq); |
253 | 253 | ||
254 | if (unlikely(desc->status & IRQ_INPROGRESS)) | 254 | if (unlikely(desc->status & IRQ_INPROGRESS)) |
255 | goto out; | 255 | goto out_unlock; |
256 | desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); | 256 | desc->status &= ~(IRQ_REPLAY | IRQ_WAITING); |
257 | kstat_cpu(cpu).irqs[irq]++; | 257 | kstat_cpu(cpu).irqs[irq]++; |
258 | 258 | ||
@@ -263,7 +263,7 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
263 | action = desc->action; | 263 | action = desc->action; |
264 | if (unlikely(!action || (desc->status & IRQ_DISABLED))) { | 264 | if (unlikely(!action || (desc->status & IRQ_DISABLED))) { |
265 | desc->status |= IRQ_PENDING; | 265 | desc->status |= IRQ_PENDING; |
266 | goto out; | 266 | goto out_unlock; |
267 | } | 267 | } |
268 | 268 | ||
269 | desc->status |= IRQ_INPROGRESS; | 269 | desc->status |= IRQ_INPROGRESS; |
@@ -276,9 +276,9 @@ handle_level_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs) | |||
276 | 276 | ||
277 | spin_lock(&desc->lock); | 277 | spin_lock(&desc->lock); |
278 | desc->status &= ~IRQ_INPROGRESS; | 278 | desc->status &= ~IRQ_INPROGRESS; |
279 | out: | ||
280 | if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask) | 279 | if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask) |
281 | desc->chip->unmask(irq); | 280 | desc->chip->unmask(irq); |
281 | out_unlock: | ||
282 | spin_unlock(&desc->lock); | 282 | spin_unlock(&desc->lock); |
283 | } | 283 | } |
284 | 284 | ||
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c index 872f91ba2ce8..35f10f7ff94a 100644 --- a/kernel/irq/resend.c +++ b/kernel/irq/resend.c | |||
@@ -63,8 +63,7 @@ void check_irq_resend(struct irq_desc *desc, unsigned int irq) | |||
63 | desc->chip->enable(irq); | 63 | desc->chip->enable(irq); |
64 | 64 | ||
65 | if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) { | 65 | if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) { |
66 | desc->status &= ~IRQ_PENDING; | 66 | desc->status = (status & ~IRQ_PENDING) | IRQ_REPLAY; |
67 | desc->status = status | IRQ_REPLAY; | ||
68 | 67 | ||
69 | if (!desc->chip || !desc->chip->retrigger || | 68 | if (!desc->chip || !desc->chip->retrigger || |
70 | !desc->chip->retrigger(irq)) { | 69 | !desc->chip->retrigger(irq)) { |
diff --git a/kernel/kmod.c b/kernel/kmod.c index 1d32defa38ab..5c470c57fb57 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c | |||
@@ -197,11 +197,12 @@ static void __call_usermodehelper(void *data) | |||
197 | { | 197 | { |
198 | struct subprocess_info *sub_info = data; | 198 | struct subprocess_info *sub_info = data; |
199 | pid_t pid; | 199 | pid_t pid; |
200 | int wait = sub_info->wait; | ||
200 | 201 | ||
201 | /* CLONE_VFORK: wait until the usermode helper has execve'd | 202 | /* CLONE_VFORK: wait until the usermode helper has execve'd |
202 | * successfully We need the data structures to stay around | 203 | * successfully We need the data structures to stay around |
203 | * until that is done. */ | 204 | * until that is done. */ |
204 | if (sub_info->wait) | 205 | if (wait) |
205 | pid = kernel_thread(wait_for_helper, sub_info, | 206 | pid = kernel_thread(wait_for_helper, sub_info, |
206 | CLONE_FS | CLONE_FILES | SIGCHLD); | 207 | CLONE_FS | CLONE_FILES | SIGCHLD); |
207 | else | 208 | else |
@@ -211,7 +212,7 @@ static void __call_usermodehelper(void *data) | |||
211 | if (pid < 0) { | 212 | if (pid < 0) { |
212 | sub_info->retval = pid; | 213 | sub_info->retval = pid; |
213 | complete(sub_info->complete); | 214 | complete(sub_info->complete); |
214 | } else if (!sub_info->wait) | 215 | } else if (!wait) |
215 | complete(sub_info->complete); | 216 | complete(sub_info->complete); |
216 | } | 217 | } |
217 | 218 | ||
diff --git a/kernel/lockdep_internals.h b/kernel/lockdep_internals.h index 0d355f24fe04..eab043c83bb2 100644 --- a/kernel/lockdep_internals.h +++ b/kernel/lockdep_internals.h | |||
@@ -27,7 +27,7 @@ | |||
27 | * Stack-trace: tightly packed array of stack backtrace | 27 | * Stack-trace: tightly packed array of stack backtrace |
28 | * addresses. Protected by the hash_lock. | 28 | * addresses. Protected by the hash_lock. |
29 | */ | 29 | */ |
30 | #define MAX_STACK_TRACE_ENTRIES 131072UL | 30 | #define MAX_STACK_TRACE_ENTRIES 262144UL |
31 | 31 | ||
32 | extern struct list_head all_lock_classes; | 32 | extern struct list_head all_lock_classes; |
33 | 33 | ||
diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c index 436ab35f6fa7..523e46483b99 100644 --- a/kernel/rcupdate.c +++ b/kernel/rcupdate.c | |||
@@ -241,12 +241,16 @@ static void rcu_do_batch(struct rcu_data *rdp) | |||
241 | next = rdp->donelist = list->next; | 241 | next = rdp->donelist = list->next; |
242 | list->func(list); | 242 | list->func(list); |
243 | list = next; | 243 | list = next; |
244 | rdp->qlen--; | ||
245 | if (++count >= rdp->blimit) | 244 | if (++count >= rdp->blimit) |
246 | break; | 245 | break; |
247 | } | 246 | } |
247 | |||
248 | local_irq_disable(); | ||
249 | rdp->qlen -= count; | ||
250 | local_irq_enable(); | ||
248 | if (rdp->blimit == INT_MAX && rdp->qlen <= qlowmark) | 251 | if (rdp->blimit == INT_MAX && rdp->qlen <= qlowmark) |
249 | rdp->blimit = blimit; | 252 | rdp->blimit = blimit; |
253 | |||
250 | if (!rdp->donelist) | 254 | if (!rdp->donelist) |
251 | rdp->donetail = &rdp->donelist; | 255 | rdp->donetail = &rdp->donelist; |
252 | else | 256 | else |