Whamcloud - gitweb
removed some empty files (authors, news, readme)
[fs/lustre-release.git] / lnet / lnet / api-ni.c
index 81afd0a..91a307a 100644 (file)
@@ -1,11 +1,7 @@
 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
  * vim:expandtab:shiftwidth=8:tabstop=8:
  *
- * api/api-ni.c
- * Network Interface code
- *
  *  Copyright (c) 2001-2003 Cluster File Systems, Inc.
- *  Copyright (c) 2001-2002 Sandia National Laboratories
  *
  *   This file is part of Lustre, http://www.sf.net/projects/lustre/
  *
@@ -23,6 +19,7 @@
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#define DEBUG_SUBSYSTEM S_PORTALS
 #include <portals/api-support.h>
 
 int ptl_init;
@@ -32,19 +29,19 @@ int ptl_init;
 #define NI_HANDLE_MAGIC  0xebc0de00
 #define NI_HANDLE_MASK   0x000000ff
 
-static struct nal_t *ptl_nal_table[NAL_MAX_NR];
+static struct nal_t *ptl_nal_table[NAL_MAX_NR + 1];
 
 #ifdef __KERNEL__
-DECLARE_MUTEX(ptl_mutex);
+struct semaphore ptl_mutex;
 
 static void ptl_mutex_enter (void) 
 {
-        down (&ptl_mutex);
+        mutex_down (&ptl_mutex);
 }
 
 static void ptl_mutex_exit (void)
 {
-        up (&ptl_mutex);
+        mutex_up (&ptl_mutex);
 }
 #else
 static void ptl_mutex_enter (void)
@@ -65,12 +62,14 @@ nal_t *ptl_hndl2nal(ptl_handle_any_t *handle)
          * invalidated out from under her (or worse, swapped for a
          * completely different interface!) */
 
+        LASSERT (ptl_init);
+
         if (((idx ^ NI_HANDLE_MAGIC) & ~NI_HANDLE_MASK) != 0)
                 return NULL;
 
         idx &= NI_HANDLE_MASK;
         
-        if (idx >= NAL_MAX_NR ||
+        if (idx > NAL_MAX_NR ||
             ptl_nal_table[idx] == NULL ||
             ptl_nal_table[idx]->nal_refct == 0)
                 return NULL;
@@ -84,7 +83,7 @@ int ptl_register_nal (ptl_interface_t interface, nal_t *nal)
         
         ptl_mutex_enter();
         
-        if (interface < 0 || interface >= NAL_MAX_NR)
+        if (interface < 0 || interface > NAL_MAX_NR)
                 rc = PTL_IFACE_INVALID;
         else if (ptl_nal_table[interface] != NULL)
                 rc = PTL_IFACE_DUP;
@@ -100,7 +99,7 @@ int ptl_register_nal (ptl_interface_t interface, nal_t *nal)
 
 void ptl_unregister_nal (ptl_interface_t interface)
 {
-        LASSERT(interface >= 0 && interface < NAL_MAX_NR);
+        LASSERT(interface >= 0 && interface <= NAL_MAX_NR);
         LASSERT(ptl_nal_table[interface] != NULL);
         LASSERT(ptl_nal_table[interface]->nal_refct == 0);
         
@@ -111,12 +110,17 @@ void ptl_unregister_nal (ptl_interface_t interface)
         ptl_mutex_exit();
 }
 
-int ptl_ni_init(void)
+int PtlInit(int *max_interfaces)
 {
+        LASSERT(!strcmp(ptl_err_str[PTL_MAX_ERRNO], "PTL_MAX_ERRNO"));
+
         /* If this assertion fails, we need more bits in NI_HANDLE_MASK and
          * to shift NI_HANDLE_MAGIC left appropriately */
-        LASSERT (NAL_MAX_NR <= (NI_HANDLE_MASK + 1));
+        LASSERT (NAL_MAX_NR < (NI_HANDLE_MASK + 1));
         
+        if (max_interfaces != NULL)
+                *max_interfaces = NAL_MAX_NR + 1;
+
         ptl_mutex_enter();
 
         if (!ptl_init) {
@@ -142,7 +146,7 @@ int ptl_ni_init(void)
         return PTL_OK;
 }
 
-void ptl_ni_fini(void)
+void PtlFini(void)
 {
         nal_t  *nal;
         int     i;
@@ -150,16 +154,16 @@ void ptl_ni_fini(void)
         ptl_mutex_enter();
 
         if (ptl_init) {
-                for (i = 0; i < NAL_MAX_NR; i++) {
+                for (i = 0; i <= NAL_MAX_NR; i++) {
 
                         nal = ptl_nal_table[i];
                         if (nal == NULL)
                                 continue;
                         
                         if (nal->nal_refct != 0) {
-                                CWARN("NAL %d has outstanding refcount %d\n",
+                                CWARN("NAL %x has outstanding refcount %d\n",
                                       i, nal->nal_refct);
-                                nal->shutdown(nal);
+                                nal->nal_ni_fini(nal);
                         }
                         
                         ptl_nal_table[i] = NULL;
@@ -185,7 +189,7 @@ int PtlNIInit(ptl_interface_t interface, ptl_pid_t requested_pid,
         ptl_mutex_enter ();
 
         if (interface == PTL_IFACE_DEFAULT) {
-                for (i = 0; i < NAL_MAX_NR; i++)
+                for (i = 0; i <= NAL_MAX_NR; i++)
                         if (ptl_nal_table[i] != NULL) {
                                 interface = i;
                                 break;
@@ -195,18 +199,20 @@ int PtlNIInit(ptl_interface_t interface, ptl_pid_t requested_pid,
         }
         
         if (interface < 0 || 
-            interface >= NAL_MAX_NR ||
+            interface > NAL_MAX_NR ||
             ptl_nal_table[interface] == NULL) {
                 GOTO(out, rc = PTL_IFACE_INVALID);
         }
 
         nal = ptl_nal_table[interface];
-
-        CDEBUG(D_OTHER, "Starting up NAL (%d) refs %d\n", interface, nal->nal_refct);
-        rc = nal->startup(nal, requested_pid, desired_limits, actual_limits);
+        nal->nal_handle.nal_idx = (NI_HANDLE_MAGIC & ~NI_HANDLE_MASK) | interface;
+        nal->nal_handle.cookie = 0;
+        
+        CDEBUG(D_OTHER, "Starting up NAL (%x) refs %d\n", interface, nal->nal_refct);
+        rc = nal->nal_ni_init(nal, requested_pid, desired_limits, actual_limits);
 
         if (rc != PTL_OK) {
-                CERROR("Error %d starting up NAL %d, refs %d\n", rc,
+                CERROR("Error %d starting up NAL %x, refs %d\n", rc,
                        interface, nal->nal_refct);
                 GOTO(out, rc);
         }
@@ -217,10 +223,11 @@ int PtlNIInit(ptl_interface_t interface, ptl_pid_t requested_pid,
         }
         
         nal->nal_refct++;
-        handle->nal_idx = (NI_HANDLE_MAGIC & ~NI_HANDLE_MASK) | interface;
+        *handle = nal->nal_handle;
 
  out:
         ptl_mutex_exit ();
+
         return rc;
 }
 
@@ -247,15 +254,8 @@ int PtlNIFini(ptl_handle_ni_t ni)
         nal->nal_refct--;
 
         /* nal_refct == 0 tells nal->shutdown to really shut down */
-        nal->shutdown(nal);
+        nal->nal_ni_fini(nal);
 
         ptl_mutex_exit ();
         return PTL_OK;
 }
-
-int PtlNIHandle(ptl_handle_any_t handle_in, ptl_handle_ni_t * ni_out)
-{
-        *ni_out = handle_in;
-
-        return PTL_OK;
-}