Whamcloud - gitweb
LU-10800 lnet: Revert "LU-10270 lnet: remove an early rx code"
[fs/lustre-release.git] / lnet / klnds / gnilnd / gnilnd_aries.h
index 890c709..d9698b6 100644 (file)
@@ -1,7 +1,8 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
  * Copyright (C) 2009-2012 Cray, Inc.
+ *
+ * Copyright (c) 2014, Intel Corporation.
+ *
  *   Author: Nic Henke <nic@cray.com>, James Shimek <jshimek@cray.com>
  *
  *   This file is part of Lustre, http://www.lustre.org.
 #ifndef _GNILND_ARIES_H
 #define _GNILND_ARIES_H
 
-/* for libcfs_ipif_query */
-#include <libcfs/libcfs.h>
+/* for lnet_ipif_query */
+#include <lnet/lib-lnet.h>
 
 #ifndef _GNILND_HSS_OPS_H
 # error "must include gnilnd_hss_ops.h first"
 #endif
 
 /* Set HW related values */
+#ifdef CONFIG_CRAY_XT
 #include <aries/aries_timeouts_gpl.h>
+#else
+/* from aries_timeouts_gpl.h when building for generic kernel */
+#define TIMEOUT_SECS(x)         ((uint64_t)(((x) / 1000.0) + 0.5))
+#ifndef TO_GNILND_timeout
+#define TO_GNILND_timeout               (60000.000000)
+#endif /* TO_GNILND_timeout */
+#endif /* CONFIG_CRAY_XT */
 
 #define GNILND_BASE_TIMEOUT        TIMEOUT_SECS(TO_GNILND_timeout)
 #define GNILND_CHECKSUM_DEFAULT    0            /* all off for Aries */
 #else
 #define GNILND_REVERSE_RDMA        GNILND_REVERSE_GET
 #define GNILND_RDMA_DLVR_OPTION    GNI_DLVMODE_PERFORMANCE
+#define GNILND_SCHED_THREADS       7             /* scheduler threads */
 #endif
 
-/* plug in our functions for use on the simulator */
-#if !defined(GNILND_USE_RCA)
-
-extern kgn_data_t kgnilnd_data;
-
-#define kgnilnd_hw_hb()              do {} while(0)
+/* Thread-safe kgni implemented in minor ver 45, code rev 0xb9 */
+#define GNILND_KGNI_TS_MINOR_VER 0x45
+#define GNILND_TS_ENABLE         1
 
-/* Aries Sim doesn't have hardcoded tables, so we'll hijack the nic_pe
- * and decode our address and nic addr from that - the rest are just offsets */
-
-static inline int
-kgnilnd_nid_to_nicaddrs(__u32 nid, int numnic, __u32 *nicaddr)
+/* register some memory to allocate a shared mdd */
+static inline gni_return_t
+kgnilnd_register_smdd_buf(kgn_device_t *dev)
 {
-       if (numnic > 1) {
-               CERROR("manual nid2nic translation doesn't support"
-                      "multiple nic addrs (you asked for %d)\n",
-                       numnic);
-               return -EINVAL;
-       }
-       if (nid < kgnilnd_data.kgn_nid_trans_private) {
-               CERROR("Request for invalid nid translation %u, minimum %Lu\n",
-                      nid, kgnilnd_data.kgn_nid_trans_private);
-               return -ESRCH;
-       }
+       __u32        flags = GNI_MEM_READWRITE;
 
-       *nicaddr = nid - kgnilnd_data.kgn_nid_trans_private;
-
-       CDEBUG(D_NETTRACE, "Sim nid %d -> nic 0x%x\n", nid, *nicaddr);
+       if (*kgnilnd_tunables.kgn_bte_relaxed_ordering) {
+               flags |= GNI_MEM_RELAXED_PI_ORDERING;
+       }
 
-       return 1;
-}
+       LIBCFS_ALLOC(dev->gnd_smdd_hold_buf, PAGE_SIZE);
+       if (!dev->gnd_smdd_hold_buf) {
+               CERROR("Can't allocate smdd hold buffer\n");
+               return GNI_RC_ERROR_RESOURCE;
+       }
 
-static inline int
-kgnilnd_nicaddr_to_nid(__u32 nicaddr, __u32 *nid)
-{
-       *nid = kgnilnd_data.kgn_nid_trans_private + nicaddr;
-       return 1;
+       return kgnilnd_mem_register(dev->gnd_handle,
+                                   (__u64)dev->gnd_smdd_hold_buf,
+                                   PAGE_SIZE, NULL, flags,
+                                   &dev->gnd_smdd_hold_hndl);
 }
 
-/* XXX Nic: This does not support multiple device!!!! */
-static inline int
-kgnilnd_setup_nic_translation(__u32 device_id)
+static inline gni_return_t
+kgnilnd_deregister_smdd_buf(kgn_device_t *dev)
 {
-       char              *if_name = "ipogif0";
-       __u32              ipaddr, netmask, my_nid;
-       int                up, rc;
-
-       LCONSOLE_INFO("using Aries SIM IP info for RCA translation\n");
-
-       rc = libcfs_ipif_query(if_name, &up, &ipaddr, &netmask);
-       if (rc != 0) {
-               CERROR ("can't get IP interface for %s: %d\n", if_name, rc);
-               return rc;
-       }
-       if (!up) {
-               CERROR ("IP interface %s is down\n", if_name);
-               return -ENODEV;
-       }
-
-       my_nid = ((ipaddr >> 8) & 0xFF) + (ipaddr & 0xFF);
+       gni_return_t rc = kgnilnd_mem_deregister(dev->gnd_handle,
+                                                &dev->gnd_smdd_hold_hndl, 0);
+       LIBCFS_FREE(dev->gnd_smdd_hold_buf, PAGE_SIZE);
 
-       kgnilnd_data.kgn_nid_trans_private = my_nid - device_id;
-
-       return 0;
+       return rc;
 }
 
-#endif /* GNILND_USE_RCA */
-
 #endif /* _GNILND_ARIES_H */