On 01.09.2025 12:31, Andrew Cooper wrote: > On 01/09/2025 9:56 am, Jan Beulich wrote: >> With the processing done linearly (rather than recursively), checking >> whether any of the features was previously seen is wrong: That would >> e.g. trigger for this simple set of dependencies >> >> X: [A, B] >> A: [C] >> B: [C] >> >> (observed in reality when making AMX-AVX512 dependent upon both >> AMX-TILE and AVX512F, causing XSAVE to see AMX-AVX512 twice in its list >> of dependents). But checking the whole accumulated set also isn't >> necessary - just checking the feature we're processing dependents of is >> sufficient. We may detect a cycle later that way, but we still will >> detect it. What we need to avoid is adding a feature again when we've >> already seen it. >> >> As a result, seeding "seen[]" with "feat" isn't necessary anymore. >> >> Fixes: fe4408d180f4 ("xen/x86: Generate deep dependencies of features") >> Signed-off-by: Jan Beulich <jbeul...@suse.com> > > Acked-by: Andrew Cooper <andrew.coop...@citrix.com>, with one further > minor adjustment.
Thanks. >> --- a/xen/tools/gen-cpuid.py >> +++ b/xen/tools/gen-cpuid.py >> @@ -379,14 +379,17 @@ def crunch_numbers(state): >> >> f = to_process.pop(0) >> >> + if f == feat: >> + raise Fail("ERROR: Cycle found when processing %s" % \ > > No need for the \ here. Okay, but then why is there one in the commented out code you touch in the other patch? Jan