diff options
| author | Greg Kroah-Hartman <gregkh@google.com> | 2018-07-31 20:11:21 +0200 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@google.com> | 2018-07-31 20:11:21 +0200 |
| commit | 7bbfac190345ca532ea790c9d9ccb15682d7b99b (patch) | |
| tree | 783947e7aeaded9bcaba976b6d2ad590fdb3bae1 /arch/mips/kernel/process.c | |
| parent | 8ec9fd8936b20ca2d18160f8b18acb4b732c2771 (diff) | |
| parent | a8ea6276d00555387deaaa5eaeb380cd5c17bdc9 (diff) | |
Merge 4.4.143 into android-4.4
Changes in 4.4.143
compiler, clang: suppress warning for unused static inline functions
compiler, clang: properly override 'inline' for clang
compiler, clang: always inline when CONFIG_OPTIMIZE_INLINING is disabled
compiler-gcc.h: Add __attribute__((gnu_inline)) to all inline declarations
x86/asm: Add _ASM_ARG* constants for argument registers to <asm/asm.h>
Revert "sit: reload iphdr in ipip6_rcv"
ocfs2: subsystem.su_mutex is required while accessing the item->ci_parent
bcm63xx_enet: correct clock usage
bcm63xx_enet: do not write to random DMA channel on BCM6345
crypto: crypto4xx - remove bad list_del
crypto: crypto4xx - fix crypto4xx_build_pdr, crypto4xx_build_sdr leak
atm: zatm: Fix potential Spectre v1
net: dccp: avoid crash in ccid3_hc_rx_send_feedback()
net: dccp: switch rx_tstamp_last_feedback to monotonic clock
net/mlx5: Fix incorrect raw command length parsing
net: sungem: fix rx checksum support
qed: Limit msix vectors in kdump kernel to the minimum required count.
r8152: napi hangup fix after disconnect
tcp: fix Fast Open key endianness
tcp: prevent bogus FRTO undos with non-SACK flows
vhost_net: validate sock before trying to put its fd
net_sched: blackhole: tell upper qdisc about dropped packets
net/mlx5: Fix command interface race in polling mode
net: cxgb3_main: fix potential Spectre v1
rtlwifi: rtl8821ae: fix firmware is not ready to run
MIPS: Call dump_stack() from show_regs()
MIPS: Use async IPIs for arch_trigger_cpumask_backtrace()
netfilter: ebtables: reject non-bridge targets
KEYS: DNS: fix parsing multiple options
rds: avoid unenecessary cong_update in loop transport
net/nfc: Avoid stalls when nfc_alloc_send_skb() returned NULL.
Linux 4.4.143
Change-Id: Icacfd188cbb6075bf82a48ec1066e8653eb73ae4
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'arch/mips/kernel/process.c')
| -rw-r--r-- | arch/mips/kernel/process.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index 054a22c0873b..9684a0d22d97 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c @@ -633,21 +633,48 @@ unsigned long arch_align_stack(unsigned long sp) return sp & ALMASK; } +static DEFINE_PER_CPU(struct call_single_data, backtrace_csd); +static struct cpumask backtrace_csd_busy; + static void arch_dump_stack(void *info) { struct pt_regs *regs; + static arch_spinlock_t lock = __ARCH_SPIN_LOCK_UNLOCKED; + arch_spin_lock(&lock); regs = get_irq_regs(); if (regs) show_regs(regs); + else + dump_stack(); + arch_spin_unlock(&lock); - dump_stack(); + cpumask_clear_cpu(smp_processor_id(), &backtrace_csd_busy); } void arch_trigger_all_cpu_backtrace(bool include_self) { - smp_call_function(arch_dump_stack, NULL, 1); + struct call_single_data *csd; + int cpu; + + for_each_cpu(cpu, cpu_online_mask) { + /* + * If we previously sent an IPI to the target CPU & it hasn't + * cleared its bit in the busy cpumask then it didn't handle + * our previous IPI & it's not safe for us to reuse the + * call_single_data_t. + */ + if (cpumask_test_and_set_cpu(cpu, &backtrace_csd_busy)) { + pr_warn("Unable to send backtrace IPI to CPU%u - perhaps it hung?\n", + cpu); + continue; + } + + csd = &per_cpu(backtrace_csd, cpu); + csd->func = arch_dump_stack; + smp_call_function_single_async(cpu, csd); + } } int mips_get_process_fp_mode(struct task_struct *task) |
