1
1

Add memchecker support for osc rdma communication.

This commit was SVN r18173.
Этот коммит содержится в:
Shiqing Fan 2008-04-16 13:29:55 +00:00
родитель 79da2fdd2c
Коммит 1c4c7e0f2f
4 изменённых файлов: 76 добавлений и 13 удалений

Просмотреть файл

@ -3,7 +3,7 @@
* All rights reserved.
* Copyright (c) 2004-2006 The Trustees of the University of Tennessee.
* All rights reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* Copyright (c) 2004-2008 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
@ -30,6 +30,7 @@
#include "ompi/datatype/datatype_prototypes.h"
#include "osc_base_obj_convert.h"
#include "ompi/memchecker.h"
int
ompi_osc_base_get_primitive_type_info(ompi_datatype_t *datatype,
@ -233,13 +234,21 @@ ompi_osc_base_process_op(void *outbuf,
convertor.convertor.master = &master;
convertor.convertor.fAdvance = ompi_unpack_general;
iov.iov_len = inbuflen;
iov.iov_len = inbuflen;
iov.iov_base = (IOVBASE_TYPE*) inbuf;
max_data = iov.iov_len;
max_data = iov.iov_len;
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_defined,
&convertor.convertor);
);
ompi_convertor_unpack(&convertor.convertor,
&iov,
&iov_count,
&max_data);
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_noaccess,
&convertor.convertor);
);
OBJ_DESTRUCT(&convertor);
}

Просмотреть файл

@ -3,7 +3,7 @@
* All rights reserved.
* Copyright (c) 2004-2006 The Trustees of the University of Tennessee.
* All rights reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* Copyright (c) 2004-2008 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
@ -33,6 +33,7 @@
#include "ompi/mca/osc/base/osc_base_obj_convert.h"
#include "ompi/datatype/datatype.h"
#include "ompi/datatype/dt_arch.h"
#include "ompi/memchecker.h"
static inline int32_t
create_send_tag(ompi_osc_rdma_module_t *module)
@ -724,8 +725,17 @@ ompi_osc_rdma_replyreq_send(ompi_osc_rdma_module_t *module,
iov.iov_len = max_data;
iov.iov_base = (IOVBASE_TYPE*)((unsigned char*) descriptor->des_src[0].seg_addr.pval + written_data);
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_defined,
&replyreq->rep_target_convertor);
);
ret = ompi_convertor_pack(&replyreq->rep_target_convertor, &iov, &iov_count,
&max_data );
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_noaccess,
&replyreq->rep_target_convertor);
);
if (ret < 0) {
ret = OMPI_ERR_FATAL;
goto cleanup;
@ -812,20 +822,26 @@ ompi_osc_rdma_sendreq_recv_put(ompi_osc_rdma_module_t *module,
OBJ_CONSTRUCT(&convertor, ompi_convertor_t);
/* initialize convertor */
proc = ompi_comm_peer_lookup(module->m_comm, header->hdr_origin);
proc = ompi_comm_peer_lookup(module->m_comm, header->hdr_origin);
ompi_convertor_copy_and_prepare_for_recv(proc->proc_convertor,
datatype,
header->hdr_target_count,
target,
0,
&convertor);
iov.iov_len = header->hdr_msg_length;
iov.iov_len = header->hdr_msg_length;
iov.iov_base = (IOVBASE_TYPE*)*inbuf;
max_data = iov.iov_len;
max_data = iov.iov_len;
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_defined, &convertor);
);
ompi_convertor_unpack(&convertor,
&iov,
&iov_count,
&max_data );
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_noaccess, &convertor);
);
OBJ_DESTRUCT(&convertor);
OBJ_RELEASE(datatype);
inmsg_mark_complete(module);
@ -914,10 +930,18 @@ ompi_osc_rdma_sendreq_recv_accum_long_cb(ompi_osc_rdma_longreq_t *longreq)
iov.iov_len = header->hdr_msg_length;
iov.iov_base = (IOVBASE_TYPE*) payload;
max_data = iov.iov_len;
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_defined,
&convertor);
);
ompi_convertor_unpack(&convertor,
&iov,
&iov_count,
&max_data);
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_noaccess,
&convertor);
);
OBJ_DESTRUCT(&convertor);
} else {
/* copy the data from the temporary buffer into the user window */
@ -993,13 +1017,19 @@ ompi_osc_rdma_sendreq_recv_accum(ompi_osc_rdma_module_t *module,
0,
&convertor);
iov.iov_len = header->hdr_msg_length;
iov.iov_len = header->hdr_msg_length;
iov.iov_base = (IOVBASE_TYPE*)*payload;
max_data = iov.iov_len;
max_data = iov.iov_len;
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_defined, &convertor);
);
ompi_convertor_unpack(&convertor,
&iov,
&iov_count,
&max_data);
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_noaccess, &convertor);
);
OBJ_DESTRUCT(&convertor);
} else {
void *buffer = NULL;
@ -1034,13 +1064,19 @@ ompi_osc_rdma_sendreq_recv_accum(ompi_osc_rdma_module_t *module,
0,
&convertor);
iov.iov_len = header->hdr_msg_length;
iov.iov_len = header->hdr_msg_length;
iov.iov_base = (IOVBASE_TYPE*)*payload;
max_data = iov.iov_len;
max_data = iov.iov_len;
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_defined, &convertor);
);
ompi_convertor_unpack(&convertor,
&iov,
&iov_count,
&max_data);
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_noaccess, &convertor);
);
OBJ_DESTRUCT(&convertor);
} else {
buffer = *payload;
@ -1174,13 +1210,21 @@ ompi_osc_rdma_replyreq_recv(ompi_osc_rdma_module_t *module,
size_t max_data;
int32_t count;
iov.iov_len = header->hdr_msg_length;
iov.iov_len = header->hdr_msg_length;
iov.iov_base = (IOVBASE_TYPE*)*payload;
max_data = iov.iov_len;
max_data = iov.iov_len;
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_defined,
&sendreq->req_origin_convertor);
);
ompi_convertor_unpack(&sendreq->req_origin_convertor,
&iov,
&iov_count,
&max_data );
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_noaccess,
&sendreq->req_origin_convertor);
);
count = sendreq->req_module->m_num_pending_out -= 1;
ompi_osc_rdma_sendreq_free(sendreq);

Просмотреть файл

@ -30,6 +30,7 @@
#include "ompi/proc/proc.h"
#include "ompi/op/op.h"
#include "ompi/mca/pml/pml.h"
#include "ompi/memchecker.h"
struct ompi_osc_rdma_replyreq_t {
@ -128,6 +129,10 @@ ompi_osc_rdma_replyreq_init_origin(ompi_osc_rdma_replyreq_t *replyreq,
static inline int
ompi_osc_rdma_replyreq_free(ompi_osc_rdma_replyreq_t *replyreq)
{
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_defined,
&replyreq->rep_target_convertor);
);
ompi_convertor_cleanup(&replyreq->rep_target_convertor);
OBJ_RELEASE(replyreq->rep_target_datatype);

Просмотреть файл

@ -30,6 +30,7 @@
#include "ompi/proc/proc.h"
#include "ompi/op/op.h"
#include "ompi/mca/pml/pml.h"
#include "ompi/memchecker.h"
typedef enum {
OMPI_OSC_RDMA_GET,
@ -169,6 +170,10 @@ static inline int
ompi_osc_rdma_sendreq_free(ompi_osc_rdma_sendreq_t *sendreq)
{
if (0 == (--sendreq->req_refcount)) {
MEMCHECKER(
memchecker_convertor_call(&opal_memchecker_base_mem_defined,
&sendreq->req_origin_convertor);
);
ompi_convertor_cleanup(&sendreq->req_origin_convertor);
OBJ_RELEASE(sendreq->req_target_datatype);