From: Richard Cochran <richardcochran@gmail.com>
To: Grygorii Strashko <grygorii.strashko@ti.com>
Cc: "David S. Miller" <davem@davemloft.net>,
netdev@vger.kernel.org, Mugunthan V N <mugunthanvnm@ti.com>,
Sekhar Nori <nsekhar@ti.com>,
linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org,
WingMan Kwok <w-kwok2@ti.com>
Subject: Re: [PATCH 6/9] net: ethernet: ti: cpts: clean up event list if event pool is empty
Date: Wed, 14 Sep 2016 16:14:14 +0200 [thread overview]
Message-ID: <20160914141414.GD28592@localhost.localdomain> (raw)
In-Reply-To: <20160914130231.3035-7-grygorii.strashko@ti.com>
On Wed, Sep 14, 2016 at 04:02:28PM +0300, Grygorii Strashko wrote:
> From: WingMan Kwok <w-kwok2@ti.com>
>
> When a CPTS user does not exit gracefully by disabling cpts
> timestamping and leaving a joined multicast group, the system
> continues to receive and timestamps the ptp packets which eventually
> occupy all the event list entries. When this happns, the added code
> tries to remove some list entries which are expired.
>
> Signed-off-by: WingMan Kwok <w-kwok2@ti.com>
> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
> ---
> drivers/net/ethernet/ti/cpts.c | 30 ++++++++++++++++++++++++++++--
> 1 file changed, 28 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/ethernet/ti/cpts.c b/drivers/net/ethernet/ti/cpts.c
> index 970d4e2..ff8bb85 100644
> --- a/drivers/net/ethernet/ti/cpts.c
> +++ b/drivers/net/ethernet/ti/cpts.c
> @@ -57,22 +57,48 @@ static int cpts_fifo_pop(struct cpts *cpts, u32 *high, u32 *low)
> return -1;
> }
>
> +static int cpts_event_list_clean_up(struct cpts *cpts)
5 words, that is quite a mouth full. How about this instead?
static int cpts_purge_events(struct cpts *cpts);
> +{
> + struct list_head *this, *next;
> + struct cpts_event *event;
> + int removed = 0;
> +
> + list_for_each_safe(this, next, &cpts->events) {
> + event = list_entry(this, struct cpts_event, list);
> + if (event_expired(event)) {
> + list_del_init(&event->list);
> + list_add(&event->list, &cpts->pool);
> + ++removed;
> + }
> + }
> + return removed;
> +}
> +
> /*
> * Returns zero if matching event type was found.
> */
> static int cpts_fifo_read(struct cpts *cpts, int match)
> {
> int i, type = -1;
> + int removed;
No need for another variable, just change the return code above to
return removed ? 0 : -1;
and then you have ...
> u32 hi, lo;
> struct cpts_event *event;
>
> for (i = 0; i < CPTS_FIFO_DEPTH; i++) {
> if (cpts_fifo_pop(cpts, &hi, &lo))
> break;
> +
> if (list_empty(&cpts->pool)) {
> - pr_err("cpts: event pool is empty\n");
> - return -1;
> + removed = cpts_event_list_clean_up(cpts);
> + if (!removed) {
> + dev_err(cpts->dev,
> + "cpts: event pool is empty\n");
> + return -1;
> + }
if (cpts_purge_events(cpts)) {
dev_err(cpts->dev, "cpts: event pool empty\n");
return -1;
}
Notice how I avoided the ugly line break?
> + dev_dbg(cpts->dev,
> + "cpts: event pool cleaned up %d\n", removed);
> }
> +
> event = list_first_entry(&cpts->pool, struct cpts_event, list);
> event->tmo = jiffies + 2;
> event->high = hi;
> --
> 2.9.3
>
Thanks,
Richard
next prev parent reply other threads:[~2016-09-14 14:14 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-14 13:02 [PATCH 0/9] net: ethernet: ti: cpts: update and fixes Grygorii Strashko
2016-09-14 13:02 ` Grygorii Strashko
2016-09-14 13:02 ` [PATCH 1/9] net: ethernet: ti: exclude cpts from build when disabled Grygorii Strashko
2016-09-14 13:02 ` Grygorii Strashko
2016-09-14 13:02 ` [PATCH 2/9] net: ethernet: ti: cpsw: minimize direct access to struct cpts Grygorii Strashko
2016-09-14 13:02 ` Grygorii Strashko
2016-09-14 13:02 ` [PATCH 3/9] net: ethernet: ti: cpts: rework initialization/deinitialization Grygorii Strashko
2016-09-14 13:02 ` Grygorii Strashko
2016-09-14 13:52 ` Richard Cochran
2016-09-14 20:10 ` Grygorii Strashko
2016-09-14 20:10 ` Grygorii Strashko
2016-09-14 20:32 ` Richard Cochran
2016-09-14 20:37 ` Grygorii Strashko
2016-09-14 20:37 ` Grygorii Strashko
2016-09-14 20:52 ` Richard Cochran
2016-09-14 20:59 ` Grygorii Strashko
2016-09-14 20:59 ` Grygorii Strashko
2016-09-15 8:13 ` Richard Cochran
2016-09-14 13:02 ` [PATCH 4/9] net: ethernet: ti: cpts: move dt props parsing to cpts driver Grygorii Strashko
2016-09-14 13:02 ` Grygorii Strashko
2016-09-14 13:55 ` Richard Cochran
2016-09-14 19:45 ` Grygorii Strashko
2016-09-14 19:45 ` Grygorii Strashko
2016-09-14 20:03 ` Richard Cochran
2016-09-14 13:02 ` [PATCH 5/9] net: ethernet: ti: cpts: add return value to tx and rx timestamp funcitons Grygorii Strashko
2016-09-14 13:02 ` Grygorii Strashko
2016-09-14 14:00 ` Richard Cochran
2016-09-14 13:02 ` [PATCH 6/9] net: ethernet: ti: cpts: clean up event list if event pool is empty Grygorii Strashko
2016-09-14 13:02 ` Grygorii Strashko
2016-09-14 14:14 ` Richard Cochran [this message]
2016-09-14 19:54 ` Grygorii Strashko
2016-09-14 19:54 ` Grygorii Strashko
2016-09-14 13:02 ` [PATCH 7/9] net: ethernet: ti: cpts: calc mult and shift from refclk freq Grygorii Strashko
2016-09-14 13:02 ` Grygorii Strashko
2016-09-14 14:22 ` Richard Cochran
2016-09-14 19:59 ` Grygorii Strashko
2016-09-14 19:59 ` Grygorii Strashko
2016-09-14 20:26 ` Richard Cochran
2016-09-14 20:47 ` Grygorii Strashko
2016-09-14 20:47 ` Grygorii Strashko
2016-09-14 21:03 ` Richard Cochran
2016-09-14 21:14 ` Grygorii Strashko
2016-09-14 21:14 ` Grygorii Strashko
2016-09-15 11:58 ` Richard Cochran
2016-09-15 13:49 ` Richard Cochran
2016-09-14 13:02 ` [PATCH 8/9] net: ethernet: ti: cpts: fix overflow check period Grygorii Strashko
2016-09-14 13:02 ` Grygorii Strashko
2016-09-14 14:25 ` Richard Cochran
2016-09-14 20:03 ` Grygorii Strashko
2016-09-14 20:03 ` Grygorii Strashko
2016-09-14 20:08 ` Richard Cochran
2016-09-14 20:23 ` Grygorii Strashko
2016-09-14 20:23 ` Grygorii Strashko
2016-09-14 20:43 ` Richard Cochran
2016-09-14 20:48 ` Grygorii Strashko
2016-09-14 20:48 ` Grygorii Strashko
2016-09-14 13:02 ` [PATCH 9/9] net: ethernet: ti: cpts: switch to readl/writel_relaxed() Grygorii Strashko
2016-09-14 13:02 ` Grygorii Strashko
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=20160914141414.GD28592@localhost.localdomain \
--to=richardcochran@gmail.com \
--cc=davem@davemloft.net \
--cc=grygorii.strashko@ti.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=mugunthanvnm@ti.com \
--cc=netdev@vger.kernel.org \
--cc=nsekhar@ti.com \
--cc=w-kwok2@ti.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.