1
1
openmpi/ompi/mca/btl/pcie/btl_pcie_frag.c
Ralph Castain 4d3aa5a8a4 Once again, into the breach!
Yes, friends, our favorite PCIE BTL has resurfaced as mgmt vacillates over its existence. This is an updated version that actually mostly works, in its final stages of debugging.

Some generalization still remains to be done...

This commit was SVN r21358.
2009-06-02 22:26:36 +00:00

140 строки
3.3 KiB
C

/*
* Copyright (c) 2007 Los Alamos National Security, LLC.
* All righs reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#include "ompi_config.h"
#include "btl_pcie_frag.h"
#include "btl_pcie.h"
static void
mca_btl_pcie_sma_buf_eager_constructor(mca_btl_pcie_sma_buf_t* buf)
{
buf->pcie_data.pval = buf + 1;
buf->type = MCA_BTL_PCIE_TYPE_EAGER;
}
static void
mca_btl_pcie_sma_buf_max_constructor(mca_btl_pcie_sma_buf_t* buf)
{
buf->pcie_data.pval = buf + 1;
buf->type = MCA_BTL_PCIE_TYPE_MAX;
}
OBJ_CLASS_INSTANCE(mca_btl_pcie_sma_buf_eager_t,
ompi_free_list_item_t,
mca_btl_pcie_sma_buf_eager_constructor,
NULL);
OBJ_CLASS_INSTANCE(mca_btl_pcie_sma_buf_max_t,
ompi_free_list_item_t,
mca_btl_pcie_sma_buf_max_constructor,
NULL);
static void
mca_btl_pcie_frag_dma_constructor(mca_btl_pcie_frag_t* frag)
{
frag->base.des_src = NULL;
frag->base.des_src_cnt = 0;
frag->base.des_dst = NULL;
frag->base.des_dst_cnt = 0;
frag->segment.seg_addr.pval = NULL;
frag->segment.seg_len = 0;
frag->endpoint = NULL;
frag->hdr = NULL;
frag->size = 0;
frag->registration = NULL;
frag->type = MCA_BTL_PCIE_TYPE_RDMA;
frag->sma_buf = NULL;
}
static void
mca_btl_pcie_frag_common_constructor(mca_btl_pcie_frag_t* frag)
{
frag->base.des_src = &frag->segment;
frag->base.des_src_cnt = 1;
frag->base.des_dst = NULL;
frag->base.des_dst_cnt = 0;
frag->hdr = (mca_btl_pcie_header_t*) (frag + 1);
frag->hdr->send_frag.pval = frag;
frag->segment.seg_addr.pval = ((unsigned char*) frag->hdr) + sizeof(mca_btl_pcie_header_t);
frag->segment.seg_len = frag->size;
frag->endpoint = NULL;
frag->registration = NULL;
frag->sma_buf = NULL;
}
static void
mca_btl_pcie_frag_eager_constructor(mca_btl_pcie_frag_t* frag)
{
frag->size = mca_btl_pcie_module.super.btl_eager_limit;
mca_btl_pcie_frag_common_constructor(frag);
frag->type = MCA_BTL_PCIE_TYPE_EAGER;
}
static void mca_btl_pcie_frag_max_constructor(mca_btl_pcie_frag_t* frag)
{
frag->size = mca_btl_pcie_module.super.btl_max_send_size;
mca_btl_pcie_frag_common_constructor(frag);
frag->type = MCA_BTL_PCIE_TYPE_MAX;
}
static void mca_btl_pcie_frag_recv_constructor(mca_btl_pcie_frag_t *frag)
{
frag->base.des_src = NULL;
frag->base.des_src_cnt = 0;
frag->base.des_dst = &frag->segment;
frag->base.des_dst_cnt = 1;
frag->segment.seg_addr.pval = NULL;
frag->segment.seg_len = 0;
frag->endpoint = NULL;
frag->hdr = NULL;
frag->size = 0;
frag->registration = NULL;
frag->type = MCA_BTL_PCIE_TYPE_RECV;
frag->sma_buf = NULL;
}
OBJ_CLASS_INSTANCE(
mca_btl_pcie_frag_eager_t,
mca_btl_base_descriptor_t,
mca_btl_pcie_frag_eager_constructor,
NULL);
OBJ_CLASS_INSTANCE(
mca_btl_pcie_frag_max_t,
mca_btl_base_descriptor_t,
mca_btl_pcie_frag_max_constructor,
NULL);
OBJ_CLASS_INSTANCE(
mca_btl_pcie_frag_recv_t,
mca_btl_base_descriptor_t,
mca_btl_pcie_frag_recv_constructor,
NULL);
OBJ_CLASS_INSTANCE(
mca_btl_pcie_frag_dma_t,
mca_btl_base_descriptor_t,
mca_btl_pcie_frag_dma_constructor,
NULL);