Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759729AbcDERmm (ORCPT ); Tue, 5 Apr 2016 13:42:42 -0400 Received: from mail-db3on0100.outbound.protection.outlook.com ([157.55.234.100]:30634 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1759697AbcDERmY (ORCPT ); Tue, 5 Apr 2016 13:42:24 -0400 Authentication-Results: spf=fail (sender IP is 12.216.194.146) smtp.mailfrom=ezchip.com; mellanox.com; dkim=none (message not signed) header.d=none;mellanox.com; dmarc=fail action=none header.from=mellanox.com; From: Chris Metcalf To: Peter Zijlstra , "Rafael J. Wysocki" , Petr Mladek , Russell King , Thomas Gleixner , Aaron Tomlin , Ingo Molnar , Andrew Morton , Daniel Thompson , , CC: Chris Metcalf Subject: [PATCH v5 2/4] nmi_backtrace: do a local dump_stack() instead of a self-NMI Date: Tue, 5 Apr 2016 13:26:46 -0400 Message-ID: <1459877208-15119-3-git-send-email-cmetcalf@mellanox.com> X-Mailer: git-send-email 2.7.2 In-Reply-To: <1459877208-15119-1-git-send-email-cmetcalf@mellanox.com> References: <1459877208-15119-1-git-send-email-cmetcalf@mellanox.com> X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:12.216.194.146;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(5008740100001)(105606002)(48376002)(2201001)(85426001)(92566002)(50466002)(36756003)(6806005)(960300001)(33646002)(104016004)(2950100001)(86362001)(42186005)(2906002)(4326007)(229853001)(586003)(1096002)(1220700001)(5001770100001)(11100500001)(87936001)(5001970100001)(189998001)(4001430100002)(76176999)(47776003)(107886002)(19580395003)(19580405001)(50226001)(106466001)(5003940100001)(50986999)(921003)(83996005)(2101003)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR05MB1693;H:ld-1.internal.tilera.com;FPR:;SPF:Fail;MLV:sfv;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB3FFO11FD055;1:3csMIUDhkzKv0P6O6K+om3SfiSncJOgGQFUydIZCxEm9y4m2LpBGMeTLDrSFCeJ6vHgPKpuE8EVDoIyk0F7Zv0PJiF+Zlw4cMF48oWUjE7f19S1XeWp8GzoRJgYEqAXyuAnNb0RkeL9D0FdzIkAfhx61v2GH8Nn/yV905NOwJ/xr/Jwc48F2ZlGW3dZQAjZfLzwRcTq3jpXERWm9NhZsDFm+qRHt5hN/mFT5bVKse7dJJ+FTfzsU7bgrCBq6fEQLMm72lxwQqAD8RkzVJvLCv0yma4snbBYUNx+vM4xIXHNxVCiUP7ySNZHxj4etJpBnxo7cv6TJ713UF0dzxM7UszOTzCr3kq10YNdsyO+AgiTaW6NNC4bqF1RL8r26621PMDshjNCb2CbaAsW79GkQeOa01l+3tJT6nbx9hZ9TPTmvaGlqjE7IMb/CyocbvUfUs2M2juqQ1jEglVj2TPLHVrsYWE6nyg1zD8FJ5IwSW/ted5R3AiZSF/jSdPX4zu5RR+ZLzp72AbHyVRytXCqtVy2lMUrUqRp9NnmSCwJ0EovQx82c+PxrmT5Jq9MelYDqXwjN5kn9whoa6paGA7j+6kWD4prMrLNU+pHosL0KNGNOWZF5QmKL7Ra1WMtIuURF MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 5f8481ec-f395-49da-c1d5-08d35d7780d9 X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1693;2:clCaBpNWI2iOE/jKa6FpEbqwTXu5pPvIVPAFL1HKszHOc0ZOmvC+ov4T658TafhAHfAI2RL7m5Zy2oq7Y5DXla6q6/yR5ip5YYRN00lQX3h01nRhWZtkkDSCegITGrhJXiMPL9iNT70ioRnl+no4beZDPbfJJbPta/H4qRknRecrxxikOc3MJ5yIRKdJ//EX;3:U9pGgZOY3d2qbXGL57zZJTGLSxiLIAazAXMDbq98LwsD+RxB20PqRjDA/MFOY6lezoUP8g/s1tmW6htKfnw3Wz0QJDDMfd/Pu1fJ0kGgMZNd8oo6KY3Rw0TJw1AT5pfJPiWqyquZYMBFaSrGh4htCnmui93auD0EPsKEFKt2ySokCeldC4RsvlRdQFkaExzOqFwpExTZTTnL5kxobFdwEuyayr0korqtSB/6oK+TGgU= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:VI1PR05MB1693; X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1693;25:7KHIRHrbjuRe2vGAOdUFSDgax7QwbioQDMoNTl/n3A4WLa73BCnIo/8Xs+YX0ZNkkYCOgpV15MpMo9WpVQpImKyjuDcJzrdt093xqskz5ij7a0gEpseF23BwXLCmnECIzUeIthg3fiX6KixfpqpMMuoBAqp7AZrNwY0m71yNNB8QPqh0VAr50jvudKAKU/t/jBNyY0qY+oS/86GeHQ56dFzBOGC/ew6CnlOYc27kUuVRZIGqvjh/xaS5yHXfIaud5Ib0cTFIgK6u3aB15TudVIBq1m9k9UV+1uGbxLyOR3i3x6Sg27mfkVcEUqU+98ypkekkQ9+4BR0EQCvEHFGyRpHSIW306xP25Sg1MR1KNgRuG7OSvkNwuFeCVc9AUCnxD4KJn0jz5kW0AJrU1tQR5b/dllHNEujcyGF6MxPqwwocEy3JuQdW8uswprebgAb3FLwiPMhwRvkwOrTsDZdfpJ8kBX9MleF4wKmCLkZUqh59NzpKonOgjFEDoLsZ9XjCPeMqKjFDxrzIauEH7oSaWJlXq9ghjHTqbV365NHpbBEyWIRhdyytuPohgoKIqcWFBNvcEfVpv9VKz0NONIDbtAlQIyYYcJVNgwS601jFGIDhLEvpairjPW4zQDBKk3Y8423e+RHfqNb/QMosHv/5dDqIdtHB9mUVpUVFOHDrbTilPVHEfoOQqXuaVJvcJbNN X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1693;20:1El/C+dbFgYcsHCZ6L7HhKBDSk3UAU1n7nzAhD/GImVnYubf/D1IBeKhauJOXmfubKjn+wuYbKV3yo2VTIkxTUP8/BkdvBDlqmBg6JUqtNhbJvor2BHRMW7U7aEnMkq8tI96zmNIMeh78NLrFzPZxffXhiRtW4fgtiu+vmtdyJB47LHLQZGpp/DIaFKCy1AIRnbBTHYR5ozTWBeRiey0cHJqwX2GbS2dd6d13ujA8pO7ENp1gsIPDyW3flzd0Sgo7QT3HeAuUWOVplpViU18t93Prl+v34YEzHa+0PJd26crc/x3iXhf3oL+Km9Ydm8l87b6QRmtIEembekJ3zF9njUq3rzPLat4huCmHM1WukkLMYuPVJHbblb2besBTIaObxbjxcgm8/l42OOvBxYKXDWEKwlWM9Y78EAeRjqHNQNP696Xavu9vLD50HyE0hIaBEkt8J+jdRlpnNBpGaJMg7BnuJ5FCvQNp2diw5ZYvpDgxjZ/+Urgrk4Uy5oe5XJt X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(13015025)(13023025)(13024025)(8121501046)(13018025)(13017025)(10201501046)(3002001);SRVR:VI1PR05MB1693;BCL:0;PCL:0;RULEID:;SRVR:VI1PR05MB1693; X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1693;4:HK2VvzVOykZjIcnHkPr7JDk4D4Of52B+5wpHyu8AKxdaTu2XfbcW2UnTfh0e5+Sb50qVEyqSXP+lFFIcC7Z3RV6srwv7n/jMI9OMyU3DZPnOmuOhvkScx2Q/z2gEHCz3G55NyN5BsDpO5+MSY0FI9EN1tp9x1ayiLqSeYd8uklsW9C4NT4zYkCFdncf37V6KKn4tPyvsAqhKIcmVDJlOY6ylrAOhsJh6RRzkp3cm5kCfe0JIogw/Jo0Gk9dy6YCIcHRncNC+pwurqYpvmV9axwcFjBhxlwLwZ04NSZL0ZP1c/yFpC+RPilmxSfIkLHLEKa7jWQhrgc3QK+488PxgkRiBY8NsWL/BFX4W1oDO/A9ERESpbbcrudUJQErBGTX/gz2e8bOc85NuKfbr24N4nocyQi0Eg4MVc0f25z9rnzcW9kAYnqeNmJaHfxzV6xuwXfUM3/15Oa26xIfVzKRDRA== X-Forefront-PRVS: 0903DD1D85 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR05MB1693;23:1TyvCGc38CynSevz6L4v0P46yd1p3NTJuUDIoA+Ts?= =?us-ascii?Q?0wqWXPIifE0G1KzOdxCQTly6KnosZrGINP2K9fUQ9bHnEKPnDaeSuI0MIkAE?= =?us-ascii?Q?qbH95bhpX7nveVxnB+BwuVUkc4EVKr0hgspwZjJiH4JCecKeJZTYHEmE4Jfh?= =?us-ascii?Q?+oq46KL75eVE/7dt8ObRdHejN5NEQyi+tySr1FBHkFBJVY37yGVULpyLkO/c?= =?us-ascii?Q?kuR2llROTSA8jU2mkvOyVI/49ge7YEYMZwtZuGmWbquiGAHMzEs/DtWW0t9T?= =?us-ascii?Q?pfO2sZLyCE6Ph97R9a28T3qVmT7IRaDEeJc7PupkKJDy8qygPuxw26JZq3yN?= =?us-ascii?Q?M71pGWrSCqvWY69WJ1Utc3W3JrM4hTSXy1DJxyme77ym0zzoXx+K8Y6YlvGI?= =?us-ascii?Q?F+njpJYv1CMv9Crv7PhYVaCzOSFNDFy18ZJNuQhexfrFakEVnFvN8S686rL8?= =?us-ascii?Q?glDtA2XvM+yOnZmXA+w4QLq6/zM/cKkNCrBIQAcC0bDFJ1jsX+9JRbacjvOa?= =?us-ascii?Q?r3lO0sJCxLHbYry/J+0IClR1rzRvkeEjWnsLUZM5Xi6AB9PqujUiqJHFTvWo?= =?us-ascii?Q?U4S5w8JgJ9RZ3A9bCzctYgU+azvSM/w/2F4NhCPmxC12Lq6qHZ95Jbm5E6NL?= =?us-ascii?Q?jZ00WYYTk3S9VArFuuPPa+qlTzu3B6BcTVe7wVWo9YUCLRW8gbH6fe/EbHrR?= =?us-ascii?Q?1K2zj95v3AM+lz0bZ8IE3IIXStaDowZhz325SsXUreFesSzDj2+gyDF0qMLq?= =?us-ascii?Q?qDUI4u/Co/Uym34k2cE3QCi+zMa6xmWpiZOhG8Of7OBsf5nZ4Qw++FMh9hvo?= =?us-ascii?Q?OJEIo6BncSVc6aIArisgeZUf3lKqOY3gQJK8d7903IX66cz4PWY7nuqmGOQz?= =?us-ascii?Q?pt0Vgelb6528PMvbBf1jbDqPuRw3lls6BkF/sMuEOSnSfQKh/4CPnAVwbd/6?= =?us-ascii?Q?lLgBj6j2VVk74UvtAD+Dy5lEBlRskJEn3K/i9HUaWPN25rVh7FoGGrH18izJ?= =?us-ascii?Q?zKBhiLVRfYyUdEqNT4PGaGbUtEsmx7stk5fDxzuEELS1a+T0VFpkYDzgB10j?= =?us-ascii?Q?m+sKKaGgtu5wMYQbBRIPZBqpeF/2R5k0X0SJE0AGVVXUwHZQQ81OvSPupsO6?= =?us-ascii?Q?+vczGrwiKFfqxZWGfbtJusgaI9uiD8gNpj2JXYIE/nosOXAfkWvL2M8GPeOM?= =?us-ascii?Q?oqKbCu5HdMWt3PMA2ijPX+ps+WQudxfZEA70rxvbXGYdsDrCpL3q9ACZQ=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR05MB1693;5:PESQDr1rV0iTQ5VzuNNDpQr5bWqU4FFqYSMFNrlfVwelcwDCpvIGVhNms/3ZqkjcvGrtL2FxYWi6jBFxfByd+RzE4CoKocToN+DRxDMr35kc+e/LSTVpPkDhrzD5MGtxB+D6YJUuzykEkQRwuXxn9Q==;24:G6ZD+IaUf8yUbMdOMYYUlPHowoIzNjlI3qw9kLs3LGvkUx/UX8wLBAtYV7PhZYro02ZdI5t8IWKJNfjycOExFM+fpvy6KvAD7mlqT1hqcUA= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Apr 2016 17:27:02.5974 (UTC) X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=a652971c-7d2e-4d9b-a6a4-d149256f461b;Ip=[12.216.194.146];Helo=[ld-1.internal.tilera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR05MB1693 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2492 Lines: 65 Currently on arm there is code that checks whether it should call dump_stack() explicitly, to avoid trying to raise an NMI when the current context is not preemptible by the backtrace IPI. Similarly, the forthcoming arch/tile support uses an IPI mechanism that does not support generating an NMI to self. Accordingly, move the code that guards this case into the generic mechanism, and invoke it unconditionally whenever we want a backtrace of the current cpu. It seems plausible that in all cases, dump_stack() will generate better information than generating a stack from the NMI handler. The register state will be missing, but that state is likely not particularly helpful in any case. Or, if we think it is helpful, we should be capturing and emitting the current register state in all cases when regs == NULL is passed to nmi_cpu_backtrace(). Signed-off-by: Chris Metcalf --- arch/arm/kernel/smp.c | 9 --------- lib/nmi_backtrace.c | 9 +++++++++ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 72ad8485993a..07223f2a3ee0 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -746,15 +746,6 @@ core_initcall(register_cpufreq_notifier); static void raise_nmi(cpumask_t *mask) { - /* - * Generate the backtrace directly if we are running in a calling - * context that is not preemptible by the backtrace IPI. Note - * that nmi_cpu_backtrace() automatically removes the current cpu - * from mask. - */ - if (cpumask_test_cpu(smp_processor_id(), mask) && irqs_disabled()) - nmi_cpu_backtrace(NULL); - smp_cross_call(mask, IPI_CPU_BACKTRACE); } diff --git a/lib/nmi_backtrace.c b/lib/nmi_backtrace.c index db63ac75eba0..9375c0279b73 100644 --- a/lib/nmi_backtrace.c +++ b/lib/nmi_backtrace.c @@ -76,6 +76,15 @@ void nmi_trigger_cpumask_backtrace(const cpumask_t *mask, seq_buf_init(&s->seq, s->buffer, NMI_BUF_SIZE); } + /* + * Don't try to send an NMI to this cpu; it may work on some + * architectures, but on others it may not, and we'll get + * information at least as useful just by doing a dump_stack() here. + * Note that nmi_cpu_backtrace(NULL) will clear the cpu bit. + */ + if (cpumask_test_cpu(this_cpu, to_cpumask(backtrace_mask))) + nmi_cpu_backtrace(NULL); + if (!cpumask_empty(to_cpumask(backtrace_mask))) { pr_info("Sending NMI from CPU %d to CPUs %*pbl:\n", this_cpu, nr_cpumask_bits, to_cpumask(backtrace_mask)); -- 2.7.2