示例#1
0
static ssize_t sock_ep_atomic_readwritemsg(struct fid_ep *ep,
				const struct fi_msg_atomic *msg,
				struct fi_ioc *resultv, void **result_desc,
				size_t result_count, uint64_t flags)
{
	switch (msg->op) {
	case FI_MIN:
	case FI_MAX:
	case FI_SUM:
	case FI_PROD:
	case FI_LOR:
	case FI_LAND:
	case FI_BOR:
	case FI_BAND:
	case FI_LXOR:
	case FI_BXOR:
	case FI_ATOMIC_READ:
	case FI_ATOMIC_WRITE:
		break;
	default:
		SOCK_LOG_ERROR("Invalid operation type\n");
		return -FI_EINVAL;
	}

	return sock_ep_tx_atomic(ep, msg, NULL, NULL, 0,
				 resultv, result_desc, result_count, flags);
}
示例#2
0
static ssize_t sock_ep_atomic_writemsg(struct fid_ep *ep,
			const struct fi_msg_atomic *msg, uint64_t flags)
{
#if ENABLE_DEBUG
	switch (msg->op) {
	case FI_MIN:
	case FI_MAX:
	case FI_SUM:
	case FI_PROD:
	case FI_LOR:
	case FI_LAND:
	case FI_BOR:
	case FI_BAND:
	case FI_LXOR:
	case FI_BXOR:
	case FI_ATOMIC_WRITE:
		break;
	default:
		SOCK_LOG_ERROR("Invalid operation type\n");
		return -FI_EINVAL;
	}
#endif
	return sock_ep_tx_atomic(ep, msg, NULL, NULL, 0,
				  NULL, NULL, 0, flags);
}
示例#3
0
文件: sock_atomic.c 项目: ORNL/ompi
static ssize_t sock_ep_atomic_readwritemsg(struct fid_ep *ep, 
					    const struct fi_msg_atomic *msg,
					    struct fi_ioc *resultv, void **result_desc, 
					    size_t result_count, uint64_t flags)
{
	return sock_ep_tx_atomic(ep, msg, NULL, NULL, 0,
				 resultv, result_desc, result_count, flags);
}
示例#4
0
文件: sock_atomic.c 项目: ORNL/ompi
static ssize_t sock_ep_atomic_compwritemsg(struct fid_ep *ep,
			const struct fi_msg_atomic *msg,
			const struct fi_ioc *comparev, void **compare_desc, size_t compare_count,
			struct fi_ioc *resultv, void **result_desc, size_t result_count,
			uint64_t flags)
{
	return sock_ep_tx_atomic(ep, msg, comparev, compare_desc, compare_count,
				 resultv, result_desc, result_count, flags);
}
示例#5
0
static ssize_t sock_ep_atomic_compwritemsg(struct fid_ep *ep,
			const struct fi_msg_atomic *msg,
			const struct fi_ioc *comparev, void **compare_desc,
			size_t compare_count, struct fi_ioc *resultv,
			void **result_desc, size_t result_count, uint64_t flags)
{
	switch (msg->op) {
	case FI_CSWAP:
	case FI_CSWAP_NE:
	case FI_CSWAP_LE:
	case FI_CSWAP_LT:
	case FI_CSWAP_GE:
	case FI_CSWAP_GT:
	case FI_MSWAP:
		break;
	default:
		SOCK_LOG_ERROR("Invalid operation type\n");
		return -FI_EINVAL;
	}

	return sock_ep_tx_atomic(ep, msg, comparev, compare_desc, compare_count,
				 resultv, result_desc, result_count, flags);
}
示例#6
0
void sock_cntr_check_trigger_list(struct sock_cntr *cntr)
{
    struct sock_trigger *trigger;
    struct dlist_entry *entry;
    int ret = 0;

    fastlock_acquire(&cntr->trigger_lock);
    for (entry = cntr->trigger_list.next;
            entry != &cntr->trigger_list;) {

        trigger = container_of(entry, struct sock_trigger, entry);
        entry = entry->next;

        if (atomic_get(&cntr->value) < trigger->threshold)
            continue;

        switch (trigger->op_type) {
        case SOCK_OP_SEND:
            ret = sock_ep_sendmsg(trigger->ep, &trigger->op.msg.msg,
                                  trigger->flags & ~FI_TRIGGER);
            break;

        case SOCK_OP_RECV:
            ret = sock_ep_recvmsg(trigger->ep, &trigger->op.msg.msg,
                                  trigger->flags & ~FI_TRIGGER);
            break;

        case SOCK_OP_TSEND:
            ret = sock_ep_tsendmsg(trigger->ep,
                                   &trigger->op.tmsg.msg,
                                   trigger->flags & ~FI_TRIGGER);
            break;

        case SOCK_OP_TRECV:
            ret = sock_ep_trecvmsg(trigger->ep,
                                   &trigger->op.tmsg.msg,
                                   trigger->flags & ~FI_TRIGGER);
            break;

        case SOCK_OP_WRITE:
            ret = sock_ep_rma_writemsg(trigger->ep,
                                       &trigger->op.rma.msg,
                                       trigger->flags & ~FI_TRIGGER);
            break;

        case SOCK_OP_READ:
            ret = sock_ep_rma_readmsg(trigger->ep,
                                      &trigger->op.rma.msg,
                                      trigger->flags & ~FI_TRIGGER);
            break;

        case SOCK_OP_ATOMIC:
            ret = sock_ep_tx_atomic(trigger->ep,
                                    &trigger->op.atomic.msg,
                                    trigger->op.atomic.comparev,
                                    NULL,
                                    trigger->op.atomic.compare_count,
                                    trigger->op.atomic.resultv,
                                    NULL,
                                    trigger->op.atomic.result_count,
                                    trigger->flags & ~FI_TRIGGER);
            break;

        default:
            SOCK_LOG_ERROR("unsupported op\n");
            ret = 0;
            break;
        }

        if (ret != -FI_EAGAIN) {
            dlist_remove(&trigger->entry);
            free(trigger);
        } else {
            break;
        }
    }
    fastlock_release(&cntr->trigger_lock);
}
示例#7
0
文件: sock_atomic.c 项目: ORNL/ompi
static ssize_t sock_ep_atomic_writemsg(struct fid_ep *ep,
			const struct fi_msg_atomic *msg, uint64_t flags)
{
	return sock_ep_tx_atomic(ep, msg, NULL, NULL, 0,
				  NULL, NULL, 0, flags);
}