#ifndef EXPORT_SYMTAB
# define EXPORT_SYMTAB
#endif
-
+#ifndef AUTOCONF_INCLUDED
#include <linux/config.h>
+#endif
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/mm.h>
*/
//#define PJK_DEBUGGING
-#if CONFIG_SMP
+#ifdef CONFIG_SMP
# define PTLLND_N_SCHED num_online_cpus() /* # schedulers */
#else
# define PTLLND_N_SCHED 1 /* # schedulers */
int *kptl_max_msg_size; /* max immd message size*/
int *kptl_peer_hash_table_size; /* # slots in peer hash table */
int *kptl_reschedule_loops; /* scheduler yield loops */
+ int *kptl_ack_puts; /* make portals ack PUTs */
#ifdef CRAY_XT3
int *kptl_ptltrace_on_timeout; /* dump pltrace on timeout? */
char **kptl_ptltrace_basename; /* ptltrace dump file basename */
int *kptl_simulation_bitmap;/* simulation bitmap */
#endif
-#if CONFIG_SYSCTL && !CFS_SYSFS_MODULE_PARM
- struct ctl_table_header *kptl_sysctl; /* sysctl interface */
+#if defined(CONFIG_SYSCTL) && !CFS_SYSFS_MODULE_PARM
+ cfs_sysctl_table_header_t *kptl_sysctl; /* sysctl interface */
#endif
} kptl_tunables_t;
kptl_rx_buffer_t *rx_rxb; /* the rx buffer pointer */
kptl_msg_t *rx_msg; /* received message */
int rx_nob; /* received message size */
+ unsigned long rx_treceived; /* time received */
ptl_process_id_t rx_initiator; /* sender's address */
#ifdef CRAY_XT3
ptl_uid_t rx_uid; /* sender's uid */
enum kptl_tx_type tx_type; /* small msg/{put,get}{req,resp} */
int tx_active:1; /* queued on the peer */
int tx_idle:1; /* on the free list */
+ int tx_acked:1; /* portals ACK wanted (for debug only) */
kptl_eventarg_t tx_msg_eventarg; /* event->md.user_ptr */
kptl_eventarg_t tx_rdma_eventarg; /* event->md.user_ptr */
int tx_status; /* the status of this tx descriptor */
kptl_msg_t *tx_msg; /* the message data */
kptl_peer_t *tx_peer; /* the peer this is waiting on */
unsigned long tx_deadline; /* deadline */
- ptl_md_t tx_rdma_md; /* rdma buffer */
- kptl_fragvec_t *tx_rdma_frags; /* buffer fragments */
+ unsigned long tx_tposted; /* time posted */
+ ptl_md_t tx_rdma_md; /* rdma descriptor */
+ kptl_fragvec_t *tx_frags; /* buffer fragments */
} kptl_tx_t;
enum kptllnd_peer_state
lnet_process_id_t peer_id; /* Peer's LNET id */
ptl_process_id_t peer_ptlid; /* Peer's portals id */
__u64 peer_incarnation; /* peer's incarnation */
+ __u64 peer_myincarnation; /* my incarnation at HELLO */
int peer_sent_hello; /* have I sent HELLO? */
int peer_credits; /* number of send credits */
- int peer_outstanding_credits;/* number of peer credits */
+ int peer_outstanding_credits;/* number of peer credits to return */
+ int peer_sent_credits; /* #msg buffers posted for peer */
+ int peer_max_msg_size; /* peer's rx buffer size */
int peer_error; /* errno on closing this peer */
+ int peer_retry_noop; /* need to retry returning credits */
+ int peer_check_stamp; /* watchdog check stamp */
cfs_time_t peer_last_alive; /* when (in jiffies) I was last alive */
__u64 peer_next_matchbits; /* Next value to register RDMA from peer */
__u64 peer_last_matchbits_seen; /* last matchbits used to RDMA to peer */
const char *kptllnd_evtype2str(int evtype);
const char *kptllnd_msgtype2str(int msgtype);
+const char *kptllnd_errtype2str(int errtype);
static inline void *
kptllnd_eventarg2obj (kptl_eventarg_t *eva)
void kptllnd_handle_closing_peers(void);
int kptllnd_peer_connect(kptl_tx_t *tx, lnet_nid_t nid);
void kptllnd_peer_check_sends(kptl_peer_t *peer);
-void kptllnd_peer_check_bucket(int idx);
-void kptllnd_tx_launch(kptl_tx_t *tx, lnet_process_id_t target);
+void kptllnd_peer_check_bucket(int idx, int stamp);
+void kptllnd_tx_launch(kptl_peer_t *peer, kptl_tx_t *tx, int nfrag);
+int kptllnd_find_target(kptl_peer_t **peerp, lnet_process_id_t target);
kptl_peer_t *kptllnd_peer_handle_hello(ptl_process_id_t initiator,
kptl_msg_t *msg);
kptl_peer_t *kptllnd_id2peer_locked(lnet_process_id_t id);