From: <Daniel.Machon@microchip.com>
To: <simon.horman@corigine.com>
Cc: <netdev@vger.kernel.org>, <davem@davemloft.net>,
<edumazet@google.com>, <kuba@kernel.org>, <pabeni@redhat.com>,
<Lars.Povlsen@microchip.com>, <Steen.Hegelund@microchip.com>,
<UNGLinuxDriver@microchip.com>, <joe@perches.com>,
<richardcochran@gmail.com>, <casper.casan@gmail.com>,
<Horatiu.Vultur@microchip.com>, <shangxiaojing@huawei.com>,
<rmk+kernel@armlinux.org.uk>, <nhuck@google.com>,
<error27@gmail.com>, <linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH net-next 03/10] net: microchip: sparx5: add support for Service Dual Leacky Buckets
Date: Sun, 5 Feb 2023 20:11:02 +0000 [thread overview]
Message-ID: <Y+ANVTMT7jgV0i0l@DEN-LT-70577> (raw)
In-Reply-To: <Y95VRJWV4NfSDYUR@corigine.com>
Hi Simon,
Thanks for reviewing my patches, appreciate it!
> > +static u32 sparx5_sdlb_group_get_last(struct sparx5 *sparx5, u32 group)
> > +{
> > + u32 itr, next;
> > +
> > + itr = sparx5_sdlb_group_get_first(sparx5, group);
> > +
> > + for (;;) {
>
> Unbounded loops like this give me some apprehension.
> Will they always terminate?
Yes, it will always terminate - unless the add() del() functions are
buggy to begin with.
The end of the leak chain is marked by an index pointing to itself, and
this is the exit condition I am looking for in the unbounded loop.
>
> > + next = sparx5_sdlb_group_get_next(sparx5, group, itr);
> > + if (itr == next)
> > + return itr;
> > +
> > + itr = next;
> > + }
> > +}
>
> ...
>
> > +static int sparx5_sdlb_group_get_adjacent(struct sparx5 *sparx5, u32 group,
> > + u32 idx, u32 *prev, u32 *next,
> > + u32 *first)
> > +{
> > + u32 itr;
> > +
> > + *first = sparx5_sdlb_group_get_first(sparx5, group);
> > + *prev = *first;
> > + *next = *first;
> > + itr = *first;
> > +
> > + for (;;) {
> > + *next = sparx5_sdlb_group_get_next(sparx5, group, itr);
> > +
> > + if (itr == idx)
> > + return 0; /* Found it */
> > +
> > + if (itr == *next)
> > + return -EINVAL; /* Was not found */
> > +
> > + *prev = itr;
> > + itr = *next;
> > + }
> > +}
> > +
> > +static int sparx5_sdlb_group_get_count(struct sparx5 *sparx5, u32 group)
> > +{
> > + u32 itr, next;
> > + int count = 0;
> > +
> > + itr = sparx5_sdlb_group_get_first(sparx5, group);
> > +
> > + for (;;) {
> > + next = sparx5_sdlb_group_get_next(sparx5, group, itr);
> > + if (itr == next)
> > + return count;
> > +
> > + itr = next;
> > + count++;
> > + }
> > +}
>
> ...
>
> > +int sparx5_sdlb_group_get_by_index(struct sparx5 *sparx5, u32 idx, u32 *group)
> > +{
> > + u32 itr, next;
> > + int i;
> > +
> > + for (i = 0; i < SPX5_SDLB_GROUP_CNT; i++) {
> > + if (sparx5_sdlb_group_is_empty(sparx5, i))
> > + continue;
> > +
> > + itr = sparx5_sdlb_group_get_first(sparx5, i);
> > +
> > + for (;;) {
> > + next = sparx5_sdlb_group_get_next(sparx5, i, itr);
> > +
> > + if (itr == idx) {
> > + *group = i;
> > + return 0; /* Found it */
> > + }
> > + if (itr == next)
> > + break; /* Was not found */
> > +
> > + itr = next;
> > + }
> > + }
> > +
> > + return -EINVAL;
> > +}
>
> ...
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: <Daniel.Machon@microchip.com>
To: <simon.horman@corigine.com>
Cc: <netdev@vger.kernel.org>, <davem@davemloft.net>,
<edumazet@google.com>, <kuba@kernel.org>, <pabeni@redhat.com>,
<Lars.Povlsen@microchip.com>, <Steen.Hegelund@microchip.com>,
<UNGLinuxDriver@microchip.com>, <joe@perches.com>,
<richardcochran@gmail.com>, <casper.casan@gmail.com>,
<Horatiu.Vultur@microchip.com>, <shangxiaojing@huawei.com>,
<rmk+kernel@armlinux.org.uk>, <nhuck@google.com>,
<error27@gmail.com>, <linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH net-next 03/10] net: microchip: sparx5: add support for Service Dual Leacky Buckets
Date: Sun, 5 Feb 2023 20:11:02 +0000 [thread overview]
Message-ID: <Y+ANVTMT7jgV0i0l@DEN-LT-70577> (raw)
In-Reply-To: <Y95VRJWV4NfSDYUR@corigine.com>
Hi Simon,
Thanks for reviewing my patches, appreciate it!
> > +static u32 sparx5_sdlb_group_get_last(struct sparx5 *sparx5, u32 group)
> > +{
> > + u32 itr, next;
> > +
> > + itr = sparx5_sdlb_group_get_first(sparx5, group);
> > +
> > + for (;;) {
>
> Unbounded loops like this give me some apprehension.
> Will they always terminate?
Yes, it will always terminate - unless the add() del() functions are
buggy to begin with.
The end of the leak chain is marked by an index pointing to itself, and
this is the exit condition I am looking for in the unbounded loop.
>
> > + next = sparx5_sdlb_group_get_next(sparx5, group, itr);
> > + if (itr == next)
> > + return itr;
> > +
> > + itr = next;
> > + }
> > +}
>
> ...
>
> > +static int sparx5_sdlb_group_get_adjacent(struct sparx5 *sparx5, u32 group,
> > + u32 idx, u32 *prev, u32 *next,
> > + u32 *first)
> > +{
> > + u32 itr;
> > +
> > + *first = sparx5_sdlb_group_get_first(sparx5, group);
> > + *prev = *first;
> > + *next = *first;
> > + itr = *first;
> > +
> > + for (;;) {
> > + *next = sparx5_sdlb_group_get_next(sparx5, group, itr);
> > +
> > + if (itr == idx)
> > + return 0; /* Found it */
> > +
> > + if (itr == *next)
> > + return -EINVAL; /* Was not found */
> > +
> > + *prev = itr;
> > + itr = *next;
> > + }
> > +}
> > +
> > +static int sparx5_sdlb_group_get_count(struct sparx5 *sparx5, u32 group)
> > +{
> > + u32 itr, next;
> > + int count = 0;
> > +
> > + itr = sparx5_sdlb_group_get_first(sparx5, group);
> > +
> > + for (;;) {
> > + next = sparx5_sdlb_group_get_next(sparx5, group, itr);
> > + if (itr == next)
> > + return count;
> > +
> > + itr = next;
> > + count++;
> > + }
> > +}
>
> ...
>
> > +int sparx5_sdlb_group_get_by_index(struct sparx5 *sparx5, u32 idx, u32 *group)
> > +{
> > + u32 itr, next;
> > + int i;
> > +
> > + for (i = 0; i < SPX5_SDLB_GROUP_CNT; i++) {
> > + if (sparx5_sdlb_group_is_empty(sparx5, i))
> > + continue;
> > +
> > + itr = sparx5_sdlb_group_get_first(sparx5, i);
> > +
> > + for (;;) {
> > + next = sparx5_sdlb_group_get_next(sparx5, i, itr);
> > +
> > + if (itr == idx) {
> > + *group = i;
> > + return 0; /* Found it */
> > + }
> > + if (itr == next)
> > + break; /* Was not found */
> > +
> > + itr = next;
> > + }
> > + }
> > +
> > + return -EINVAL;
> > +}
>
> ...
next prev parent reply other threads:[~2023-02-05 20:12 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-02 10:43 [PATCH net-next 00/10] Add support for PSFP in Sparx5 Daniel Machon
2023-02-02 10:43 ` Daniel Machon
2023-02-02 10:43 ` [PATCH net-next 01/10] net: microchip: add registers needed for PSFP Daniel Machon
2023-02-02 10:43 ` Daniel Machon
2023-02-04 12:47 ` Simon Horman
2023-02-04 12:47 ` Simon Horman
2023-02-02 10:43 ` [PATCH net-next 02/10] net: microchip: sparx5: add resource pools Daniel Machon
2023-02-02 10:43 ` Daniel Machon
2023-02-04 12:47 ` Simon Horman
2023-02-04 12:47 ` Simon Horman
2023-02-02 10:43 ` [PATCH net-next 03/10] net: microchip: sparx5: add support for Service Dual Leacky Buckets Daniel Machon
2023-02-02 10:43 ` Daniel Machon
2023-02-04 12:53 ` Simon Horman
2023-02-04 12:53 ` Simon Horman
2023-02-05 20:11 ` Daniel.Machon [this message]
2023-02-05 20:11 ` Daniel.Machon
2023-02-06 10:18 ` Simon Horman
2023-02-06 10:18 ` Simon Horman
2023-02-02 10:43 ` [PATCH net-next 04/10] net: microchip: sparx5: add support for service policers Daniel Machon
2023-02-02 10:43 ` Daniel Machon
2023-02-04 12:53 ` Simon Horman
2023-02-04 12:53 ` Simon Horman
2023-02-02 10:43 ` [PATCH net-next 05/10] net: microchip: sparx5: add support for PSFP flow-meters Daniel Machon
2023-02-02 10:43 ` Daniel Machon
2023-02-04 12:54 ` Simon Horman
2023-02-04 12:54 ` Simon Horman
2023-02-02 10:43 ` [PATCH net-next 06/10] net: microchip: sparx5: add function for calculating PTP basetime Daniel Machon
2023-02-02 10:43 ` Daniel Machon
2023-02-04 12:55 ` Simon Horman
2023-02-04 12:55 ` Simon Horman
2023-02-02 10:43 ` [PATCH net-next 07/10] net: microchip: sparx5: add support for PSFP stream gates Daniel Machon
2023-02-02 10:43 ` Daniel Machon
2023-02-04 12:56 ` Simon Horman
2023-02-04 12:56 ` Simon Horman
2023-02-02 10:43 ` [PATCH net-next 08/10] net: microchip: sparx5: add support for PSFP stream filters Daniel Machon
2023-02-02 10:43 ` Daniel Machon
2023-02-04 12:56 ` Simon Horman
2023-02-04 12:56 ` Simon Horman
2023-02-02 10:43 ` [PATCH net-next 09/10] net: microchip: sparx5: initialize PSFP Daniel Machon
2023-02-02 10:43 ` Daniel Machon
2023-02-04 12:46 ` Simon Horman
2023-02-04 12:46 ` Simon Horman
2023-02-02 10:43 ` [PATCH net-next 10/10] sparx5: add support for configuring PSFP via tc Daniel Machon
2023-02-02 10:43 ` Daniel Machon
2023-02-04 12:57 ` Simon Horman
2023-02-04 12:57 ` Simon Horman
2023-02-06 8:50 ` [PATCH net-next 00/10] Add support for PSFP in Sparx5 patchwork-bot+netdevbpf
2023-02-06 8:50 ` patchwork-bot+netdevbpf
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=Y+ANVTMT7jgV0i0l@DEN-LT-70577 \
--to=daniel.machon@microchip.com \
--cc=Horatiu.Vultur@microchip.com \
--cc=Lars.Povlsen@microchip.com \
--cc=Steen.Hegelund@microchip.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=casper.casan@gmail.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=error27@gmail.com \
--cc=joe@perches.com \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=nhuck@google.com \
--cc=pabeni@redhat.com \
--cc=richardcochran@gmail.com \
--cc=rmk+kernel@armlinux.org.uk \
--cc=shangxiaojing@huawei.com \
--cc=simon.horman@corigine.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.