libfabric: update to Github lifabric 90ac5a258418e
Update to latest upstream Github lifabric in order to fix some usnic bugs.
Этот коммит содержится в:
родитель
714d9aa67e
Коммит
a1daa39425
@ -1,7 +1,7 @@
|
|||||||
This README is for userspace RDMA fabric library.
|
This README is for userspace RDMA fabric library.
|
||||||
|
|
||||||
Version Libfabric v1.0.0rc3
|
Version Libfabric v1.0.0rc3
|
||||||
Released on 2015-03-10
|
Released on 2015-03-12
|
||||||
|
|
||||||
Building
|
Building
|
||||||
========
|
========
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.TH fi_av 3 "2015\-03\-09" "Libfabric Programmer\[aq]s Manual" "\@VERSION\@"
|
.TH fi_av 3 "2015\-03\-11" "Libfabric Programmer\[aq]s Manual" "\@VERSION\@"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
.PP
|
.PP
|
||||||
fi_av - Address vector operations
|
fi_av - Address vector operations
|
||||||
@ -201,6 +201,15 @@ operation, even if all addresses fail.
|
|||||||
The context field in all completions will be the context specified to
|
The context field in all completions will be the context specified to
|
||||||
the insert call, and the data field in the final completion entry will
|
the insert call, and the data field in the final completion entry will
|
||||||
report the number of addresses successfully inserted.
|
report the number of addresses successfully inserted.
|
||||||
|
If an error occurs during the asynchronous insertion, an error
|
||||||
|
completion entry is returned (see \f[C]fi_av\f[](3) for a discussion of
|
||||||
|
the fi_eq_err_entry error completion struct).
|
||||||
|
The context field of the error completion will be the context that was
|
||||||
|
specified in the insert call; the data field will contain the index of
|
||||||
|
the failed address.
|
||||||
|
There will be one error completion returned for each address that fails
|
||||||
|
to insert into the AV.
|
||||||
|
.PP
|
||||||
: \ : If an AV is opened with FI_EVENT, any insertions attempted before
|
: \ : If an AV is opened with FI_EVENT, any insertions attempted before
|
||||||
an EQ is bound to the AV will fail with -FI_ENOEQ.
|
an EQ is bound to the AV will fail with -FI_ENOEQ.
|
||||||
: \ : Error completions for failed insertions will contain the index of
|
: \ : Error completions for failed insertions will contain the index of
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.TH fi_eq 3 "2015\-02\-23" "Libfabric Programmer\[aq]s Manual" "\@VERSION\@"
|
.TH fi_eq 3 "2015\-03\-11" "Libfabric Programmer\[aq]s Manual" "\@VERSION\@"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
.PP
|
.PP
|
||||||
fi_eq - Event queue operations
|
fi_eq - Event queue operations
|
||||||
@ -227,7 +227,7 @@ The format of this structure is:
|
|||||||
struct\ fi_eq_entry\ {
|
struct\ fi_eq_entry\ {
|
||||||
\ \ \ \ fid_t\ \ \ \ \ \ \ \ \ \ \ \ fid;\ \ \ \ \ \ \ \ /*\ fid\ associated\ with\ request\ */
|
\ \ \ \ fid_t\ \ \ \ \ \ \ \ \ \ \ \ fid;\ \ \ \ \ \ \ \ /*\ fid\ associated\ with\ request\ */
|
||||||
\ \ \ \ void\ \ \ \ \ \ \ \ \ \ \ \ *context;\ \ \ \ /*\ operation\ context\ */
|
\ \ \ \ void\ \ \ \ \ \ \ \ \ \ \ \ *context;\ \ \ \ /*\ operation\ context\ */
|
||||||
\ \ \ \ uint32_t\ \ \ \ \ \ \ \ \ data;\ \ \ \ \ \ \ /*\ completion\ dependent\ data\ */
|
\ \ \ \ uint64_t\ \ \ \ \ \ \ \ \ data;\ \ \ \ \ \ \ /*\ completion-specific\ data\ */
|
||||||
};
|
};
|
||||||
\f[]
|
\f[]
|
||||||
.fi
|
.fi
|
||||||
@ -241,6 +241,9 @@ fid_av.
|
|||||||
The context field will be set to the context specified as part of the
|
The context field will be set to the context specified as part of the
|
||||||
operation, if available, otherwise the context will be associated with
|
operation, if available, otherwise the context will be associated with
|
||||||
the fabric descriptor.
|
the fabric descriptor.
|
||||||
|
The data field will be set as described in the man page for the
|
||||||
|
corresponding object type (e.g., see \f[C]fi_av\f[](3) for a description
|
||||||
|
of how asynchronous address vector insertions are completed).
|
||||||
.PP
|
.PP
|
||||||
\f[I]Connection Notification\f[] : Connection notifications are
|
\f[I]Connection Notification\f[] : Connection notifications are
|
||||||
connection management notifications used to setup or teardown
|
connection management notifications used to setup or teardown
|
||||||
@ -340,6 +343,7 @@ The format of this structure is defined below.
|
|||||||
struct\ fi_eq_err_entry\ {
|
struct\ fi_eq_err_entry\ {
|
||||||
\ \ \ \ fid_t\ \ \ \ \ \ \ \ \ \ \ \ fid;\ \ \ \ \ \ \ \ /*\ fid\ associated\ with\ error\ */
|
\ \ \ \ fid_t\ \ \ \ \ \ \ \ \ \ \ \ fid;\ \ \ \ \ \ \ \ /*\ fid\ associated\ with\ error\ */
|
||||||
\ \ \ \ void\ \ \ \ \ \ \ \ \ \ \ \ *context;\ \ \ \ /*\ operation\ context\ */
|
\ \ \ \ void\ \ \ \ \ \ \ \ \ \ \ \ *context;\ \ \ \ /*\ operation\ context\ */
|
||||||
|
\ \ \ \ uint64_t\ \ \ \ \ \ \ \ \ data;\ \ \ \ \ \ \ /*\ completion-specific\ data\ */
|
||||||
\ \ \ \ uint32_t\ \ \ \ \ \ \ \ \ index;\ \ \ \ \ \ /*\ index\ for\ vector\ ops\ */
|
\ \ \ \ uint32_t\ \ \ \ \ \ \ \ \ index;\ \ \ \ \ \ /*\ index\ for\ vector\ ops\ */
|
||||||
\ \ \ \ int\ \ \ \ \ \ \ \ \ \ \ \ \ \ err;\ \ \ \ \ \ \ \ /*\ positive\ error\ code\ */
|
\ \ \ \ int\ \ \ \ \ \ \ \ \ \ \ \ \ \ err;\ \ \ \ \ \ \ \ /*\ positive\ error\ code\ */
|
||||||
\ \ \ \ int\ \ \ \ \ \ \ \ \ \ \ \ \ \ prov_errno;\ /*\ provider\ error\ code\ */
|
\ \ \ \ int\ \ \ \ \ \ \ \ \ \ \ \ \ \ prov_errno;\ /*\ provider\ error\ code\ */
|
||||||
@ -355,6 +359,10 @@ will reference a fid_av, and CM events will refer to a fid_ep.
|
|||||||
The context field will be set to the context specified as part of the
|
The context field will be set to the context specified as part of the
|
||||||
operation.
|
operation.
|
||||||
.PP
|
.PP
|
||||||
|
The data field will be set as described in the man page for the
|
||||||
|
corresponding object type (e.g., see \f[C]fi_av\f[](3) for a description
|
||||||
|
of how asynchronous address vector insertions are completed).
|
||||||
|
.PP
|
||||||
The general reason for the error is provided through the err field.
|
The general reason for the error is provided through the err field.
|
||||||
Provider or operational specific error information may also be available
|
Provider or operational specific error information may also be available
|
||||||
through the prov_errno and err_data fields.
|
through the prov_errno and err_data fields.
|
||||||
|
@ -122,12 +122,13 @@ static int psmx_getinfo(uint32_t version, const char *node, const char *service,
|
|||||||
if (hints->ep_attr) {
|
if (hints->ep_attr) {
|
||||||
switch (hints->ep_attr->type) {
|
switch (hints->ep_attr->type) {
|
||||||
case FI_EP_UNSPEC:
|
case FI_EP_UNSPEC:
|
||||||
|
case FI_EP_DGRAM:
|
||||||
case FI_EP_RDM:
|
case FI_EP_RDM:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
PSMX_DEBUG("hints->ep_attr->type=%d, supported=%d,%d.\n",
|
PSMX_DEBUG("hints->ep_attr->type=%d, supported=%d,%d,%d.\n",
|
||||||
hints->ep_attr->type, FI_EP_UNSPEC,
|
hints->ep_attr->type, FI_EP_UNSPEC,
|
||||||
FI_EP_RDM);
|
FI_EP_DGRAM, FI_EP_RDM);
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,7 +164,7 @@ usdf_av_insert_progress(void *v)
|
|||||||
ret = usnic_arp_lookup(dap->uda_ifname,
|
ret = usnic_arp_lookup(dap->uda_ifname,
|
||||||
req->avr_daddr_be, fp->fab_arp_sockfd, eth);
|
req->avr_daddr_be, fp->fab_arp_sockfd, eth);
|
||||||
|
|
||||||
/* anything besides -EAGAIN means request is completed */
|
/* anything besides EAGAIN means request is completed */
|
||||||
if (ret != EAGAIN) {
|
if (ret != EAGAIN) {
|
||||||
TAILQ_REMOVE(&insert->avi_req_list, req, avr_link);
|
TAILQ_REMOVE(&insert->avi_req_list, req, avr_link);
|
||||||
req->avr_status = -ret;
|
req->avr_status = -ret;
|
||||||
|
@ -780,15 +780,23 @@ usdf_fabric_close(fid_t fid)
|
|||||||
/* Tell progression thread to exit */
|
/* Tell progression thread to exit */
|
||||||
fp->fab_exit = 1;
|
fp->fab_exit = 1;
|
||||||
|
|
||||||
ret = usdf_fabric_wake_thread(fp);
|
if (fp->fab_thread) {
|
||||||
if (ret != 0) {
|
ret = usdf_fabric_wake_thread(fp);
|
||||||
return ret;
|
if (ret != 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
pthread_join(fp->fab_thread, &rv);
|
||||||
}
|
}
|
||||||
pthread_join(fp->fab_thread, &rv);
|
|
||||||
usdf_timer_deinit(fp);
|
usdf_timer_deinit(fp);
|
||||||
close(fp->fab_eventfd);
|
if (fp->fab_epollfd != -1) {
|
||||||
close(fp->fab_epollfd);
|
close(fp->fab_epollfd);
|
||||||
close(fp->fab_arp_sockfd);
|
}
|
||||||
|
if (fp->fab_eventfd != -1) {
|
||||||
|
close(fp->fab_eventfd);
|
||||||
|
}
|
||||||
|
if (fp->fab_arp_sockfd != -1) {
|
||||||
|
close(fp->fab_arp_sockfd);
|
||||||
|
}
|
||||||
|
|
||||||
free(fp);
|
free(fp);
|
||||||
return 0;
|
return 0;
|
||||||
@ -855,6 +863,7 @@ static int
|
|||||||
usdf_fabric_open(struct fi_fabric_attr *fattrp, struct fid_fabric **fabric,
|
usdf_fabric_open(struct fi_fabric_attr *fattrp, struct fid_fabric **fabric,
|
||||||
void *context)
|
void *context)
|
||||||
{
|
{
|
||||||
|
struct fid_fabric *ff;
|
||||||
struct usdf_fabric *fp;
|
struct usdf_fabric *fp;
|
||||||
struct usdf_usnic_info *dp;
|
struct usdf_usnic_info *dp;
|
||||||
struct usdf_dev_entry *dep;
|
struct usdf_dev_entry *dep;
|
||||||
@ -928,6 +937,13 @@ usdf_fabric_open(struct fi_fabric_attr *fattrp, struct fid_fabric **fabric,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* initialize timer subsystem */
|
||||||
|
ret = usdf_timer_init(fp);
|
||||||
|
if (ret != 0) {
|
||||||
|
USDF_INFO("unable to initialize timer\n");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
ret = pthread_create(&fp->fab_thread, NULL,
|
ret = pthread_create(&fp->fab_thread, NULL,
|
||||||
usdf_fabric_progression_thread, fp);
|
usdf_fabric_progression_thread, fp);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
@ -936,13 +952,6 @@ usdf_fabric_open(struct fi_fabric_attr *fattrp, struct fid_fabric **fabric,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* initialize timer subsystem */
|
|
||||||
ret = usdf_timer_init(fp);
|
|
||||||
if (ret != 0) {
|
|
||||||
USDF_INFO("unable to initialize timer\n");
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* create and bind socket for ARP resolution */
|
/* create and bind socket for ARP resolution */
|
||||||
memset(&sin, 0, sizeof(sin));
|
memset(&sin, 0, sizeof(sin));
|
||||||
sin.sin_family = AF_INET;
|
sin.sin_family = AF_INET;
|
||||||
@ -967,19 +976,8 @@ usdf_fabric_open(struct fi_fabric_attr *fattrp, struct fid_fabric **fabric,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
if (fp != NULL) {
|
ff = fab_utof(fp);
|
||||||
if (fp->fab_epollfd != -1) {
|
usdf_fabric_close(&ff->fid);
|
||||||
close(fp->fab_epollfd);
|
|
||||||
}
|
|
||||||
if (fp->fab_eventfd != -1) {
|
|
||||||
close(fp->fab_eventfd);
|
|
||||||
}
|
|
||||||
if (fp->fab_arp_sockfd != -1) {
|
|
||||||
close(fp->fab_arp_sockfd);
|
|
||||||
}
|
|
||||||
usdf_timer_deinit(fp);
|
|
||||||
free(fp);
|
|
||||||
}
|
|
||||||
USDF_DEBUG("returning %d (%s)\n", ret, fi_strerror(-ret));
|
USDF_DEBUG("returning %d (%s)\n", ret, fi_strerror(-ret));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -77,6 +77,8 @@ int usnic_arp_lookup(char *ifname, uint32_t ipaddr, int sockfd, uint8_t *macaddr
|
|||||||
memcpy(macaddr, req.arp_ha.sa_data, 6);
|
memcpy(macaddr, req.arp_ha.sa_data, 6);
|
||||||
else if (status != -1) /* req.arp_flags & ATF_COM == 0 */
|
else if (status != -1) /* req.arp_flags & ATF_COM == 0 */
|
||||||
err = EAGAIN;
|
err = EAGAIN;
|
||||||
|
else if (errno == ENXIO) /* ENXIO means no ARP entry was found */
|
||||||
|
err = EAGAIN;
|
||||||
else /* status == -1 */
|
else /* status == -1 */
|
||||||
err = errno;
|
err = errno;
|
||||||
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user