⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmlnd_utils.c

📁 非常经典的一个分布式系统
💻 C
📖 第 1 页 / 共 2 页
字号:
        int          nrx_small = *gmnal_tunables.gm_nrx_small;        int          nrx_large = *gmnal_tunables.gm_nrx_large;        int          nrx = nrx_large + nrx_small;        int          rc;        int          i;        CDEBUG(D_NET, "nrxcred: %d(%dL+%dS)\n", nrxcred, nrx_large, nrx_small);        if (nrx > nrxcred) {                int nlarge = (nrx_large * nrxcred)/nrx;                int nsmall = nrxcred - nlarge;                                CWARN("Only %d rx credits: "                      "reducing large %d->%d, small %d->%d\n", nrxcred,                      nrx_large, nlarge, nrx_small, nsmall);                                *gmnal_tunables.gm_nrx_large = nrx_large = nlarge;                *gmnal_tunables.gm_nrx_small = nrx_small = nsmall;                nrx = nlarge + nsmall;        }        	gmni->gmni_rx_hash = gm_create_hash(gm_hash_compare_ptrs,                                             gm_hash_hash_ptr, 0, 0, nrx, 0);	if (gmni->gmni_rx_hash == NULL) {                CERROR("Failed to create hash table\n");                return -ENOMEM;	}        for (i = 0; i < nrx; i++ ) {                rc = gmnal_alloc_rx(gmni, i < nrx_large);                if (rc != 0)                        return rc;        }	return 0;}char * gmnal_gmstatus2str(gm_status_t status){	return(gm_strerror(status));	switch(status) {        case(GM_SUCCESS):                return("SUCCESS");        case(GM_FAILURE):                return("FAILURE");        case(GM_INPUT_BUFFER_TOO_SMALL):                return("INPUT_BUFFER_TOO_SMALL");        case(GM_OUTPUT_BUFFER_TOO_SMALL):                return("OUTPUT_BUFFER_TOO_SMALL");        case(GM_TRY_AGAIN ):                return("TRY_AGAIN");        case(GM_BUSY):                return("BUSY");        case(GM_MEMORY_FAULT):                return("MEMORY_FAULT");        case(GM_INTERRUPTED):                return("INTERRUPTED");        case(GM_INVALID_PARAMETER):                return("INVALID_PARAMETER");        case(GM_OUT_OF_MEMORY):                return("OUT_OF_MEMORY");        case(GM_INVALID_COMMAND):                return("INVALID_COMMAND");        case(GM_PERMISSION_DENIED):                return("PERMISSION_DENIED");        case(GM_INTERNAL_ERROR):                return("INTERNAL_ERROR");        case(GM_UNATTACHED):                return("UNATTACHED");        case(GM_UNSUPPORTED_DEVICE):                return("UNSUPPORTED_DEVICE");        case(GM_SEND_TIMED_OUT):                return("GM_SEND_TIMEDOUT");        case(GM_SEND_REJECTED):                return("GM_SEND_REJECTED");        case(GM_SEND_TARGET_PORT_CLOSED):                return("GM_SEND_TARGET_PORT_CLOSED");        case(GM_SEND_TARGET_NODE_UNREACHABLE):                return("GM_SEND_TARGET_NODE_UNREACHABLE");        case(GM_SEND_DROPPED):                return("GM_SEND_DROPPED");        case(GM_SEND_PORT_CLOSED):                return("GM_SEND_PORT_CLOSED");        case(GM_NODE_ID_NOT_YET_SET):                return("GM_NODE_ID_NOT_YET_SET");        case(GM_STILL_SHUTTING_DOWN):                return("GM_STILL_SHUTTING_DOWN");        case(GM_CLONE_BUSY):                return("GM_CLONE_BUSY");        case(GM_NO_SUCH_DEVICE):                return("GM_NO_SUCH_DEVICE");        case(GM_ABORTED):                return("GM_ABORTED");        case(GM_INCOMPATIBLE_LIB_AND_DRIVER):                return("GM_INCOMPATIBLE_LIB_AND_DRIVER");        case(GM_UNTRANSLATED_SYSTEM_ERROR):                return("GM_UNTRANSLATED_SYSTEM_ERROR");        case(GM_ACCESS_DENIED):                return("GM_ACCESS_DENIED");                /*         *	These ones are in the docs but aren't in the header file          case(GM_DEV_NOT_FOUND):         return("GM_DEV_NOT_FOUND");         case(GM_INVALID_PORT_NUMBER):         return("GM_INVALID_PORT_NUMBER");         case(GM_UC_ERROR):         return("GM_US_ERROR");         case(GM_PAGE_TABLE_FULL):         return("GM_PAGE_TABLE_FULL");         case(GM_MINOR_OVERFLOW):         return("GM_MINOR_OVERFLOW");         case(GM_SEND_ORPHANED):         return("GM_SEND_ORPHANED");         case(GM_HARDWARE_FAULT):         return("GM_HARDWARE_FAULT");         case(GM_DATA_CORRUPTED):         return("GM_DATA_CORRUPTED");         case(GM_TIMED_OUT):         return("GM_TIMED_OUT");         case(GM_USER_ERROR):         return("GM_USER_ERROR");         case(GM_NO_MATCH):         return("GM_NOMATCH");         case(GM_NOT_SUPPORTED_IN_KERNEL):         return("GM_NOT_SUPPORTED_IN_KERNEL");         case(GM_NOT_SUPPORTED_ON_ARCH):         return("GM_NOT_SUPPORTED_ON_ARCH");         case(GM_PTE_REF_CNT_OVERFLOW):         return("GM_PTR_REF_CNT_OVERFLOW");         case(GM_NO_DRIVER_SUPPORT):         return("GM_NO_DRIVER_SUPPORT");         case(GM_FIRMWARE_NOT_RUNNING):         return("GM_FIRMWARE_NOT_RUNNING");         *	These ones are in the docs but aren't in the header file          */        default:                return("UNKNOWN GM ERROR CODE");	}}char *gmnal_rxevent2str(gm_recv_event_t *ev){	short	event;	event = GM_RECV_EVENT_TYPE(ev);	switch(event) {        case(GM_NO_RECV_EVENT):                return("GM_NO_RECV_EVENT");        case(GM_SENDS_FAILED_EVENT):                return("GM_SEND_FAILED_EVENT");        case(GM_ALARM_EVENT):                return("GM_ALARM_EVENT");        case(GM_SENT_EVENT):                return("GM_SENT_EVENT");        case(_GM_SLEEP_EVENT):                return("_GM_SLEEP_EVENT");        case(GM_RAW_RECV_EVENT):                return("GM_RAW_RECV_EVENT");        case(GM_BAD_SEND_DETECTED_EVENT):                return("GM_BAD_SEND_DETECTED_EVENT");        case(GM_SEND_TOKEN_VIOLATION_EVENT):                return("GM_SEND_TOKEN_VIOLATION_EVENT");        case(GM_RECV_TOKEN_VIOLATION_EVENT):                return("GM_RECV_TOKEN_VIOLATION_EVENT");        case(GM_BAD_RECV_TOKEN_EVENT):                return("GM_BAD_RECV_TOKEN_EVENT");        case(GM_ALARM_VIOLATION_EVENT):                return("GM_ALARM_VIOLATION_EVENT");        case(GM_RECV_EVENT):                return("GM_RECV_EVENT");        case(GM_HIGH_RECV_EVENT):                return("GM_HIGH_RECV_EVENT");        case(GM_PEER_RECV_EVENT):                return("GM_PEER_RECV_EVENT");        case(GM_HIGH_PEER_RECV_EVENT):                return("GM_HIGH_PEER_RECV_EVENT");        case(GM_FAST_RECV_EVENT):                return("GM_FAST_RECV_EVENT");        case(GM_FAST_HIGH_RECV_EVENT):                return("GM_FAST_HIGH_RECV_EVENT");        case(GM_FAST_PEER_RECV_EVENT):                return("GM_FAST_PEER_RECV_EVENT");        case(GM_FAST_HIGH_PEER_RECV_EVENT):                return("GM_FAST_HIGH_PEER_RECV_EVENT");        case(GM_REJECTED_SEND_EVENT):                return("GM_REJECTED_SEND_EVENT");        case(GM_ORPHANED_SEND_EVENT):                return("GM_ORPHANED_SEND_EVENT");        case(GM_BAD_RESEND_DETECTED_EVENT):                return("GM_BAD_RESEND_DETETED_EVENT");        case(GM_DROPPED_SEND_EVENT):                return("GM_DROPPED_SEND_EVENT");        case(GM_BAD_SEND_VMA_EVENT):                return("GM_BAD_SEND_VMA_EVENT");        case(GM_BAD_RECV_VMA_EVENT):                return("GM_BAD_RECV_VMA_EVENT");        case(_GM_FLUSHED_ALARM_EVENT):                return("GM_FLUSHED_ALARM_EVENT");        case(GM_SENT_TOKENS_EVENT):                return("GM_SENT_TOKENS_EVENTS");        case(GM_IGNORE_RECV_EVENT):                return("GM_IGNORE_RECV_EVENT");        case(GM_ETHERNET_RECV_EVENT):                return("GM_ETHERNET_RECV_EVENT");        case(GM_NEW_NO_RECV_EVENT):                return("GM_NEW_NO_RECV_EVENT");        case(GM_NEW_SENDS_FAILED_EVENT):                return("GM_NEW_SENDS_FAILED_EVENT");        case(GM_NEW_ALARM_EVENT):                return("GM_NEW_ALARM_EVENT");        case(GM_NEW_SENT_EVENT):                return("GM_NEW_SENT_EVENT");        case(_GM_NEW_SLEEP_EVENT):                return("GM_NEW_SLEEP_EVENT");        case(GM_NEW_RAW_RECV_EVENT):                return("GM_NEW_RAW_RECV_EVENT");        case(GM_NEW_BAD_SEND_DETECTED_EVENT):                return("GM_NEW_BAD_SEND_DETECTED_EVENT");        case(GM_NEW_SEND_TOKEN_VIOLATION_EVENT):                return("GM_NEW_SEND_TOKEN_VIOLATION_EVENT");        case(GM_NEW_RECV_TOKEN_VIOLATION_EVENT):                return("GM_NEW_RECV_TOKEN_VIOLATION_EVENT");        case(GM_NEW_BAD_RECV_TOKEN_EVENT):                return("GM_NEW_BAD_RECV_TOKEN_EVENT");        case(GM_NEW_ALARM_VIOLATION_EVENT):                return("GM_NEW_ALARM_VIOLATION_EVENT");        case(GM_NEW_RECV_EVENT):                return("GM_NEW_RECV_EVENT");        case(GM_NEW_HIGH_RECV_EVENT):                return("GM_NEW_HIGH_RECV_EVENT");        case(GM_NEW_PEER_RECV_EVENT):                return("GM_NEW_PEER_RECV_EVENT");        case(GM_NEW_HIGH_PEER_RECV_EVENT):                return("GM_NEW_HIGH_PEER_RECV_EVENT");        case(GM_NEW_FAST_RECV_EVENT):                return("GM_NEW_FAST_RECV_EVENT");        case(GM_NEW_FAST_HIGH_RECV_EVENT):                return("GM_NEW_FAST_HIGH_RECV_EVENT");        case(GM_NEW_FAST_PEER_RECV_EVENT):                return("GM_NEW_FAST_PEER_RECV_EVENT");        case(GM_NEW_FAST_HIGH_PEER_RECV_EVENT):                return("GM_NEW_FAST_HIGH_PEER_RECV_EVENT");        case(GM_NEW_REJECTED_SEND_EVENT):                return("GM_NEW_REJECTED_SEND_EVENT");        case(GM_NEW_ORPHANED_SEND_EVENT):                return("GM_NEW_ORPHANED_SEND_EVENT");        case(_GM_NEW_PUT_NOTIFICATION_EVENT):                return("_GM_NEW_PUT_NOTIFICATION_EVENT");        case(GM_NEW_FREE_SEND_TOKEN_EVENT):                return("GM_NEW_FREE_SEND_TOKEN_EVENT");        case(GM_NEW_FREE_HIGH_SEND_TOKEN_EVENT):                return("GM_NEW_FREE_HIGH_SEND_TOKEN_EVENT");        case(GM_NEW_BAD_RESEND_DETECTED_EVENT):                return("GM_NEW_BAD_RESEND_DETECTED_EVENT");        case(GM_NEW_DROPPED_SEND_EVENT):                return("GM_NEW_DROPPED_SEND_EVENT");        case(GM_NEW_BAD_SEND_VMA_EVENT):                return("GM_NEW_BAD_SEND_VMA_EVENT");        case(GM_NEW_BAD_RECV_VMA_EVENT):                return("GM_NEW_BAD_RECV_VMA_EVENT");        case(_GM_NEW_FLUSHED_ALARM_EVENT):                return("GM_NEW_FLUSHED_ALARM_EVENT");        case(GM_NEW_SENT_TOKENS_EVENT):                return("GM_NEW_SENT_TOKENS_EVENT");        case(GM_NEW_IGNORE_RECV_EVENT):                return("GM_NEW_IGNORE_RECV_EVENT");        case(GM_NEW_ETHERNET_RECV_EVENT):                return("GM_NEW_ETHERNET_RECV_EVENT");        default:                return("Unknown Recv event");        /* _GM_PUT_NOTIFICATION_EVENT */        /* GM_FREE_SEND_TOKEN_EVENT */        /* GM_FREE_HIGH_SEND_TOKEN_EVENT */        }}voidgmnal_yield(int delay){	set_current_state(TASK_INTERRUPTIBLE);	schedule_timeout(delay);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -