Whamcloud - gitweb
smash the HEAD with the contents of b_cmd. HEAD_PRE_CMD_SMASH and
[fs/lustre-release.git] / lustre / portals / knals / scimacnal / scimacnal.c
index e77bd8e..35de6eb 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "scimacnal.h"
 
+ptl_handle_ni_t kscimacnal_ni;
 nal_t  kscimacnal_api;
 
 kscimacnal_data_t kscimacnal_data;
@@ -100,34 +101,10 @@ static void kscimacnal_unlock(nal_t *nal, unsigned long *flags)
 }
 
 
-static void kscimacnal_shutdown(nal_t *nal, int ni)
+static int kscimacnal_shutdown(nal_t *nal, int ni)
 {
         LASSERT (nal == &kscimacnal_api);
-        LASSERT (kscimacnal_data.ksci_init);
-
-        if (nal->nal_refct != 0)
-                return;
-
-        /* Called on last matching PtlNIFini() */
-
-        /* FIXME: How should the shutdown procedure really look? 
-         */
-        kscimacnal_data.ksci_shuttingdown=1;
-
-        /* Stop handling ioctls */
-        libcfs_nal_cmd_unregister(SCIMACNAL);
-
-        mac_finish(kscimacnal_data.ksci_machandle);
-
-        /* finalise lib after net shuts up */
-        lib_fini(&kscimacnal_lib);
-
-        kscimacnal_data.ksci_init = 0;
-
-        /* Allow unload */
-        PORTAL_MODULE_UNUSE;
-
-        return;
+        return 0;
 }
 
 
@@ -146,26 +123,56 @@ static void kscimacnal_yield( nal_t *nal, unsigned long *flags, int milliseconds
 }
 
 
-static int kscimacnal_startup(nal_t *nal, ptl_pid_t requested_pid,
-                              ptl_ni_limits_t *requested_limits,
-                              ptl_ni_limits_t *actual_limits)
+static nal_t *kscimacnal_init(int interface, ptl_pt_index_t  ptl_size,
+                ptl_ac_index_t  ac_size, ptl_pid_t requested_pid)
+{
+        int     nnids = 512; /* FIXME: Need ScaMac funktion to get #nodes */
+
+        CDEBUG(D_NET, "calling lib_init with nid "LPX64" nnids %d\n", kscimacnal_data.ksci_nid, nnids);
+        lib_init(&kscimacnal_lib, kscimacnal_data.ksci_nid, 0, nnids,ptl_size, ac_size); 
+        return &kscimacnal_api;
+}
+
+
+/* Called by kernel at module unload time */
+static void /*__exit*/ 
+kscimacnal_finalize(void)
+{
+        /* FIXME: How should the shutdown procedure really look? */
+        kscimacnal_data.ksci_shuttingdown=1;
+
+        PORTAL_SYMBOL_UNREGISTER(kscimacnal_ni);
+
+        PtlNIFini(kscimacnal_ni);
+        lib_fini(&kscimacnal_lib);
+
+        mac_finish(kscimacnal_data.ksci_machandle);
+
+        CDEBUG (D_MALLOC, "done kmem %d\n", atomic_read (&portal_kmemory));
+
+        return;
+}
+
+
+/* Called by kernel at module insertion time */
+static int __init
+kscimacnal_initialize(void)
 {
         int rc;
-        mac_physaddr_t   mac_physaddr;
-        ptl_process_id_t process_id;
+        unsigned long     nid=0;
         mac_handle_t    *machandle = NULL;
 
-        if (nal->nal_refct != 0) {
-                if (actual_limits != NULL)
-                        *actual_limits = kscimacnal_lib.ni.actual_limits;
-                return (PTL_OK);
-        }
 
-        /* Called on first PtlNIInit(SCIMACNAL) */
+        CDEBUG (D_MALLOC, "start kmem %d\n", atomic_read (&portal_kmemory));
+
+        kscimacnal_api.forward = kscimacnal_forward;
+        kscimacnal_api.shutdown = kscimacnal_shutdown;
+        kscimacnal_api.yield = kscimacnal_yield;
+        kscimacnal_api.validate = NULL;         /* our api validate is a NOOP */
+        kscimacnal_api.lock= kscimacnal_lock;
+        kscimacnal_api.unlock= kscimacnal_unlock;
+        kscimacnal_api.nal_data = &kscimacnal_data;
 
-        LASSERT (nal == kscimacnal_api);
-        LASSERT (!kscimacnal_data.ksci_init);
-        
         kscimacnal_lib.nal_data = &kscimacnal_data;
 
         memset(&kscimacnal_data, 0, sizeof(kscimacnal_data));
@@ -181,7 +188,7 @@ static int kscimacnal_startup(nal_t *nal, ptl_pid_t requested_pid,
 
         if(!machandle) {
                 CERROR("mac_init() failed\n");
-                return PTL_FAIL;
+                return -1;
         }
 
         kscimacnal_data.ksci_machandle = machandle;
@@ -192,88 +199,45 @@ static int kscimacnal_startup(nal_t *nal, ptl_pid_t requested_pid,
                                 mac_get_mtusize(machandle), SCIMACNAL_MTU);
                 CERROR("Consult README.scimacnal for more information\n");
                 mac_finish(machandle);
-                return PTL_FAIL;
+                return -1;
         }
 
         /* Get the node ID */
         /* mac_get_physaddrlen() is a function instead of define, sigh */
-        LASSERT(mac_get_physaddrlen(machandle) <= sizeof(mac_physaddr));
-        if(mac_get_physaddr(machandle, &mac_physaddr)) {
+        LASSERT(mac_get_physaddrlen(machandle) <= sizeof(nid));
+        if(mac_get_physaddr(machandle, (mac_physaddr_t *) &nid)) {
                 CERROR("mac_get_physaddr() failed\n");
                 mac_finish(machandle);
-                return PTL_FAIL;
+                return -1;
         }
-        kscimacnal_data.ksci_nid = (ptl_nid_t)(ntohl(mac_physaddr));
+        nid = ntohl(nid);
+        kscimacnal_data.ksci_nid = nid;
 
-        process_id.pid = 0;
-        process_id.nid = kscimacnal_data.ksci_nid;
 
-        CDEBUG(D_NET, "calling lib_init with nid "LPX64"\n",
-               kscimacnal_data.ksci_nid);
-
-        rc = lib_init(&kscimacnal_lib, process_id,
-                      requested_limits, actual_limits);
-        if (rc != PTL_OK) {
+        /* Initialize Network Interface */
+        /* FIXME: What do the magic numbers mean? Documentation anyone? */
+        rc = PtlNIInit(kscimacnal_init, 32, 4, 0, &kscimacnal_ni);
+        if (rc) {
                 CERROR("PtlNIInit failed %d\n", rc);
                 mac_finish(machandle);
-                return (rc);
+                return (-ENOMEM);
         }
 
         /* Init command interface */
-        rc = libcfs_nal_cmd_register (SCIMACNAL, &kscimacnal_cmd, NULL);
+        rc = kportal_nal_register (SCIMACNAL, &kscimacnal_cmd, NULL);
         if (rc != 0) {
                 CERROR ("Can't initialise command interface (rc = %d)\n", rc);
-                lib_fini(&kscimacnal_lib);
+                PtlNIFini(kscimacnal_ni);
                 mac_finish(machandle);
-                return (PTL_FAIL);
+                return (rc);
         }
 
-        /* We're done now, it's OK for the RX callback to do stuff */
-        kscimacnal_data.ksci_init = 1;
 
-        /* Prevent unload before matching PtlNIFini() */
-        PORTAL_MODULE_USE;
-        
-        return (PTL_OK);
-}
-
-
-/* Called by kernel at module unload time */
-static void /*__exit*/ 
-kscimacnal_finalize(void)
-{
-        LASSERT (!kscimacnal_data.ksci_init);
-        
-        ptl_unregister_nal(SCIMACNAL);
+        PORTAL_SYMBOL_REGISTER(kscimacnal_ni);
 
-        CDEBUG (D_MALLOC, "done kmem %d\n", atomic_read (&portal_kmemory));
-
-        return;
-}
-
-
-/* Called by kernel at module insertion time */
-static int __init
-kscimacnal_initialize(void)
-{
-        int rc;
-
-        CDEBUG (D_MALLOC, "start kmem %d\n", atomic_read (&portal_kmemory));
-
-        kscimacnal_api.startup = kscimacnal_startup;
-        kscimacnal_api.forward = kscimacnal_forward;
-        kscimacnal_api.shutdown = kscimacnal_shutdown;
-        kscimacnal_api.yield = kscimacnal_yield;
-        kscimacnal_api.lock= kscimacnal_lock;
-        kscimacnal_api.unlock= kscimacnal_unlock;
-        kscimacnal_api.nal_data = &kscimacnal_data;
+        /* We're done now, it's OK for the RX callback to do stuff */
+        kscimacnal_data.ksci_init = 1;
 
-        rc = ptl_register_nal(SCIMACNAL, &kscimacnal_api);
-        if (rc != PTL_OK) {
-                CERROR("Can't register SCIMACNAL: %d\n", rc);
-                return (-ENODEV);
-        }
-        
         return 0;
 }