X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lnet%2Fklnds%2Fgmlnd%2Fgmlnd_module.c;h=1f7f96f0ea2a8fc2e8dc9a90a9fbf50bb2487a34;hp=31f6819dabd2de3b5c55198d04f7f93f44f52fc1;hb=a1027e45b32e21ee1c94832329b1577c6e8ab8bb;hpb=8583fd97459acf863483f4eb583a31f47e2b7984 diff --git a/lnet/klnds/gmlnd/gmlnd_module.c b/lnet/klnds/gmlnd/gmlnd_module.c index 31f6819..1f7f96f 100644 --- a/lnet/klnds/gmlnd/gmlnd_module.c +++ b/lnet/klnds/gmlnd/gmlnd_module.c @@ -19,69 +19,71 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "gmnal.h" - - -int gmnal_small_msg_size = 525312; -/* - * -1 indicates default value. - * This is 1 thread per cpu - * See start_kernel_threads - */ -int num_rx_threads = -1; -int num_stxds = 5; -int gm_port = 4; - -ptl_handle_ni_t kgmnal_ni; - - -int -gmnal_cmd(struct portals_cfg *pcfg, void *private) -{ - gmnal_data_t *nal_data = NULL; - char *name = NULL; - int nid = -2; - int gnid; - gm_status_t gm_status; - - - CDEBUG(D_TRACE, "gmnal_cmd [%d] private [%p]\n", - pcfg->pcfg_command, private); - nal_data = (gmnal_data_t*)private; - switch(pcfg->pcfg_command) { - /* - * just reuse already defined GET_NID. Should define GMNAL version - */ - case(GMNAL_IOC_GET_GNID): - - PORTAL_ALLOC(name, pcfg->pcfg_plen1); - copy_from_user(name, pcfg->pcfg_pbuf1, pcfg->pcfg_plen1); - - GMNAL_GM_LOCK(nal_data); - nid = gm_host_name_to_node_id(nal_data->gm_port, name); - GMNAL_GM_UNLOCK(nal_data); - CDEBUG(D_INFO, "Local node id is [%d]\n", nid); - GMNAL_GM_LOCK(nal_data); - gm_status = gm_node_id_to_global_id(nal_data->gm_port, - nid, &gnid); - GMNAL_GM_UNLOCK(nal_data); - if (gm_status != GM_SUCCESS) { - CDEBUG(D_INFO, "gm_node_id_to_global_id failed[%d]\n", - gm_status); - return(-1); - } - CDEBUG(D_INFO, "Global node is is [%u][%x]\n", gnid, gnid); - copy_to_user(pcfg->pcfg_pbuf2, &gnid, pcfg->pcfg_plen2); - break; - default: - CDEBUG(D_INFO, "gmnal_cmd UNKNOWN[%d]\n", pcfg->pcfg_command); - pcfg->pcfg_nid2 = -1; - } - - - return(0); -} - +#include "gmlnd.h" + + +static int port = 4; +CFS_MODULE_PARM(port, "i", int, 0444, + "GM port to use for communications"); + +static int ntx = 256; +CFS_MODULE_PARM(ntx, "i", int, 0444, + "# tx descriptors"); + +static int credits = 128; +CFS_MODULE_PARM(credits, "i", int, 0444, + "# concurrent sends"); + +static int peer_credits = 8; +CFS_MODULE_PARM(peer_credits, "i", int, 0444, + "# concurrent sends per peer"); + +static int nlarge_tx_bufs = 32; +CFS_MODULE_PARM(nlarge_tx_bufs, "i", int, 0444, + "# large tx message buffers"); + +static int nrx_small = 128; +CFS_MODULE_PARM(nrx_small, "i", int, 0444, + "# small rx message buffers"); + +static int nrx_large = 64; +CFS_MODULE_PARM(nrx_large, "i", int, 0444, + "# large rx message buffers"); + +gmnal_tunables_t gmnal_tunables = { + .gm_port = &port, + .gm_ntx = &ntx, + .gm_credits = &credits, + .gm_peer_credits = &peer_credits, + .gm_nlarge_tx_bufs = &nlarge_tx_bufs, + .gm_nrx_small = &nrx_small, + .gm_nrx_large = &nrx_large, +}; + +#if CONFIG_SYSCTL && !CFS_SYSFS_MODULE_PARM +static ctl_table gmnal_ctl_table[] = { + {1, "port", &port, + sizeof (int), 0444, NULL, &proc_dointvec}, + {2, "ntx", &ntx, + sizeof (int), 0444, NULL, &proc_dointvec}, + {3, "credits", &credits, + sizeof (int), 0444, NULL, &proc_dointvec}, + {4, "peer_credits", &peer_credits, + sizeof (int), 0444, NULL, &proc_dointvec}, + {5, "nlarge_tx_bufs", &nlarge_tx_bufs, + sizeof (int), 0444, NULL, &proc_dointvec}, + {6, "nrx_small", &nrx_small, + sizeof (int), 0444, NULL, &proc_dointvec}, + {7, "nrx_large", &nrx_large, + sizeof (int), 0444, NULL, &proc_dointvec}, + {0} +}; + +static ctl_table gmnal_top_ctl_table[] = { + {207, "gmnal", NULL, 0, 0555, gmnal_ctl_table}, + {0} +}; +#endif static int __init gmnal_load(void) @@ -89,61 +91,40 @@ gmnal_load(void) int status; CDEBUG(D_TRACE, "This is the gmnal module initialisation routine\n"); - - - CDEBUG(D_INFO, "Calling gmnal_init\n"); - status = PtlNIInit(gmnal_init, 32, 4, 0, &kgmnal_ni); - if (status == PTL_OK) { - CDEBUG(D_INFO, "Portals GMNAL initialised ok kgmnal_ni\n"); +#if CONFIG_SYSCTL && !CFS_SYSFS_MODULE_PARM + gmnal_tunables.gm_sysctl = + cfs_register_sysctl_table(gmnal_top_ctl_table, 0); + + if (gmnal_tunables.gm_sysctl == NULL) + CWARN("Can't setup /proc tunables\n"); +#endif + CDEBUG(D_NET, "Calling gmnal_init\n"); + status = gmnal_init(); + if (status == 0) { + CDEBUG(D_NET, "Portals GMNAL initialised ok\n"); } else { - CDEBUG(D_INFO, "Portals GMNAL Failed to initialise\n"); - return(1); - - } - - CDEBUG(D_INFO, "Calling kportal_nal_register\n"); - /* - * global_nal_data is set by gmnal_init - */ - if (kportal_nal_register(GMNAL, &gmnal_cmd, global_nal_data) != 0) { - CDEBUG(D_INFO, "kportal_nal_register failed\n"); - return(1); + CDEBUG(D_NET, "Portals GMNAL Failed to initialise\n"); + return(-ENODEV); } - CDEBUG(D_INFO, "Calling PORTAL_SYMBOL_REGISTER\n"); - PORTAL_SYMBOL_REGISTER(kgmnal_ni); - CDEBUG(D_INFO, "This is the end of the gmnal init routine"); - + CDEBUG(D_NET, "This is the end of the gmnal init routine"); return(0); } - static void __exit gmnal_unload(void) { - - kportal_nal_unregister(GMNAL); - PORTAL_SYMBOL_UNREGISTER(kgmnal_ni); gmnal_fini(); - global_nal_data = NULL; - return; +#if CONFIG_SYSCTL && !CFS_SYSFS_MODULE_PARM + if (gmnal_tunables.gm_sysctl != NULL) + cfs_unregister_sysctl_table(gmnal_tunables.gm_sysctl); +#endif } - module_init(gmnal_load); - module_exit(gmnal_unload); -EXPORT_SYMBOL(kgmnal_ni); - -MODULE_PARM(gmnal_small_msg_size, "i"); -MODULE_PARM(num_rx_threads, "i"); -MODULE_PARM(num_stxds, "i"); -MODULE_PARM(gm_port, "i"); - -MODULE_AUTHOR("Morgan Doyle"); - -MODULE_DESCRIPTION("A Portals kernel NAL for Myrinet GM."); - +MODULE_AUTHOR("Cluster File Systems, Inc. "); +MODULE_DESCRIPTION("Kernel GM LND v1.01"); MODULE_LICENSE("GPL");