
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.
140 строки
3.3 KiB
C
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);
|