On Mon, Mar 09, 2020 at 03:49:53PM +0100, Daniel Glöckner wrote: > 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. Agreed. > > > +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. Yes, good idea. I'll send an update for this. Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox