[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen stable-4.20] x86/gen-cpuid: correct cycle detection
commit 24fef7a86f668a6d46881bf32a85e8ab10b32740 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Wed Sep 3 13:58:55 2025 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Wed Sep 3 13:58:55 2025 +0200 x86/gen-cpuid: correct cycle detection 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 <jbeulich@xxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> master commit: 3999ff0d307a9a901ad1b5ad56e0dde657fec558 master date: 2025-09-01 13:07:53 +0200 --- xen/tools/gen-cpuid.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/xen/tools/gen-cpuid.py b/xen/tools/gen-cpuid.py index 163b105bc6..98327d0144 100755 --- a/xen/tools/gen-cpuid.py +++ b/xen/tools/gen-cpuid.py @@ -350,7 +350,7 @@ def crunch_numbers(state): for feat in deep_features: - seen = [feat] + seen = [] to_process = list(deps[feat]) while len(to_process): @@ -363,14 +363,17 @@ def crunch_numbers(state): f = to_process.pop(0) + if f == feat: + raise Fail("ERROR: Cycle found when processing %s" % + (state.names[f], )) + if f in seen: - raise Fail("ERROR: Cycle found with %s when processing %s" - % (state.names[f], state.names[feat])) + continue seen.append(f) to_process = list(set(to_process + deps.get(f, []))) - state.deep_deps[feat] = seen[1:] + state.deep_deps[feat] = seen state.deep_features = deps.keys() state.nr_deep_deps = len(state.deep_deps.keys()) -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.20
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |