Thread (37 messages) 37 messages, 5 authors, 2016-12-09

Re: [PATCH 1/6] net: ethernet: ti: netcp: add support of cpts

From: Richard Cochran <richardcochran@gmail.com>
Date: 2016-11-30 09:45:00
Also in: linux-devicetree, linux-omap, lkml

On Mon, Nov 28, 2016 at 05:04:23PM -0600, Grygorii Strashko wrote:
quoted hunk ↗ jump to hunk
@@ -678,6 +744,9 @@ struct gbe_priv {
 	int				num_et_stats;
 	/*  Lock for updating the hwstats */
 	spinlock_t			hw_stats_lock;
+
+	int                             cpts_registered;
The usage of this counter is racy.
+	struct cpts                     *cpts;
 };
This ++ and -- business ...
+static void gbe_register_cpts(struct gbe_priv *gbe_dev)
+{
+	if (!gbe_dev->cpts)
+		return;
+
+	if (gbe_dev->cpts_registered > 0)
+		goto done;
+
+	if (cpts_register(gbe_dev->cpts)) {
+		dev_err(gbe_dev->dev, "error registering cpts device\n");
+		return;
+	}
+
+done:
+	++gbe_dev->cpts_registered;
+}
+
+static void gbe_unregister_cpts(struct gbe_priv *gbe_dev)
+{
+	if (!gbe_dev->cpts || (gbe_dev->cpts_registered <= 0))
+		return;
+
+	if (--gbe_dev->cpts_registered)
+		return;
+
+	cpts_unregister(gbe_dev->cpts);
+}
is invoked from your open() and close() methods, but those methods
are not serialized among multiple ports.

Thanks,
Richard
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help