5c8ea3a251
Per RFC which expired two weeks ago: We are planning to make a change to Open MPI to always set up the btls. This means the btl init will be called even if add_procs is never called for that btl. In the openib btl free lists fragments are currently allocated in btl_init. To avoid wasting that memory this commit moves that final device setup to the add_procs function. This included allocating free lists, and starting the async event thread. At this time this change is safe since we have a barrier after add_procs in MPI_Init. If this changes we will need to re-think some of the initialization since we might have the possibility of a connection request before add_procs is called. Tested with Mellanox ConnectX2 and QLogic HCAs. Commit also cleans up tabs in btl_openib_async.c. cmr=v1.7.5:reviewer=miked This commit was SVN r30122.
42 строки
1015 B
C
42 строки
1015 B
C
/*
|
|
* Copyright (c) 2007-2008 Mellanox Technologies. All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*
|
|
* @file
|
|
*/
|
|
|
|
#ifndef MCA_BTL_OPENIB_ASYNC_H
|
|
#define MCA_BTL_OPENIB_ASYNC_H
|
|
#include "btl_openib_endpoint.h"
|
|
|
|
int start_async_event_thread(void);
|
|
void mca_btl_openib_load_apm(struct ibv_qp *qp, mca_btl_openib_endpoint_t *ep);
|
|
int btl_openib_async_command_done(int exp);
|
|
#if HAVE_XRC
|
|
void mca_btl_openib_load_apm_xrc_rcv(uint32_t qp_num, mca_btl_openib_endpoint_t *ep);
|
|
#endif
|
|
|
|
#define APM_ENABLED (0 != mca_btl_openib_component.apm_lmc || 0 != mca_btl_openib_component.apm_ports)
|
|
|
|
/*
|
|
* Command types for communicating with the async thread
|
|
*/
|
|
typedef enum {
|
|
OPENIB_ASYNC_CMD_FD_ADD,
|
|
OPENIB_ASYNC_CMD_FD_REMOVE,
|
|
OPENIB_ASYNC_IGNORE_QP_ERR,
|
|
OPENIB_ASYNC_THREAD_EXIT
|
|
} btl_openib_async_cmd_type_t;
|
|
|
|
typedef struct {
|
|
btl_openib_async_cmd_type_t a_cmd;
|
|
int fd;
|
|
struct ibv_qp *qp;
|
|
} mca_btl_openib_async_cmd_t;
|
|
|
|
#endif
|