On 2021/12/30 0:51, Borislav Petkov wrote: > On Wed, Dec 29, 2021 at 11:04:21PM +0800, Leizhen (ThunderTown) wrote: >> 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. > >> 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