Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759984AbbLCMW1 (ORCPT ); Thu, 3 Dec 2015 07:22:27 -0500 Received: from mail.skyhub.de ([78.46.96.112]:36340 "EHLO mail.skyhub.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751854AbbLCMWZ (ORCPT ); Thu, 3 Dec 2015 07:22:25 -0500 Date: Thu, 3 Dec 2015 13:22:20 +0100 From: Borislav Petkov To: =?utf-8?B?5rKz5ZCI6Iux5a6PIC8gS0FXQUnvvIxISURFSElSTw==?= Cc: Jonathan Corbet , Peter Zijlstra , Ingo Molnar , "Eric W. Biederman" , "H. Peter Anvin" , Andrew Morton , Thomas Gleixner , Vivek Goyal , Baoquan He , "linux-doc@vger.kernel.org" , "x86@kernel.org" , "kexec@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Michal Hocko , =?utf-8?B?5bmz5p2+6ZuF5bezIC8gSElSQU1BVFXvvIxNQVNBTUk=?= Subject: Re: [V5 PATCH 3/4] kexec: Fix race between panic() and crash_kexec() called directly Message-ID: <20151203122220.GA3213@pd.tnic> References: <20151120093641.4285.97253.stgit@softrs> <20151120093648.4285.17715.stgit@softrs> <20151125095457.GB29499@pd.tnic> <04EAB7311EE43145B2D3536183D1A84454A3B032@GSjpTKYDCembx31.service.hitachi.net> <20151202154023.GH3783@pd.tnic> <04EAB7311EE43145B2D3536183D1A84454A3CD95@GSjpTKYDCembx31.service.hitachi.net> <20151203093544.GC22271@pd.tnic> <04EAB7311EE43145B2D3536183D1A84454A3DF12@GSjpTKYDCembx31.service.hitachi.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <04EAB7311EE43145B2D3536183D1A84454A3DF12@GSjpTKYDCembx31.service.hitachi.net> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1778 Lines: 50 On Thu, Dec 03, 2015 at 11:29:21AM +0000, 河合英宏 / KAWAI,HIDEHIRO wrote: > I was arguing about the case of oops_end --> crash_kexec > --> return from crash_kexec because of !kexec_crash_image --> > panic. Aha. > In the case of panic --> __crash_kexec, __crash_kexec is called > only once, so we don't need to check the return value of __crash_kexec > as you suggested. So I thought you stated about crash_kexec --> panic > case. No, I meant the other way around. > I also mentioned !kexec_crash_image case... I must've missed it. > No. The first CPU calls panic, and then it calls __crash_kexec. > Because of !kexec_crash_image, it returns from __crash_kexec and > continues to the panic procedure. At the same time, another CPU > tries to call panic(), but it doesn't run the panic procedure; > panic_cpu prevents the second CPU from running it. > > This means __crash_kexec is called only once even if we don't > check the return value of __crash_kexec. I think we're on the same page, even if we express it differently - the other CPUs entering panic() will loop in panic_smp_self_stop() so they won't reach __crash_kexec(). > (Please note that crash_kexec can be called multiple times in the > case of oops_end() --> crash_kexec().) Right, and that was the case that was bugging me - calling into crash_kexec() on multiple CPUs but it is a trylock and a pointer test - I guess that's diminishingly small overhead to care. Thanks. -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/