On 24/05/21 21:48, Srikar Dronamraju wrote: > * Valentin Schneider <valentin.schnei...@arm.com> [2021-05-24 15:16:09]: >> Ok so from your arch you can figure out the *size* of the set of unique >> distances, but not the individual node_distance(a, b)... That's quite >> unfortunate. > > Yes, thats true. > >> >> I suppose one way to avoid the hook would be to write some "fake" distance >> values into your distance_lookup_table[] for offline nodes using your >> distance_ref_point_depth thing, i.e. ensure an iteration of >> node_distance(a, b) covers all distance values [1]. You can then keep patch >> 3 around, and that should roughly be it. >> > > Yes, this would suffice but to me its not very clean. > static int found[distance_ref_point_depth]; > > for_each_node(node){ > int i, nd, distance = LOCAL_DISTANCE; > goto out; > > nd = node_distance(node, first_online_node) > for (i=0; i < distance_ref_point_depth; i++, distance *= 2) { > if (node_online) { > if (distance != nd) > continue; > found[i] ++; > break; > } > if (found[i]) > continue; > distance_lookup_table[node][i] = > distance_lookup_table[first_online_node][i]; > found[i] ++; > break; > } > } > > But do note: We are setting a precedent for node distance between two nodes > to change. >
Indeed. AFAICT it's that or the unique-distance-values hook :/