Hello Sascha, Am 03/06/20 um 20:33 schrieb Sascha Hauer: > +static void __slice_acquire(struct slice *slice, int add) > +{ > + struct slice_entry *se; > + > + slice->acquired += add; > + > + if (slice->acquired < 0) { > + pr_err("Slice %s acquired count drops below zero\n", > + slice_name(slice)); > + dump_stack(); > + slice->acquired = 0; > + return; > + } > + > + list_for_each_entry(se, &slice->deps, list) > + __slice_acquire(se->slice, add); I don't think we need that loop. slice_acquired will already recurse into the dependency tree. That loop would also mark resources as used which are still unused. The network packet handlers can safely do MDIO transfers because the network stack does not talk to the PHY while checking for received packets. > +bool slice_acquired(struct slice *slice) > +{ > + struct slice_entry *se; > + > + if (slice->acquired) > + return true; > + > + list_for_each_entry(se, &slice->deps, list) > + if (slice_acquired(se->slice)) > + return true; > + > + return false; > +} It would be nice if this function was able to detect cyclic dependencies if DEBUG. This can be done by setting slice->acquired to INT_MIN while recursing and checking if any of the values found are negative. Best regards, Daniel -- Dipl.-Math. Daniel Glöckner, emlix GmbH, http://www.emlix.com Fon +49 551 30664-0, Fax +49 551 30664-11, Gothaer Platz 3, 37083 Göttingen, Germany Sitz der Gesellschaft: Göttingen, Amtsgericht Göttingen HR B 3160 Geschäftsführung: Heike Jordan, Dr. Uwe Kracke Ust-IdNr.: DE 205 198 055 emlix - your embedded linux partner _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox