/* Distribute collected unsorted blames to the respected sorted lists * in the various origins. */ static void distribute_blame(struct blame_scoreboard *sb, struct blame_entry *blamed) { blamed = llist_mergesort(blamed, get_next_blame, set_next_blame, compare_blame_suspect); while (blamed) { struct blame_origin *porigin = blamed->suspect; struct blame_entry *suspects = NULL; do { struct blame_entry *next = blamed->next; blamed->next = suspects; suspects = blamed; blamed = next; } while (blamed && blamed->suspect == porigin); suspects = reverse_blame(suspects, NULL); queue_blames(sb, porigin, suspects); } }
void blame_sort_final(struct blame_scoreboard *sb) { sb->ent = llist_mergesort(sb->ent, get_next_blame, set_next_blame, compare_blame_final); }