Re: [PATCH v19 02/13] x86/setup: Use parse_crashkernel_high_low() to simplify code
From: Leizhen (ThunderTown) <hidden>
Date: 2021-12-30 02:39:29
Also in:
kexec, linux-devicetree, linux-doc, lkml
On 2021/12/30 0:51, Borislav Petkov wrote:
On Wed, Dec 29, 2021 at 11:04:21PM +0800, Leizhen (ThunderTown) wrote:quoted
Chen Zhou and I tried to share the code because of a suggestion. After so many attempts, it doesn't seem to fit to make generic. Or maybe I haven't figured out a good solution yet.Well, you learned a very important lesson and the many attempts are not in vain: code sharing does not make sense in every case.quoted
I will put the patches that make arm64 support crashkernel...high,low to the front, then the parse_crashkernel() unification patches. Even if the second half of the patches is not ready for v5.18, the first half of the patches is ready.I think you should concentrate on the arm64 side which is, AFAICT, what you're trying to achieve.
Right, a patchset should focus on just one thing.
The "parse_crashkernel() unification" needs more thought because, as I said already, that doesn't make a whole lot of sense to me.
Yes, because it's not a functional improvement, it's not a performance optimization, it's also not a fix for a known bug, it's just a programmer's artistic pursuit.
If you want to enforce the fact that "low" makes sense only when "high" is supplied, parse_crashkernel_high_low() is not the right thing to do. You need to have a *single* function which does all the parsing where you can decide what to do: "if high, parse low", "if no high supplied, ignore low" and so on.
I understand your proposal, but parse_crashkernel_high_low() is a cost-effective
and profitable change, it makes the current code a little clearer, and avoid passing
unnecessary parameters "system_ram" and "crash_base" when other architectures use
parse_crashkernel_{high|low}().
I actually followed your advice in the beginning to do "parse_crashkernel() and
parse_crashkernel_{high|low}() unification". But I found it's difficult and the
end result may not be as good as expected. So I introduced parse_crashkernel_high_low().
The parameter "system_ram" and "crash_base" of parse_crashkernel() is not need by
"crashkernel=X,[high,low]". And parameter "low_size" of parse_crashkernel_high_low()
is not need by "crashkernel=X[@offset]". The "parse_crashkernel() unification"
complicates things. For example, the parameter "crash_size" means "low or high" memory
size for "crashkernel=X[@offset]", but only means "high" memory size for "crashkernel=X,high".
So we'd better give it two names with union.
And if those are supported on certain architectures only, you can do ifdeffery...
I don't think so. These __init functions are small and architecture-independent, and do not affect compilation of other architectures. There may be other architectures that use it in the future, such as the current arm64.
But I think I already stated that I don't like such unifications which introduce unnecessary dependencies between architectures. Therefore, I won't accept them into x86 unless there's a strong compelling reason. Which I don't see ATM.
OK.
Thx.
-- Regards, Zhen Lei _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel