Re: [PATCH 1/8] Introduce slices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux