Skip to content

Commit 16d0309

Browse files
author
Sergey Tatarintsev
committed
prov/shm: Fix fi_av_insert() for FI_ADDR_STR address format
Treat addr parameter as string array (char**) Fix fabtests and fi_pingpong for FI_ADDR_STR address format Signed-off-by: Sergey Tatarintsev <[email protected]>
1 parent b3f9890 commit 16d0309

File tree

4 files changed

+33
-15
lines changed

4 files changed

+33
-15
lines changed

fabtests/common/shared.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1564,8 +1564,17 @@ int ft_av_insert(struct fid_av *av, void *addr, size_t count, fi_addr_t *fi_addr
15641564
uint64_t flags, void *context)
15651565
{
15661566
int ret;
1567+
void *addr_ptr;
15671568

1568-
ret = fi_av_insert(av, addr, count, fi_addr, flags, context);
1569+
/*
1570+
* When using the FI_ADDR_STR format, the addr parameter should reference
1571+
* an array of strings (char **).
1572+
* Ensure we try to insert only one addrress in such format
1573+
*/
1574+
assert((fi->addr_format == FI_ADDR_STR && count == 1) ||
1575+
fi->addr_format != FI_ADDR_STR);
1576+
addr_ptr = (fi->addr_format == FI_ADDR_STR) ? &addr : addr;
1577+
ret = fi_av_insert(av, addr_ptr, count, fi_addr, flags, context);
15691578
if (ret < 0) {
15701579
FT_PRINTERR("fi_av_insert", ret);
15711580
return ret;

fabtests/test_configs/shm/shm.exclude

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ inject_test
55
-e msg
66
^fi_dgram
77
-e dgram
8+
^fi_rdm g00n13s
89

910
# Exclude tests that use sread/polling
1011
rdm_cntr_pingpong

prov/shm/src/smr_av.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,17 +121,18 @@ static int smr_av_insert(struct fid_av *av_fid, const void *addr, size_t count,
121121
int64_t shm_id = -1;
122122
int i, ret;
123123
int succ_count = 0;
124+
const char **string_names = (void *)addr;
124125

125126
util_av = container_of(av_fid, struct util_av, av_fid);
126127
smr_av = container_of(util_av, struct smr_av, util_av);
127128

128-
for (i = 0; i < count; i++, addr = (char *) addr + strlen(addr) + 1) {
129-
FI_INFO(&smr_prov, FI_LOG_AV, "%s\n", (const char *) addr);
129+
for (i = 0; i < count; i++) {
130+
FI_INFO(&smr_prov, FI_LOG_AV, "%s\n", (const char *) string_names[i]);
130131

131132
util_addr = FI_ADDR_NOTAVAIL;
132133
if (smr_av->used < SMR_MAX_PEERS) {
133134
ret = smr_map_add(&smr_prov, &smr_av->smr_map,
134-
addr, &shm_id);
135+
string_names[i], &shm_id);
135136
if (!ret) {
136137
ofi_genlock_lock(&util_av->lock);
137138
ret = ofi_av_insert_addr(util_av, &shm_id,

util/pingpong.c

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1565,21 +1565,19 @@ static int pp_init_ep(struct ct_pingpong *ct)
15651565
return 0;
15661566
}
15671567

1568-
static int pp_av_insert(struct fid_av *av, void *addr, size_t count,
1569-
fi_addr_t *fi_addr, uint64_t flags, void *context)
1568+
static int pp_av_insert(struct fid_av *av, void *addr, fi_addr_t *fi_addr,
1569+
uint64_t flags, void *context)
15701570
{
15711571
int ret;
15721572

15731573
PP_DEBUG("Connection-less endpoint: inserting new address in vector\n");
15741574

1575-
ret = fi_av_insert(av, addr, count, fi_addr, flags, context);
1575+
ret = fi_av_insert(av, addr, 1, fi_addr, flags, context);
15761576
if (ret < 0) {
15771577
PP_PRINTERR("fi_av_insert", ret);
15781578
return ret;
1579-
} else if (ret != count) {
1580-
PP_ERR("fi_av_insert: number of addresses inserted = %d;"
1581-
" number of addresses given = %zd\n",
1582-
ret, count);
1579+
} else if (ret != 1) {
1580+
PP_ERR("fi_av_insert: cannot insert address");
15831581
return -EXIT_FAILURE;
15841582
}
15851583

@@ -1777,6 +1775,7 @@ static int pp_client_connect(struct ct_pingpong *ct)
17771775
static int pp_init_fabric(struct ct_pingpong *ct)
17781776
{
17791777
int ret;
1778+
void *addrs;
17801779

17811780
ret = pp_ctrl_init(ct);
17821781
if (ret)
@@ -1841,21 +1840,29 @@ static int pp_init_fabric(struct ct_pingpong *ct)
18411840

18421841
if (ct->opts.dst_addr) {
18431842
/* Set */
1844-
ret = pp_av_insert(ct->av, ct->rem_name, 1, &(ct->remote_fi_addr), 0,
1843+
addrs = ct->hints->addr_format == FI_ADDR_STR ?
1844+
&ct->rem_name : ct->rem_name;
1845+
ret = pp_av_insert(ct->av, addrs, &(ct->remote_fi_addr), 0,
18451846
NULL);
18461847
if (ret)
18471848
return ret;
1849+
addrs = ct->hints->addr_format == FI_ADDR_STR ?
1850+
&ct->local_name : ct->local_name;
18481851
if (ct->fi->domain_attr->caps & FI_LOCAL_COMM)
1849-
ret = pp_av_insert(ct->av, ct->local_name, 1,
1852+
ret = pp_av_insert(ct->av, addrs,
18501853
&(ct->local_fi_addr), 0, NULL);
18511854
} else {
18521855
if (ct->fi->domain_attr->caps & FI_LOCAL_COMM) {
1853-
ret = pp_av_insert(ct->av, ct->local_name, 1,
1856+
addrs = ct->hints->addr_format == FI_ADDR_STR ?
1857+
&ct->local_name : ct->local_name;
1858+
ret = pp_av_insert(ct->av, addrs,
18541859
&(ct->local_fi_addr), 0, NULL);
18551860
if (ret)
18561861
return ret;
18571862
}
1858-
ret = pp_av_insert(ct->av, ct->rem_name, 1, &(ct->remote_fi_addr), 0,
1863+
addrs = ct->hints->addr_format == FI_ADDR_STR ?
1864+
&ct->rem_name : ct->rem_name;
1865+
ret = pp_av_insert(ct->av, addrs, &(ct->remote_fi_addr), 0,
18591866
NULL);
18601867
}
18611868
if (ret)

0 commit comments

Comments
 (0)