Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Mar 2014 13:59:48 +0400
From:      Andrew Rybchenko <Andrew.Rybchenko@oktetlabs.ru>
To:        net@FreeBSD.org
Subject:   [PATCH 5/6] sfxge: access statistics buffers under port lock
Message-ID:  <53281914.1000309@oktetlabs.ru>

next in thread | raw e-mail | index | archive | help
sfxge: access statistics buffers under port lock

Allow access to statistics data not only from sysctl handlers.

Submitted-by:   Boris Misenov <Boris.Misenov@oktetlabs.ru>
Sponsored by:   Solarflare Communications, Inc.

diff -r af2586a023d8 -r 7f58b1a5ea60 src/driver/freebsd/sfxge_port.c
--- a/head/sys/dev/sfxge/sfxge_port.c    Mon Mar 10 11:37:12 2014 +0400
+++ b/head/sys/dev/sfxge/sfxge_port.c    Mon Mar 10 11:37:12 2014 +0400
@@ -48,7 +48,7 @@
      unsigned int count;
      int rc;

-    mtx_lock(&port->lock);
+    mtx_assert(&port->lock, MA_OWNED);

      if (port->init_state != SFXGE_PORT_STARTED) {
          rc = 0;
@@ -82,7 +82,6 @@

      rc = ETIMEDOUT;
  out:
-    mtx_unlock(&port->lock);
      return rc;
  }

@@ -93,12 +92,16 @@
      unsigned int id = arg2;
      int rc;

+    mtx_lock(&sc->port.lock);
      if ((rc = sfxge_mac_stat_update(sc)) != 0)
-        return rc;
+        goto out;

-    return SYSCTL_OUT(req,
+    rc = SYSCTL_OUT(req,
                (uint64_t *)sc->port.mac_stats.decode_buf + id,
                sizeof(uint64_t));
+out:
+    mtx_unlock(&sc->port.lock);
+    return rc;
  }

  static void
@@ -442,7 +445,7 @@
      unsigned int count;
      int rc;

-    mtx_lock(&port->lock);
+    mtx_assert(&port->lock, MA_OWNED);

      if (port->init_state != SFXGE_PORT_STARTED) {
          rc = 0;
@@ -476,7 +479,6 @@

      rc = ETIMEDOUT;
  out:
-    mtx_unlock(&port->lock);
      return rc;
  }

@@ -487,12 +489,16 @@
      unsigned int id = arg2;
      int rc;

+    mtx_lock(&sc->port.lock);
      if ((rc = sfxge_phy_stat_update(sc)) != 0)
-        return rc;
+        goto out;

-    return SYSCTL_OUT(req,
+    rc = SYSCTL_OUT(req,
                (uint32_t *)sc->port.phy_stats.decode_buf + id,
                sizeof(uint32_t));
+out:
+    mtx_unlock(&sc->port.lock);
+    return rc;
  }

  static void




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?53281914.1000309>