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.