[PATCH 5/6] sfxge: access statistics buffers under port lock

Andrew Rybchenko Andrew.Rybchenko at oktetlabs.ru
Tue Mar 18 09:59:50 UTC 2014


sfxge: access statistics buffers under port lock

Allow access to statistics data not only from sysctl handlers.

Submitted-by:   Boris Misenov <Boris.Misenov at 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



More information about the freebsd-net mailing list