X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Fklnds%2Fgmlnd%2Fgmlnd_api.c;h=338d75cd094d1deddad1789f372465a618b5f104;hb=3de901fceee79de12a31428bcc6ba3a00f10d1fe;hp=1cb13178794e6100209ba42cc26e9f9cab406918;hpb=c5050e412572b00cbe93d8517d2d1f767bebfa92;p=fs%2Flustre-release.git diff --git a/lnet/klnds/gmlnd/gmlnd_api.c b/lnet/klnds/gmlnd/gmlnd_api.c index 1cb1317..338d75c 100644 --- a/lnet/klnds/gmlnd/gmlnd_api.c +++ b/lnet/klnds/gmlnd/gmlnd_api.c @@ -25,7 +25,36 @@ #include "gmnal.h" + + gmnal_data_t *global_nal_data = NULL; +#define GLOBAL_NID_STR_LEN 16 +char global_nid_str[GLOBAL_NID_STR_LEN] = {0}; + +/* + * Write the global nid /proc/sys/gmnal/globalnid + */ +#define GMNAL_SYSCTL 201 +#define GMNAL_SYSCTL_GLOBALNID 1 + +static ctl_table gmnal_sysctl_table[] = { + {GMNAL_SYSCTL_GLOBALNID, "globalnid", + global_nid_str, GLOBAL_NID_STR_LEN, + 0444, NULL, &proc_dostring}, + { 0 } +}; + + +static ctl_table gmnalnal_top_sysctl_table[] = { + {GMNAL_SYSCTL, "gmnal", NULL, 0, 0555, gmnal_sysctl_table}, + { 0 } +}; + + + + + + /* * gmnal_api_forward * This function takes a pack block of arguments from the NAL API @@ -128,13 +157,16 @@ gmnal_api_validate(nal_t *nal, void *base, size_t extent) * Give up the processor */ void -gmnal_api_yield(nal_t *nal) +gmnal_api_yield(nal_t *nal, unsigned long *flags, int milliseconds) { CDEBUG(D_TRACE, "gmnal_api_yield : nal [%p]\n", nal); - set_current_state(TASK_INTERRUPTIBLE); - schedule(); + if (milliseconds != 0) { + CERROR("Blocking yield not implemented yet\n"); + LBUG(); + } + our_cond_resched(); return; } @@ -193,8 +225,8 @@ gmnal_init(int interface, ptl_pt_index_t ptl_size, ptl_ac_index_t ac_size, ptl_pid_t portals_pid = 0; - CDEBUG(D_TRACE, "gmnal_init : interface [%d], ptl_size [%d], - ac_size[%d]\n", interface, ptl_size, ac_size); + CDEBUG(D_TRACE, "gmnal_init : interface [%d], ptl_size [%d], " + "ac_size[%d]\n", interface, ptl_size, ac_size); PORTAL_ALLOC(nal_data, sizeof(gmnal_data_t)); @@ -255,8 +287,8 @@ gmnal_init(int interface, ptl_pt_index_t ptl_size, ptl_ac_index_t ac_size, } - CDEBUG(D_NET, "Calling gm_open with interface [%d], port [%d], - name [%s], version [%d]\n", interface, GMNAL_GM_PORT, + CDEBUG(D_NET, "Calling gm_open with interface [%d], port [%d], " + "name [%s], version [%d]\n", interface, GMNAL_GM_PORT, "gmnal", GM_API_VERSION); GMNAL_GM_LOCK(nal_data); @@ -280,15 +312,15 @@ gmnal_init(int interface, ptl_pt_index_t ptl_size, ptl_ac_index_t ac_size, CDEBUG(D_ERROR, "gm_open Failure. No such device\n"); break; case(GM_INCOMPATIBLE_LIB_AND_DRIVER): - CDEBUG(D_ERROR, "gm_open Failure. Incompatile lib - and driver\n"); + CDEBUG(D_ERROR, "gm_open Failure. Incompatile lib " + "and driver\n"); break; case(GM_OUT_OF_MEMORY): CDEBUG(D_ERROR, "gm_open Failure. Out of Memory\n"); break; default: - CDEBUG(D_ERROR, "gm_open Failure. Unknow error - code [%d]\n", gm_status); + CDEBUG(D_ERROR, "gm_open Failure. Unknow error " + "code [%d]\n", gm_status); break; } GMNAL_GM_LOCK(nal_data); @@ -403,6 +435,7 @@ gmnal_init(int interface, ptl_pt_index_t ptl_size, ptl_ac_index_t ac_size, } CDEBUG(D_INFO, "Global node id is [%u]\n", global_nid); nal_data->gm_global_nid = global_nid; + snprintf(global_nid_str, GLOBAL_NID_STR_LEN, "%u", global_nid); /* pid = gm_getpid(); @@ -429,6 +462,9 @@ gmnal_init(int interface, ptl_pt_index_t ptl_size, ptl_ac_index_t ac_size, return(NULL); } + nal_data->sysctl = NULL; + nal_data->sysctl = register_sysctl_table (gmnalnal_top_sysctl_table, 0); + CDEBUG(D_INFO, "gmnal_init finished\n"); global_nal_data = nal->nal_data; @@ -459,6 +495,8 @@ void gmnal_fini() gm_close(nal_data->gm_port); gm_finalize(); GMNAL_GM_UNLOCK(nal_data); + if (nal_data->sysctl) + unregister_sysctl_table (nal_data->sysctl); PORTAL_FREE(nal, sizeof(nal_t)); PORTAL_FREE(nal_data, sizeof(gmnal_data_t)); PORTAL_FREE(nal_cb, sizeof(nal_cb_t));