Author: hselasky
Date: Mon Jan  4 09:49:53 2016
New Revision: 293154
URL: https://svnweb.freebsd.org/changeset/base/293154

Log:
  MFC r292837:
  Add support for sysctl tunables to 10-stable and older. Pushed through
  head first to simplify driver maintenance.
  
  MFC after:    1 week
  Submitted by: Drew Gallatin <galla...@freebsd.org>
  Differential Revision:        https://reviews.freebsd.org/D4552
  Sponsored by: Mellanox Technologies

Modified:
  stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c
==============================================================================
--- stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c    Mon Jan  4 09:47:20 
2016        (r293153)
+++ stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_ethtool.c    Mon Jan  4 09:49:53 
2016        (r293154)
@@ -58,13 +58,17 @@ mlx5e_ethtool_handler(SYSCTL_HANDLER_ARG
 
        PRIV_LOCK(priv);
        value = priv->params_ethtool.arg[arg2];
-       error = sysctl_handle_64(oidp, &value, 0, req);
-       if (error || req->newptr == NULL ||
-           value == priv->params_ethtool.arg[arg2])
-               goto done;
+       if (req != NULL) {
+               error = sysctl_handle_64(oidp, &value, 0, req);
+               if (error || req->newptr == NULL ||
+                   value == priv->params_ethtool.arg[arg2])
+                       goto done;
 
-       /* assign new value */
-       priv->params_ethtool.arg[arg2] = value;
+               /* assign new value */
+               priv->params_ethtool.arg[arg2] = value;
+       } else {
+               error = 0;
+       }
 
        /* check if device is gone */
        if (priv->gone) {
@@ -483,10 +487,30 @@ mlx5e_create_ethtool(struct mlx5e_priv *
                            CTLFLAG_MPSAFE, priv, x, &mlx5e_ethtool_handler, 
"QU",
                            mlx5e_params_desc[2 * x + 1]);
                } else {
+#if (__FreeBSD_version < 1100000)
+                       char path[64];
+#endif
+                       /*
+                        * NOTE: In FreeBSD-11 and newer the
+                        * CTLFLAG_RWTUN flag will take care of
+                        * loading default sysctl value from the
+                        * kernel environment, if any:
+                        */
                        SYSCTL_ADD_PROC(&priv->sysctl_ctx, 
SYSCTL_CHILDREN(node), OID_AUTO,
                            mlx5e_params_desc[2 * x], CTLTYPE_U64 | 
CTLFLAG_RWTUN |
                            CTLFLAG_MPSAFE, priv, x, &mlx5e_ethtool_handler, 
"QU",
                            mlx5e_params_desc[2 * x + 1]);
+
+#if (__FreeBSD_version < 1100000)
+                       /* compute path for sysctl */
+                       snprintf(path, sizeof(path), "dev.mce.%d.conf.%s",
+                           device_get_unit(priv->mdev->pdev->dev.bsddev),
+                           mlx5e_params_desc[2 * x]);
+
+                       /* try to fetch tunable, if any */
+                       if (TUNABLE_QUAD_FETCH(path, 
&priv->params_ethtool.arg[x]))
+                               mlx5e_ethtool_handler(NULL, priv, x, NULL);
+#endif
                }
        }
 
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to