Whamcloud - gitweb
file configurable-x86-stack-2.4.22-rh.patch was initially added on branch b_devel.
[fs/lustre-release.git] / lnet / klnds / lgmlnd / lgmnal_module.c
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  *
4  *  Copyright (c) 2003 Los Alamos National Laboratory (LANL)
5  *
6  *   This file is part of Lustre, http://www.lustre.org/
7  *
8  *   Lustre is free software; you can redistribute it and/or
9  *   modify it under the terms of version 2 of the GNU General Public
10  *   License as published by the Free Software Foundation.
11  *
12  *   Lustre is distributed in the hope that it will be useful,
13  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *   GNU General Public License for more details.
16  *
17  *   You should have received a copy of the GNU General Public License
18  *   along with Lustre; if not, write to the Free Software
19  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  */
21 #include "lgmnal.h"
22
23
24 ptl_handle_ni_t lgmnal_ni;
25
26
27 int 
28 lgmnal_cmd(struct portal_ioctl_data *data, void *private)
29 {
30         lgmnal_data_t   *nal_data = NULL;
31         char            *name = NULL;
32         int             nid = -2;
33         int             gnid;
34         gm_status_t     gm_status;
35
36
37         LGMNAL_PRINT(LGMNAL_DEBUG_TRACE, ("lgmnal_cmd [d] private [%p]\n", data->ioc_nal_cmd, private));
38         nal_data = (lgmnal_data_t*)private;
39         LGMNAL_PRINT(LGMNAL_DEBUG_V, ("nal_data is [%p]\n", nal_data));
40         switch(data->ioc_nal_cmd) {
41         /*
42          * just reuse already defined GET_NID. Should define LGMNAL version
43          */
44         case(LGMNAL_IOC_GET_GNID):
45                 LGMNAL_PRINT(LGMNAL_DEBUG_V, ("lgmnal_cmd GETNID (Get GM Global Network Id\n"));
46
47                 PORTAL_ALLOC(name, data->ioc_plen1);
48                 copy_from_user(name, data->ioc_pbuf1, data->ioc_plen1);
49         
50                 LGMNAL_GM_LOCK(nal_data);
51                 nid = gm_host_name_to_node_id(nal_data->gm_port, name);
52                 LGMNAL_GM_UNLOCK(nal_data);
53                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Local node id is [%d]\n", nid));
54                 LGMNAL_GM_LOCK(nal_data);
55                 gm_status = gm_node_id_to_global_id(nal_data->gm_port, nid, &gnid);
56                 LGMNAL_GM_UNLOCK(nal_data);
57                 if (gm_status != GM_SUCCESS) {
58                         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("gm_node_id_to_global_id failed\n", gm_status));
59                         return(-1);
60                 }
61                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Global node is is [%u][%x]\n", gnid, gnid));
62                 copy_to_user(data->ioc_pbuf2, &gnid, data->ioc_plen2);
63         break;
64         default:
65                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("lgmnal_cmd UNKNOWN[%d]\n", data->ioc_nal_cmd));
66                 data->ioc_nid2 = -1;
67         }
68
69
70         return(0);
71 }
72
73 int lgmnal_small_msg_size = 81920;
74 int lgmnal_debug_level = 1;
75
76 int
77 init_module()
78 {
79         int     status;
80         LGMNAL_PRINT(LGMNAL_DEBUG_TRACE, ("This is the lgmnal module initialisation routine\n"));
81
82
83
84         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Calling lgmnal_init\n"));
85         status = PtlNIInit(lgmnal_init, 32, 4, 0, &lgmnal_ni);
86         if (status == PTL_OK) {
87                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Portals LGMNAL initialised ok lgmnal_ni [%lx]\n", lgmnal_ni));
88         } else {
89                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Portals LGMNAL Failed to initialise\n"));
90                 return(1);
91                 
92         }
93
94         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Calling kportal_nal_register\n"));
95         /*
96          *      global_nal_data is set by lgmnal_init
97          */
98         if (kportal_nal_register(LGMNAL, &lgmnal_cmd, global_nal_data) != 0) {
99                 LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("kportal_nal_register failed\n"));
100                 return(1);
101         }
102
103         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Calling PORTAL_SYMBOL_REGISTER\n"));
104         PORTAL_SYMBOL_REGISTER(lgmnal_ni);
105
106         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("This is the end of the lgmnal module initialisation routine"));
107
108
109         return(0);
110 }
111
112
113 void cleanup_module()
114 {
115         int interface=0;
116
117         LGMNAL_PRINT(LGMNAL_DEBUG_TRACE, ("Cleaning up lgmnal module"));
118         LGMNAL_PRINT(LGMNAL_DEBUG_VV, ("Interface [%d] Calling shutdown\n", interface));
119         kportal_nal_unregister(LGMNAL);
120         PORTAL_SYMBOL_UNREGISTER(lgmnal_ni);
121         lgmnal_fini();
122         global_nal_data = NULL;
123         return;
124 }
125
126
127 EXPORT_SYMBOL(lgmnal_ni);
128 EXPORT_SYMBOL(lgmnal_debug_level);
129
130 MODULE_PARM(lgmnal_small_msg_size, "i");
131 MODULE_PARM(lgmnal_debug_level, "i");
132
133 MODULE_AUTHOR("Morgan Doyle. morgan.doyle@hp.com");
134
135 MODULE_DESCRIPTION("A Portals kernel NAL for Myrinet GM2. [0<lgmnal_debug_level<4]");
136
137 MODULE_LICENSE("GPL");