Whamcloud - gitweb
LU-6261 gnilnd: Add pkey module parameter
[fs/lustre-release.git] / lnet / klnds / gnilnd / gnilnd_sysctl.c
index 5d9d742..aae29d5 100644 (file)
@@ -1,6 +1,8 @@
 /*
  * Copyright (C) 2012 Cray, Inc.
  *
+ * Copyright (c) 2014, Intel Corporation.
+ *
  *   Author: Nic Henke <nic@cray.com>
  *   Author: James Shimek <jshimek@cray.com>
  *
 
 #include "gnilnd.h"
 
-#define GNILND_RCA_INJ_STRLEN 16
+#define GNILND_PEERSTATE_STRLEN 16
 typedef struct kgn_sysctl_data {
        int                     ksd_pause_trigger;
        int                     ksd_quiesce_secs;
        int                     ksd_rdmaq_override;
-       char                    ksd_rca_inject[GNILND_RCA_INJ_STRLEN];
+       char                    ksd_peer_state[GNILND_PEERSTATE_STRLEN];
 } kgn_sysctl_data_t;
 
 static kgn_sysctl_data_t        kgnilnd_sysctl;
@@ -39,26 +41,10 @@ static kgn_sysctl_data_t        kgnilnd_sysctl;
 #if defined(CONFIG_SYSCTL)
 
 static struct ctl_table_header *kgnilnd_table_header = NULL;
-#ifndef HAVE_SYSCTL_UNNUMBERED
-
-enum {
-       GNILND_VERSION = 1,
-       GNILND_THREAD_PAUSE,
-       GNILND_HW_QUIESCE,
-       GNILND_STACK_RESET,
-       GNILND_RDMAQ_OVERRIDE,
-       GNILND_RCA_INJECT,
-};
-#else
-#define GNILND_VERSION             CTL_UNNUMBERED
-#define GNILND_THREAD_PAUSE        CTL_UNNUMBERED
-#define GNILND_HW_QUIESCE          CTL_UNNUMBERED
-#define GNILND_STACK_RESET         CTL_UNNUMBERED
-#define GNILND_RDMAQ_OVERRIDE      CTL_UNNUMBERED
-#define GNILND_RCA_INJECT          CTL_UNNUMBERED
-#endif
 
-static int LL_PROC_PROTO(proc_toggle_thread_pause)
+static int
+proc_toggle_thread_pause(struct ctl_table *table, int write,
+                        void __user *buffer, size_t *lenp, loff_t *ppos)
 {
        int  old_val = kgnilnd_sysctl.ksd_pause_trigger;
        int  rc = 0;
@@ -76,17 +62,19 @@ static int LL_PROC_PROTO(proc_toggle_thread_pause)
        }
 
        if (old_val != kgnilnd_sysctl.ksd_pause_trigger) {
-               down(&kgnilnd_data.kgn_quiesce_sem);
+               mutex_lock(&kgnilnd_data.kgn_quiesce_mutex);
                CDEBUG(D_NET, "setting quiesce_trigger %d\n", old_val);
                kgnilnd_data.kgn_quiesce_trigger = kgnilnd_sysctl.ksd_pause_trigger;
                kgnilnd_quiesce_wait("admin sysctl");
-               up(&kgnilnd_data.kgn_quiesce_sem);
+               mutex_unlock(&kgnilnd_data.kgn_quiesce_mutex);
        }
 
        RETURN(rc);
 }
 
-static int LL_PROC_PROTO(proc_hw_quiesce)
+static int
+proc_hw_quiesce(struct ctl_table *table, int write, void __user *buffer,
+               size_t *lenp, loff_t *ppos)
 {
        int              rc = 0;
        kgn_device_t    *dev;
@@ -115,11 +103,13 @@ static int LL_PROC_PROTO(proc_hw_quiesce)
        RETURN(rc);
 }
 
-int LL_PROC_PROTO(proc_trigger_stack_reset)
+static int
+proc_trigger_stack_reset(struct ctl_table *table, int write,
+                        void __user *buffer, size_t *lenp, loff_t *ppos)
 {
        int              rc = 0;
-       int                i = 1;
-       kgn_device_t    *dev;
+       int              i = 1;
+       kgn_device_t    *dev;
        ENTRY;
 
        if (!write) {
@@ -137,17 +127,20 @@ int LL_PROC_PROTO(proc_trigger_stack_reset)
 
        /* Wait for the reset to complete.  This prevents any races in testing
         * where we'd immediately try to send traffic again */
-       while (kgnilnd_data.kgn_needs_reset != 0) {
-              i++;
-              LCONSOLE((((i) & (-i)) == i) ? D_WARNING : D_NET,
-                              "Waiting for stack reset request to clear\n");
-              cfs_pause(cfs_time_seconds(1 * i));
-       }
+       while (kgnilnd_data.kgn_needs_reset != 0) {
+               i++;
+               LCONSOLE((((i) & (-i)) == i) ? D_WARNING : D_NET,
+                               "Waiting for stack reset request to clear\n");
+               set_current_state(TASK_UNINTERRUPTIBLE);
+               schedule_timeout(cfs_time_seconds(1 * i));
+       }
 
        RETURN(rc);
 }
 
-static int LL_PROC_PROTO(proc_toggle_rdmaq_override)
+static int
+proc_toggle_rdmaq_override(struct ctl_table *table, int write,
+                          void __user *buffer, size_t *lenp, loff_t *ppos)
 {
        int  old_val = kgnilnd_sysctl.ksd_rdmaq_override;
        int  rc = 0;
@@ -179,7 +172,9 @@ static int LL_PROC_PROTO(proc_toggle_rdmaq_override)
 /* /proc/sys entry point for injecting up/down nid event
  * <up|down> <nid>
  */
-static int LL_PROC_PROTO(proc_rca_inject)
+static int
+proc_peer_state(struct ctl_table *table, int write, void __user *buffer,
+               size_t *lenp, loff_t *ppos)
 {
        int             rc;
        int             nid;
@@ -200,7 +195,7 @@ static int LL_PROC_PROTO(proc_rca_inject)
        }
 
        /* convert to nid, up/down values */
-       rc = sscanf(kgnilnd_sysctl.ksd_rca_inject, "%s %d", command, &nid);
+       rc = sscanf(kgnilnd_sysctl.ksd_peer_state, "%s %d", command, &nid);
        CDEBUG(D_INFO, "command %s, nid %d\n", command, nid);
 
        if (rc != 2) {
@@ -222,7 +217,7 @@ static int LL_PROC_PROTO(proc_rca_inject)
                }
        }
 
-       CDEBUG(D_INFO, "proc_rca_inject: reporting node_down %d, nid %d\n",
+       CDEBUG(D_INFO, "proc_peer_state: reporting node_down %d, nid %d\n",
                      node_down, nid);
        rc = kgnilnd_report_node_state(nid, node_down);
 
@@ -239,7 +234,7 @@ static struct ctl_table kgnilnd_table[] = {
         * to go via /proc for portability.
         */
        {
-               INIT_CTL_NAME(GNILND_VERSION)
+               INIT_CTL_NAME
                .procname = "version",
                .data     = KGNILND_BUILD_REV,
                .maxlen   = sizeof(KGNILND_BUILD_REV),
@@ -247,7 +242,7 @@ static struct ctl_table kgnilnd_table[] = {
                .proc_handler = &proc_dostring
        },
        {
-               INIT_CTL_NAME(GNILND_THREAD_PAUSE)
+               INIT_CTL_NAME
                .procname = "thread_pause",
                .data     = &kgnilnd_sysctl.ksd_pause_trigger,
                .maxlen   = sizeof(int),
@@ -255,7 +250,7 @@ static struct ctl_table kgnilnd_table[] = {
                .proc_handler = &proc_toggle_thread_pause,
        },
        {
-               INIT_CTL_NAME(GNILND_HW_QUIESCE)
+               INIT_CTL_NAME
                .procname = "hw_quiesce",
                .data     = &kgnilnd_sysctl.ksd_quiesce_secs,
                .maxlen   = sizeof(__u32),
@@ -263,7 +258,7 @@ static struct ctl_table kgnilnd_table[] = {
                .proc_handler = &proc_hw_quiesce,
        },
        {
-               INIT_CTL_NAME(GNILND_STACK_RESET)
+               INIT_CTL_NAME
                .procname = "stack_reset",
                .data     = NULL,
                .maxlen   = sizeof(int),
@@ -271,7 +266,7 @@ static struct ctl_table kgnilnd_table[] = {
                .proc_handler = &proc_trigger_stack_reset,
        },
        {
-               INIT_CTL_NAME(GNILND_RDMAQ_OVERRIDE)
+               INIT_CTL_NAME
                .procname = "rdmaq_override",
                .data     = &kgnilnd_sysctl.ksd_rdmaq_override,
                .maxlen   = sizeof(int),
@@ -279,26 +274,26 @@ static struct ctl_table kgnilnd_table[] = {
                .proc_handler = &proc_toggle_rdmaq_override,
        },
        {
-               INIT_CTL_NAME(GNILND_RCA_INJECT)
-               .procname = "rca_inject",
-               .data     = kgnilnd_sysctl.ksd_rca_inject,
-               .maxlen   = GNILND_RCA_INJ_STRLEN,
+               INIT_CTL_NAME
+               .procname = "peer_state",
+               .data     = kgnilnd_sysctl.ksd_peer_state,
+               .maxlen   = GNILND_PEERSTATE_STRLEN,
                .mode     = 0644,
-               .proc_handler = &proc_rca_inject,
+               .proc_handler = &proc_peer_state,
        },
-       {       INIT_CTL_NAME(0)   }
+       { 0 }
 };
 
 static struct ctl_table kgnilnd_top_table[2] = {
        {
-               INIT_CTL_NAME(CTL_GNILND)
+               INIT_CTL_NAME
                .procname = "kgnilnd",
                .data     = NULL,
                .maxlen   = 0,
                .mode     = 0555,
                .child    = kgnilnd_table
        },
-       {       INIT_CTL_NAME(0)   }
+       { 0 }
 };
 
 void kgnilnd_insert_sysctl(void)