1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
2 /*
3 * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
4 * University Research and Technology
5 * Corporation. All rights reserved.
6 * Copyright (c) 2004-2009 The University of Tennessee and The University
7 * of Tennessee Research Foundation. All rights
8 * reserved.
9 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
10 * University of Stuttgart. All rights reserved.
11 * Copyright (c) 2004-2005 The Regents of the University of California.
12 * All rights reserved.
13 * Copyright (c) 2009 Cisco Systems, Inc. All rights reserved.
14 * Copyright (c) 2012 NVIDIA Corporation. All rights reserved.
15 * Copyright (c) 2015 Los Alamos National Security, LLC. All rights
16 * reserved.
17 * $COPYRIGHT$
18 *
19 * Additional copyrights may follow
20 *
21 * $HEADER$
22 */
23 #include "opal_config.h"
24 #include "btl_smcuda_frag.h"
25
26
mca_btl_smcuda_frag_common_constructor(mca_btl_smcuda_frag_t * frag)27 static inline void mca_btl_smcuda_frag_common_constructor(mca_btl_smcuda_frag_t* frag)
28 {
29 frag->hdr = (mca_btl_smcuda_hdr_t*)frag->base.super.ptr;
30 if(frag->hdr != NULL) {
31 frag->hdr->frag = (mca_btl_smcuda_frag_t*)((uintptr_t)frag |
32 MCA_BTL_SMCUDA_FRAG_ACK);
33 frag->segment.seg_addr.pval = ((char*)frag->hdr) +
34 sizeof(mca_btl_smcuda_hdr_t);
35 frag->hdr->my_smp_rank = mca_btl_smcuda_component.my_smp_rank;
36 }
37 frag->segment.seg_len = frag->size;
38 frag->base.des_segments = &frag->segment;
39 frag->base.des_segment_count = 1;
40 frag->base.des_flags = 0;
41 #if OPAL_CUDA_SUPPORT
42 frag->registration = NULL;
43 #endif /* OPAL_CUDA_SUPPORT */
44 }
45
mca_btl_smcuda_frag1_constructor(mca_btl_smcuda_frag_t * frag)46 static void mca_btl_smcuda_frag1_constructor(mca_btl_smcuda_frag_t* frag)
47 {
48 frag->size = mca_btl_smcuda_component.eager_limit;
49 frag->my_list = &mca_btl_smcuda_component.sm_frags_eager;
50 mca_btl_smcuda_frag_common_constructor(frag);
51 }
52
mca_btl_smcuda_frag2_constructor(mca_btl_smcuda_frag_t * frag)53 static void mca_btl_smcuda_frag2_constructor(mca_btl_smcuda_frag_t* frag)
54 {
55 frag->size = mca_btl_smcuda_component.max_frag_size;
56 frag->my_list = &mca_btl_smcuda_component.sm_frags_max;
57 mca_btl_smcuda_frag_common_constructor(frag);
58 }
59
mca_btl_smcuda_user_constructor(mca_btl_smcuda_frag_t * frag)60 static void mca_btl_smcuda_user_constructor(mca_btl_smcuda_frag_t* frag)
61 {
62 frag->size = 0;
63 frag->my_list = &mca_btl_smcuda_component.sm_frags_user;
64 mca_btl_smcuda_frag_common_constructor(frag);
65 }
66
67 OBJ_CLASS_INSTANCE(
68 mca_btl_smcuda_frag1_t,
69 mca_btl_base_descriptor_t,
70 mca_btl_smcuda_frag1_constructor,
71 NULL);
72
73 OBJ_CLASS_INSTANCE(
74 mca_btl_smcuda_frag2_t,
75 mca_btl_base_descriptor_t,
76 mca_btl_smcuda_frag2_constructor,
77 NULL);
78
79 OBJ_CLASS_INSTANCE(
80 mca_btl_smcuda_user_t,
81 mca_btl_base_descriptor_t,
82 mca_btl_smcuda_user_constructor,
83 NULL);
84