summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
6ff8ec9)
configurations to fail rather than trip a server assertion.
* 5606 fix ensures both peers agree on maximum "immediate" get.
* ranal updates
[#### Rapid Array
AC_MSG_CHECKING([if RapidArray kernel headers are present])
# placeholder
[#### Rapid Array
AC_MSG_CHECKING([if RapidArray kernel headers are present])
# placeholder
+RACPPFLAGS="-I${LINUX}/drivers/xd1/include"
EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
EXTRA_KCFLAGS="$EXTRA_KCFLAGS $RACPPFLAGS"
LB_LINUX_TRY_COMPILE([
EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
EXTRA_KCFLAGS="$EXTRA_KCFLAGS $RACPPFLAGS"
LB_LINUX_TRY_COMPILE([
int ptl_name2nal(char *str);
int ptl_parse_ipaddr (__u32 *ipaddrp, char *str);
int ptl_name2nal(char *str);
int ptl_parse_ipaddr (__u32 *ipaddrp, char *str);
+int ptl_parse_anynid (ptl_nid_t *nidp, char *str);
int ptl_parse_nid (ptl_nid_t *nidp, char *str);
char * ptl_nid2str (char *buffer, ptl_nid_t nid);
int ptl_parse_nid (ptl_nid_t *nidp, char *str);
char * ptl_nid2str (char *buffer, ptl_nid_t nid);
int ptl_name2nal(char *str);
int ptl_parse_ipaddr (__u32 *ipaddrp, char *str);
int ptl_name2nal(char *str);
int ptl_parse_ipaddr (__u32 *ipaddrp, char *str);
+int ptl_parse_anynid (ptl_nid_t *nidp, char *str);
int ptl_parse_nid (ptl_nid_t *nidp, char *str);
char * ptl_nid2str (char *buffer, ptl_nid_t nid);
int ptl_parse_nid (ptl_nid_t *nidp, char *str);
char * ptl_nid2str (char *buffer, ptl_nid_t nid);
__swab64s(&msg->ibm_dststamp);
}
__swab64s(&msg->ibm_dststamp);
}
+ if (msg->ibm_srcnid == PTL_NID_ANY) {
+ CERROR("Bad src nid: "LPX64"\n", msg->ibm_srcnid);
+ return -EPROTO;
+ }
+
switch (msg->ibm_type) {
default:
CERROR("Unknown message type %x\n", msg->ibm_type);
switch (msg->ibm_type) {
default:
CERROR("Unknown message type %x\n", msg->ibm_type);
/* Will it fit in a message? */
nob = offsetof(kib_msg_t, ibm_u.immediate.ibim_payload[payload_nob]);
/* Will it fit in a message? */
nob = offsetof(kib_msg_t, ibm_u.immediate.ibim_payload[payload_nob]);
- if (nob >= IBNAL_MSG_SIZE) {
+ if (nob > IBNAL_MSG_SIZE) {
CERROR("REPLY for "LPX64" too big (RDMA not requested): %d\n",
nid, payload_nob);
return (PTL_FAIL);
CERROR("REPLY for "LPX64" too big (RDMA not requested): %d\n",
nid, payload_nob);
return (PTL_FAIL);
/* Schedule all packets blocking for a connection */
while (!list_empty(&peer->rap_tx_queue)) {
/* Schedule all packets blocking for a connection */
while (!list_empty(&peer->rap_tx_queue)) {
- tx = list_entry(&peer->rap_tx_queue.next,
+ tx = list_entry(peer->rap_tx_queue.next,
kra_tx_t, tx_list);
list_del(&tx->tx_list);
kra_tx_t, tx_list);
list_del(&tx->tx_list);
/* reset reconnection timeouts */
peer->rap_reconnect_interval = RANAL_MIN_RECONNECT_INTERVAL;
/* reset reconnection timeouts */
peer->rap_reconnect_interval = RANAL_MIN_RECONNECT_INTERVAL;
- peer->rap_reconnect_time = CURRENT_TIME;
+ peer->rap_reconnect_time = CURRENT_SECONDS;
write_unlock_irqrestore(&kranal_data.kra_global_lock, flags);
return;
}
LASSERT (peer->rap_reconnect_interval != 0);
write_unlock_irqrestore(&kranal_data.kra_global_lock, flags);
return;
}
LASSERT (peer->rap_reconnect_interval != 0);
- peer->rap_reconnect_time = CURRENT_TIME + peer->rap_reconnect_interval;
+ peer->rap_reconnect_time = CURRENT_SECONDS + peer->rap_reconnect_interval;
peer->rap_reconnect_interval = MAX(RANAL_MAX_RECONNECT_INTERVAL,
1 * peer->rap_reconnect_interval);
peer->rap_reconnect_interval = MAX(RANAL_MAX_RECONNECT_INTERVAL,
1 * peer->rap_reconnect_interval);
INIT_LIST_HEAD(&peer->rap_conns);
INIT_LIST_HEAD(&peer->rap_tx_queue);
INIT_LIST_HEAD(&peer->rap_conns);
INIT_LIST_HEAD(&peer->rap_tx_queue);
- peer->rap_reconnect_time = CURRENT_TIME;
+ peer->rap_reconnect_time = CURRENT_SECONDS;
peer->rap_reconnect_interval = RANAL_MIN_RECONNECT_INTERVAL;
atomic_inc(&kranal_data.kra_npeers);
peer->rap_reconnect_interval = RANAL_MIN_RECONNECT_INTERVAL;
atomic_inc(&kranal_data.kra_npeers);
}
for (i = 0; i < RANAL_N_CONND; i++) {
}
for (i = 0; i < RANAL_N_CONND; i++) {
- rc = kranal_thread_start(kranal_connd, (void *)i);
+ rc = kranal_thread_start(kranal_connd, (void *)(unsigned long)i);
if (rc != 0) {
CERROR("Can't spawn ranal connd[%d]: %d\n",
i, rc);
if (rc != 0) {
CERROR("Can't spawn ranal connd[%d]: %d\n",
i, rc);
#include <linux/sysctl.h>
#include <net/sock.h>
#include <linux/sysctl.h>
#include <net/sock.h>
#define DEBUG_SUBSYSTEM S_NAL
#include <linux/kp30.h>
#define DEBUG_SUBSYSTEM S_NAL
#include <linux/kp30.h>
+#include <linux/portals_compat25.h>
#include <portals/p30.h>
#include <portals/lib-p30.h>
#include <portals/nal.h>
#include <portals/p30.h>
#include <portals/lib-p30.h>
#include <portals/nal.h>
atomic_t rap_refcount; /* # users */
int rap_persistence; /* "known" peer refs */
int rap_connecting; /* connection forming */
atomic_t rap_refcount; /* # users */
int rap_persistence; /* "known" peer refs */
int rap_connecting; /* connection forming */
- unsigned long rap_reconnect_time; /* CURRENT_TIME when reconnect OK */
+ unsigned long rap_reconnect_time; /* CURRENT_SECONDS when reconnect OK */
unsigned long rap_reconnect_interval; /* exponential backoff */
} kra_peer_t;
unsigned long rap_reconnect_interval; /* exponential backoff */
} kra_peer_t;
tx->tx_buftype == RANAL_BUF_PHYS_MAPPED);
}
tx->tx_buftype == RANAL_BUF_PHYS_MAPPED);
}
static inline __u64
kranal_page2phys (struct page *p)
{
static inline __u64
kranal_page2phys (struct page *p)
{
- __u64 page_number = p - mem_map;
-
- return (page_number << PAGE_SHIFT);
+ return page_to_phys(p);
-#else
-# error "no page->phys"
-#endif
extern void kranal_free_acceptsock (kra_acceptsock_t *ras);
extern int kranal_listener_procint (ctl_table *table,
extern void kranal_free_acceptsock (kra_acceptsock_t *ras);
extern int kranal_listener_procint (ctl_table *table,
extern kra_peer_t *kranal_find_peer_locked (ptl_nid_t nid);
extern void kranal_post_fma (kra_conn_t *conn, kra_tx_t *tx);
extern int kranal_del_peer (ptl_nid_t nid, int single_share);
extern kra_peer_t *kranal_find_peer_locked (ptl_nid_t nid);
extern void kranal_post_fma (kra_conn_t *conn, kra_tx_t *tx);
extern int kranal_del_peer (ptl_nid_t nid, int single_share);
-extern void kranal_device_callback (RAP_INT32 devid);
+extern void kranal_device_callback (RAP_INT32 devid, RAP_PVOID arg);
extern int kranal_thread_start (int(*fn)(void *arg), void *arg);
extern int kranal_connd (void *arg);
extern int kranal_reaper (void *arg);
extern int kranal_thread_start (int(*fn)(void *arg), void *arg);
extern int kranal_connd (void *arg);
extern int kranal_reaper (void *arg);
-kranal_device_callback(RAP_INT32 devid)
+kranal_device_callback(RAP_INT32 devid, RAP_PVOID arg)
{
kra_device_t *dev;
int i;
{
kra_device_t *dev;
int i;
/* Can't have gaps */
CERROR("Can't make payload contiguous in I/O VM:"
"page %d, offset %d, len %d \n",
/* Can't have gaps */
CERROR("Can't make payload contiguous in I/O VM:"
"page %d, offset %d, len %d \n",
+ (int)(phys - tx->tx_phys),
kiov->kiov_offset, kiov->kiov_len);
return -EINVAL;
}
if ((phys - tx->tx_phys) == PTL_MD_MAX_IOV) {
kiov->kiov_offset, kiov->kiov_len);
return -EINVAL;
}
if ((phys - tx->tx_phys) == PTL_MD_MAX_IOV) {
- CERROR ("payload too big (%d)\n", phys - tx->tx_phys);
+ CERROR ("payload too big (%d)\n", (int)(phys - tx->tx_phys));
if (!peer->rap_connecting) {
LASSERT (list_empty(&peer->rap_tx_queue));
if (!peer->rap_connecting) {
LASSERT (list_empty(&peer->rap_tx_queue));
if (now < peer->rap_reconnect_time) {
write_unlock_irqrestore(g_lock, flags);
kranal_tx_done(tx, -EHOSTUNREACH);
if (now < peer->rap_reconnect_time) {
write_unlock_irqrestore(g_lock, flags);
kranal_tx_done(tx, -EHOSTUNREACH);
unsigned int niov,
struct iovec *iov,
ptl_kiov_t *kiov,
unsigned int niov,
struct iovec *iov,
ptl_kiov_t *kiov,
- size_t offset,
- size_t nob)
{
kra_conn_t *conn;
kra_tx_t *tx;
{
kra_conn_t *conn;
kra_tx_t *tx;
/* NB 'private' is different depending on what we're sending.... */
/* NB 'private' is different depending on what we're sending.... */
- CDEBUG(D_NET, "sending "LPSZ" bytes in %d frags to nid:"LPX64
- " pid %d\n", nob, niov, nid , pid);
+ CDEBUG(D_NET, "sending %d bytes in %d frags to nid:"LPX64" pid %d\n",
+ nob, niov, nid, pid);
LASSERT (nob == 0 || niov > 0);
LASSERT (niov <= PTL_MD_MAX_IOV);
LASSERT (nob == 0 || niov > 0);
LASSERT (niov <= PTL_MD_MAX_IOV);
-kranal_recvmsg (lib_nal_t *nal, void *private, lib_msg_t *libmsg,
+kranal_do_recv (lib_nal_t *nal, void *private, lib_msg_t *libmsg,
unsigned int niov, struct iovec *iov, ptl_kiov_t *kiov,
unsigned int niov, struct iovec *iov, ptl_kiov_t *kiov,
- size_t offset, size_t mlen, size_t rlen)
+ int offset, int mlen, int rlen)
{
kra_conn_t *conn = private;
kra_msg_t *rxmsg = conn->rac_rxmsg;
{
kra_conn_t *conn = private;
kra_msg_t *rxmsg = conn->rac_rxmsg;
unsigned int niov, struct iovec *iov,
size_t offset, size_t mlen, size_t rlen)
{
unsigned int niov, struct iovec *iov,
size_t offset, size_t mlen, size_t rlen)
{
- return kranal_recvmsg(nal, private, msg, niov, iov, NULL,
+ return kranal_do_recv(nal, private, msg, niov, iov, NULL,
unsigned int niov, ptl_kiov_t *kiov,
size_t offset, size_t mlen, size_t rlen)
{
unsigned int niov, ptl_kiov_t *kiov,
size_t offset, size_t mlen, size_t rlen)
{
- return kranal_recvmsg(nal, private, msg, niov, NULL, kiov,
+ return kranal_do_recv(nal, private, msg, niov, NULL, kiov,
char *end;
unsigned long long ullval;
char *end;
unsigned long long ullval;
- if (!strcmp (str, "_all_")) {
- *nidp = PTL_NID_ANY;
- return (0);
- }
-
if (ptl_parse_ipaddr (&ipaddr, str) == 0) {
#if !CRAY_PORTALS
*nidp = (ptl_nid_t)ipaddr;
if (ptl_parse_ipaddr (&ipaddr, str) == 0) {
#if !CRAY_PORTALS
*nidp = (ptl_nid_t)ipaddr;
}
ullval = strtoull(str, &end, 0);
}
ullval = strtoull(str, &end, 0);
- if (*end == 0) {
- /* parsed whole string */
+ if (end != str && *end == 0) {
+ /* parsed whole non-empty string */
*nidp = (ptl_nid_t)ullval;
return (0);
}
*nidp = (ptl_nid_t)ullval;
return (0);
}
+int
+ptl_parse_anynid (ptl_nid_t *nidp, char *str)
+{
+ if (!strcmp (str, "_all_")) {
+ *nidp = PTL_NID_ANY;
+ return 0;
+ }
+
+ return ptl_parse_nid(nidp, str);
+}
+
__u64 ptl_nid2u64(ptl_nid_t nid)
{
switch (sizeof (nid)) {
__u64 ptl_nid2u64(ptl_nid_t nid)
{
switch (sizeof (nid)) {
- ptl_parse_nid (&nid, argv[1]) != 0) {
+ ptl_parse_anynid (&nid, argv[1]) != 0) {
fprintf (stderr, "Can't parse nid: %s\n", argv[1]);
return -1;
}
fprintf (stderr, "Can't parse nid: %s\n", argv[1]);
return -1;
}
return 0;
if (argc >= 2 &&
return 0;
if (argc >= 2 &&
- ptl_parse_nid (&nid, argv[1]) != 0) {
+ ptl_parse_anynid (&nid, argv[1]) != 0) {
fprintf (stderr, "Can't parse nid %s\n", argv[1]);
return -1;
}
fprintf (stderr, "Can't parse nid %s\n", argv[1]);
return -1;
}
return -1;
if (argc > 1 &&
return -1;
if (argc > 1 &&
- ptl_parse_nid (&nid, argv[1]) != 0) {
+ ptl_parse_anynid (&nid, argv[1]) != 0) {
fprintf(stderr, "Can't parse nid: %s\n", argv[1]);
return -1;
}
fprintf(stderr, "Can't parse nid: %s\n", argv[1]);
return -1;
}
if (!strcmp (argv[1], "_all_"))
nid = PTL_NID_ANY;
if (!strcmp (argv[1], "_all_"))
nid = PTL_NID_ANY;
- else if (ptl_parse_nid (&nid, argv[1]) != 0)
+ else if (ptl_parse_anynid (&nid, argv[1]) != 0)
{
fprintf (stderr, "Can't parse nid \"%s\"\n", argv[1]);
return (-1);
{
fprintf (stderr, "Can't parse nid \"%s\"\n", argv[1]);
return (-1);