Skip to content

Commit

Permalink
Merge pull request #3662 from yosefe/topic/ucx-v1.5.2-multiple-fixes
Browse files Browse the repository at this point in the history
Multiple fixes for UCX v1.5.2
  • Loading branch information
yosefe authored Jun 4, 2019
2 parents 7e67a4b + 0cb7b64 commit b03b274
Show file tree
Hide file tree
Showing 14 changed files with 110 additions and 19 deletions.
6 changes: 6 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
##
#

## 1.5.2 (TBD)
Bugfixes:
- Fix segfault when libuct.so is reloaded - issue #3558
- Fix ucx_info crash when printing configuration alias
- Fix static checker errors

## 1.5.1 (April 1, 2019)
Bugfixes:
- Fix dc_mlx5 transport support check for inbox libmlx5 drivers - issue #3301
Expand Down
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ AC_PREREQ([2.63])

define([ucx_ver_major], 1)
define([ucx_ver_minor], 5)
define([ucx_ver_patch], 1)
define([ucx_ver_patch], 2)
define([ts], esyscmd([sh -c "date +%Y%m%d%H%M%S"]))

# This is the API version (see libtool library versioning)
Expand Down
12 changes: 11 additions & 1 deletion contrib/test_jenkins.sh
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ build_docs() {
fi
../configure --prefix=$ucx_inst --with-docs-only
$MAKE clean
$MAKE docs
make docs
$MAKE clean # FIXME distclean does not work with docs-only
}

Expand Down Expand Up @@ -702,6 +702,15 @@ test_dlopen() {
! grep '^socket' strace.log
}

test_dlopen_cfg_print() {
../contrib/configure-devel --prefix=$ucx_inst
$MAKE clean
$MAKE

echo "==== Running test_dlopen_cfg_print ===="
./test/apps/test_dlopen_cfg_print
}

test_memtrack() {
../contrib/configure-devel --prefix=$ucx_inst
$MAKE clean
Expand Down Expand Up @@ -930,6 +939,7 @@ run_tests() {
do_distributed_task 1 4 run_ucp_client_server
do_distributed_task 3 4 test_profiling
do_distributed_task 3 4 test_dlopen
do_distributed_task 2 4 test_dlopen_cfg_print
do_distributed_task 3 4 test_memtrack
do_distributed_task 0 4 test_unused_env_var
do_distributed_task 1 3 test_malloc_hook
Expand Down
5 changes: 4 additions & 1 deletion src/ucp/rma/amo_sw.c
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,10 @@ UCS_PROFILE_FUNC(ucs_status_t, ucp_atomic_req_handler, (arg, data, length, am_fl
} else {
/* atomic operation with result */
req = ucp_request_get(worker);
ucs_assert(req != NULL);
if (req == NULL) {
ucs_error("failed to allocate atomic reply");
return UCS_OK;
}

switch (atomicreqh->length) {
case sizeof(uint32_t):
Expand Down
1 change: 0 additions & 1 deletion src/ucp/rma/rma.inl
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ static inline ucs_status_t ucp_rma_wait(ucp_worker_h worker, void *user_req,
req = (ucp_request_t*)user_req - 1;
do {
ucp_worker_progress(worker);
status = ucp_request_check_status(user_req);
} while (!(req->flags & UCP_REQUEST_FLAG_COMPLETED));
status = req->status;
ucp_request_release(user_req);
Expand Down
10 changes: 8 additions & 2 deletions src/ucp/rma/rma_sw.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,10 @@ void ucp_rma_sw_send_cmpl(ucp_ep_h ep)
ucp_request_t *req;

req = ucp_request_get(ep->worker);
ucs_assert(req != NULL);
if (req == NULL) {
ucs_error("failed to allocate put completion");
return;
}

req->send.ep = ep;
req->send.uct.func = ucp_progress_rma_cmpl;
Expand Down Expand Up @@ -210,7 +213,10 @@ UCS_PROFILE_FUNC(ucs_status_t, ucp_get_req_handler, (arg, data, length, am_flags
ucp_request_t *req;

req = ucp_request_get(worker);
ucs_assert(req != NULL);
if (req == NULL) {
ucs_error("failed to allocate get reply");
return UCS_OK;
}

req->send.ep = ep;
req->send.buffer = (void*)getreqh->address;
Expand Down
4 changes: 2 additions & 2 deletions src/ucs/config/parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -1231,9 +1231,9 @@ ucs_config_parser_print_opts_recurs(FILE *stream, const void *opts,
opts + alias_table_offset,
env_prefix, prefix_list,
field->name, aliased_field,
flags, "%-*s %s%s%s", "alias of:",
flags, "%-*s %s%s",
UCP_CONFIG_PARSER_DOCSTR_WIDTH,
env_prefix, prefix_list,
"alias of:", env_prefix,
aliased_field->name);
}
} else {
Expand Down
17 changes: 11 additions & 6 deletions src/ucs/config/parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,19 @@ typedef struct ucs_config_global_list_entry {


#define UCS_CONFIG_REGISTER_TABLE(_fields, _name, _prefix, _type) \
static ucs_config_global_list_entry_t _fields##_config_entry; \
UCS_STATIC_INIT { \
ucs_config_global_list_entry_t *entry = &_fields##_config_entry; \
extern ucs_list_link_t ucs_config_global_list; \
static ucs_config_global_list_entry_t entry; \
entry.fields = _fields; \
entry.name = _name; \
entry.prefix = _prefix; \
entry.size = sizeof(_type); \
ucs_list_add_tail(&ucs_config_global_list, &entry.list); \
entry->fields = _fields; \
entry->name = _name; \
entry->prefix = _prefix; \
entry->size = sizeof(_type); \
ucs_list_add_tail(&ucs_config_global_list, &entry->list); \
} \
\
UCS_STATIC_CLEANUP { \
ucs_list_del(&_fields##_config_entry.list); \
}


Expand Down
1 change: 0 additions & 1 deletion src/ucs/sys/sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -569,7 +569,6 @@ static void ucs_sysv_shmget_format_error(size_t alloc_size, int flags,
out:
if (!error_detected) {
snprintf(p, endp - p, ", please check shared memory limits by 'ipcs -l'");
p += strlen(p);
}
}

Expand Down
1 change: 0 additions & 1 deletion src/uct/ib/base/ib_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,6 @@ void uct_ib_address_unpack(const uct_ib_address_t *ib_addr, uint16_t *lid,

if (ib_addr->flags & UCT_IB_ADDRESS_FLAG_SUBNET64) {
gid->global.subnet_prefix = *(uint64_t*) ptr;
ptr += sizeof(uint64_t);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/uct/ib/dc/base/dc_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ static void uct_dc_iface_dcis_destroy(uct_dc_iface_t *iface, int max)
static ucs_status_t uct_dc_iface_create_dcis(uct_dc_iface_t *iface,
uct_dc_iface_config_t *config)
{
struct ibv_qp_cap cap;
struct ibv_qp_cap cap = {0};
ucs_status_t status;
int i;

Expand Down
11 changes: 9 additions & 2 deletions test/apps/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ SUBDIRS = sockaddr
endif

noinst_PROGRAMS = \
test_dlopen

test_dlopen \
test_dlopen_cfg_print

objdir = $(shell sed -n -e 's/^objdir=\(.*\)$$/\1/p' $(LIBTOOL))

Expand All @@ -21,6 +21,13 @@ test_dlopen_CPPFLAGS = $(BASE_CPPFLAGS) -g -DUCP_LIB_PATH=$(abs_top_builddir)/sr
test_dlopen_CFLAGS = $(BASE_CFLAGS)
test_dlopen_LDADD = -ldl

test_dlopen_cfg_print_SOURCES = test_dlopen_cfg_print.c
test_dlopen_cfg_print_CPPFLAGS = $(BASE_CPPFLAGS) -g \
-DUCS_LIB_PATH=$(abs_top_builddir)/src/ucs/$(objdir)/libucs.so \
-DUCT_LIB_PATH=$(abs_top_builddir)/src/uct/$(objdir)/libuct.so
test_dlopen_cfg_print_CFLAGS = $(BASE_CFLAGS)
test_dlopen_cfg_print_LDADD = -ldl

if HAVE_TCMALLOC
noinst_PROGRAMS += test_tcmalloc
test_tcmalloc_SOURCES = test_tcmalloc.c
Expand Down
54 changes: 54 additions & 0 deletions test/apps/test_dlopen_cfg_print.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/**
* Copyright (C) Mellanox Technologies Ltd. 2019. ALL RIGHTS RESERVED.
*
* See file LICENSE for terms.
*/

#include <stdlib.h>
#include <dlfcn.h>
#include <stdio.h>

#define _QUOTE(x) #x
#define QUOTE(x) _QUOTE(x)


static void* do_dlopen_or_exit(const char *filename)
{
void *handle;

(void)dlerror();
printf("opening '%s'\n", filename);
handle = dlopen(filename, RTLD_LAZY);
if (handle == NULL) {
fprintf(stderr, "failed to open %s: %s\n", filename,
dlerror());
exit(1);
}

return handle;
}

int main(int argc, char **argv)
{
const char *ucs_filename = QUOTE(UCS_LIB_PATH);
const char *uct_filename = QUOTE(UCT_LIB_PATH);
void *ucs_handle, *uct_handle;
int i;

/* unload and reload uct while ucs is loaded
* would fail if uct global vars are kept on global lists in ucs */
ucs_handle = do_dlopen_or_exit(ucs_filename);
for (i = 0; i < 2; ++i) {
uct_handle = do_dlopen_or_exit(uct_filename);
dlclose(uct_handle);
}

/* print all config table, to force going over the global list in ucs */
void (*print_all_opts)(FILE*,int) = dlsym(ucs_handle,
"ucs_config_parser_print_all_opts");
print_all_opts(stdout, 0);
dlclose(ucs_handle);

printf("done\n");
return 0;
}
3 changes: 3 additions & 0 deletions ucx.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@ rm -f %{buildroot}%{_libdir}/*.la
%postun -p /sbin/ldconfig

%changelog
* Sat Jun 04 2019 Yossi Itigin <yosefe@mellanox.com> 1.5.2-1
- Bump version to 1.5.2
- See NEWS for details
* Sat Mar 23 2019 Yossi Itigin <yosefe@mellanox.com> 1.5.1-1
- Bump version to 1.5.1
- See NEWS for details
Expand Down

0 comments on commit b03b274

Please sign in to comment.