diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-06 19:35:10 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-06 19:35:10 -0400 |
commit | 57d326169e878a1a37b2bccd1cf81f6809ee67b9 (patch) | |
tree | 86ed74ae4dc2beaebce1c67b8459f1873b777d3a /kernel/smp.c | |
parent | 7b215de3d0abbc4f6daf2efd19e8809af0564490 (diff) | |
parent | 0244756edc4b98c129e92c7061d9f383708cf786 (diff) |
Merge branch 'akpm' (patches from Andrew Morton) into next
Merge more updates from Andrew Morton:
- Most of the rest of MM.
This includes "mark remap_file_pages syscall as deprecated" but the
actual "replace remap_file_pages syscall with emulation" is held
back. I guess we'll need to work out when to pull the trigger on
that one.
- various minor cleanups to obscure filesystems
- the drivers/rtc queue
- hfsplus updates
- ufs, hpfs, fatfs, affs, reiserfs
- Documentation/
- signals
- procfs
- cpu hotplug
- lib/idr.c
- rapidio
- sysctl
- ipc updates
* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (171 commits)
ufs: sb mutex merge + mutex_destroy
powerpc: update comments for generic idle conversion
cris: update comments for generic idle conversion
idle: remove cpu_idle() forward declarations
nbd: zero from and len fields in NBD_CMD_DISCONNECT.
mm: convert some level-less printks to pr_*
MAINTAINERS: adi-buildroot-devel is moderated
MAINTAINERS: add linux-api for review of API/ABI changes
mm/kmemleak-test.c: use pr_fmt for logging
fs/dlm/debug_fs.c: replace seq_printf by seq_puts
fs/dlm/lockspace.c: convert simple_str to kstr
fs/dlm/config.c: convert simple_str to kstr
mm: mark remap_file_pages() syscall as deprecated
mm: memcontrol: remove unnecessary memcg argument from soft limit functions
mm: memcontrol: clean up memcg zoneinfo lookup
mm/memblock.c: call kmemleak directly from memblock_(alloc|free)
mm/mempool.c: update the kmemleak stack trace for mempool allocations
lib/radix-tree.c: update the kmemleak stack trace for radix tree allocations
mm: introduce kmemleak_update_trace()
mm/kmemleak.c: use %u to print ->checksum
...
Diffstat (limited to 'kernel/smp.c')
-rw-r--r-- | kernel/smp.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/kernel/smp.c b/kernel/smp.c index 06d574e42c72..306f8180b0d5 100644 --- a/kernel/smp.c +++ b/kernel/smp.c | |||
@@ -185,14 +185,26 @@ void generic_smp_call_function_single_interrupt(void) | |||
185 | { | 185 | { |
186 | struct llist_node *entry; | 186 | struct llist_node *entry; |
187 | struct call_single_data *csd, *csd_next; | 187 | struct call_single_data *csd, *csd_next; |
188 | static bool warned; | ||
189 | |||
190 | entry = llist_del_all(&__get_cpu_var(call_single_queue)); | ||
191 | entry = llist_reverse_order(entry); | ||
188 | 192 | ||
189 | /* | 193 | /* |
190 | * Shouldn't receive this interrupt on a cpu that is not yet online. | 194 | * Shouldn't receive this interrupt on a cpu that is not yet online. |
191 | */ | 195 | */ |
192 | WARN_ON_ONCE(!cpu_online(smp_processor_id())); | 196 | if (unlikely(!cpu_online(smp_processor_id()) && !warned)) { |
197 | warned = true; | ||
198 | WARN(1, "IPI on offline CPU %d\n", smp_processor_id()); | ||
193 | 199 | ||
194 | entry = llist_del_all(&__get_cpu_var(call_single_queue)); | 200 | /* |
195 | entry = llist_reverse_order(entry); | 201 | * We don't have to use the _safe() variant here |
202 | * because we are not invoking the IPI handlers yet. | ||
203 | */ | ||
204 | llist_for_each_entry(csd, entry, llist) | ||
205 | pr_warn("IPI callback %pS sent to offline CPU\n", | ||
206 | csd->func); | ||
207 | } | ||
196 | 208 | ||
197 | llist_for_each_entry_safe(csd, csd_next, entry, llist) { | 209 | llist_for_each_entry_safe(csd, csd_next, entry, llist) { |
198 | csd->func(csd->info); | 210 | csd->func(csd->info); |