mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: "Daniel Glöckner" <dg@emlix.com>
To: Sascha Hauer <s.hauer@pengutronix.de>,
	Barebox List <barebox@lists.infradead.org>
Cc: Edmund Henniges <eh@emlix.com>
Subject: Re: [PATCH 1/8] Introduce slices
Date: Mon, 9 Mar 2020 15:49:53 +0100	[thread overview]
Message-ID: <96699dd6-b00b-79e2-943d-52892e91cebf@emlix.com> (raw)
In-Reply-To: <20200306193406.20531-2-s.hauer@pengutronix.de>

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@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2020-03-09 14:50 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-06 19:33 Protect code from pollers Sascha Hauer
2020-03-06 19:33 ` [PATCH 1/8] Introduce slices Sascha Hauer
2020-03-09 14:49   ` Daniel Glöckner [this message]
2020-03-10 10:10     ` Sascha Hauer
2020-03-06 19:34 ` [PATCH 2/8] net: Add a slice to struct eth_device Sascha Hauer
2020-03-06 19:34 ` [PATCH 3/8] net: mdiobus: Add slice Sascha Hauer
2020-03-06 19:34 ` [PATCH 4/8] usb: Add a slice to usb host controllers Sascha Hauer
2020-03-06 19:34 ` [PATCH 5/8] usbnet: Add slice Sascha Hauer
2020-03-06 19:34 ` [PATCH 6/8] net: Call net_poll() in a poller Sascha Hauer
2020-03-06 19:34 ` [PATCH 7/8] net: reply to ping requests Sascha Hauer
2020-03-06 19:34 ` [PATCH 8/8] usbnet: Be more friendly in the receive path Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=96699dd6-b00b-79e2-943d-52892e91cebf@emlix.com \
    --to=dg@emlix.com \
    --cc=barebox@lists.infradead.org \
    --cc=eh@emlix.com \
    --cc=s.hauer@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox