Whamcloud - gitweb
LU-13783 libcfs: support __vmalloc with only 2 args.
[fs/lustre-release.git] / lnet / klnds / gnilnd / gnilnd.h
index 0389887..3c7f742 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef _GNILND_GNILND_H_
 #define _GNILND_GNILND_H_
 
+#define DEBUG_SUBSYSTEM S_LND
+
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
@@ -59,8 +61,6 @@
 #include <linux/in.h>
 #include <linux/nmi.h>
 
-#define DEBUG_SUBSYSTEM S_LND
-
 #include <lnet/lib-lnet.h>
 
 #include <gni_pub.h>
@@ -193,8 +193,6 @@ static inline time_t cfs_duration_sec(long duration_jiffies)
 #define GNILND_BUF_IMMEDIATE_KIOV 2              /* immediate data */
 #define GNILND_BUF_PHYS_UNMAPPED  3              /* physical: not mapped yet */
 #define GNILND_BUF_PHYS_MAPPED    4              /* physical: mapped already */
-#define GNILND_BUF_VIRT_UNMAPPED  5              /* virtual: not mapped yet */
-#define GNILND_BUF_VIRT_MAPPED    6              /* virtual: mapped already */
 
 #define GNILND_TX_WAITING_REPLY      (1<<1)     /* expecting to receive reply */
 #define GNILND_TX_WAITING_COMPLETION (1<<2)     /* waiting for smsg_send to complete */
@@ -348,7 +346,7 @@ typedef enum kgn_dgram_type {
   v2:
    * - added checksum to FMA
    * moved seq before paylod
-   * WIRE_ATTR added for alignment
+   * __packed added for alignment
   v3:
    * added gnm_payload_len for FMA payload size
   v4:
@@ -375,12 +373,12 @@ typedef struct kgn_gniparams {
        __u32            gnpr_host_id;          /* ph. host ID of the NIC */
        __u32            gnpr_cqid;             /* cqid I want peer to use when sending events to me */
        gni_smsg_attr_t  gnpr_smsg_attr;        /* my short msg. attributes */
-} WIRE_ATTR kgn_gniparams_t;
+} __packed kgn_gniparams_t;
 
 typedef struct kgn_nak_data {
        __s32            gnnd_errno;            /* errno reason for NAK */
 
-} WIRE_ATTR kgn_nak_data_t;
+} __packed kgn_nak_data_t;
 
 /* the first bits of the connreq struct CANNOT CHANGE FORM EVER
  * without breaking the ability for us to properly NAK someone */
@@ -402,42 +400,42 @@ typedef struct kgn_connreq {                    /* connection request/response *
                kgn_gniparams_t   gncr_gnparams;        /* sender's endpoint info */
                kgn_nak_data_t    gncr_nakdata;         /* data (rc, etc) for NAK */
        };
-} WIRE_ATTR kgn_connreq_t;
+} __packed kgn_connreq_t;
 
 typedef struct {
        gni_mem_handle_t  gnrd_key;
        __u64             gnrd_addr;
        __u32             gnrd_nob;
-} WIRE_ATTR kgn_rdma_desc_t;
+} __packed kgn_rdma_desc_t;
 
 typedef struct {
        struct lnet_hdr   gnim_hdr;             /* LNet header */
        /* LNet payload is in FMA "Message Data" */
-} WIRE_ATTR kgn_immediate_msg_t;
+} __packed kgn_immediate_msg_t;
 
 typedef struct {
        struct lnet_hdr   gnprm_hdr;            /* LNet header */
        __u64             gnprm_cookie;         /* opaque completion cookie */
-} WIRE_ATTR kgn_putreq_msg_t;
+} __packed kgn_putreq_msg_t;
 
 typedef struct {
        __u64             gnpam_src_cookie;     /* reflected completion cookie */
        __u64             gnpam_dst_cookie;     /* opaque completion cookie */
        __u16             gnpam_payload_cksum;  /* checksum for get msg */
        kgn_rdma_desc_t   gnpam_desc;           /* sender's sink buffer */
-} WIRE_ATTR kgn_putack_msg_t;
+} __packed kgn_putack_msg_t;
 
 typedef struct {
        struct lnet_hdr   gngm_hdr;             /* LNet header */
        __u64             gngm_cookie;          /* opaque completion cookie */
        __u16             gngm_payload_cksum;   /* checksum for put msg */
        kgn_rdma_desc_t   gngm_desc;            /* sender's sink buffer */
-} WIRE_ATTR kgn_get_msg_t;
+} __packed kgn_get_msg_t;
 
 typedef struct {
        int               gncm_retval;          /* error on NAK, size on REQ */
        __u64             gncm_cookie;          /* reflected completion cookie */
-} WIRE_ATTR kgn_completion_msg_t;
+} __packed kgn_completion_msg_t;
 
 typedef struct {                                /* NB must fit in FMA "Prefix" */
        __u32             gnm_magic;            /* I'm an gni message */
@@ -456,7 +454,7 @@ typedef struct {                                /* NB must fit in FMA "Prefix" *
                kgn_get_msg_t         get;
                kgn_completion_msg_t  completion;
        } gnm_u;
-} WIRE_ATTR kgn_msg_t;
+} __packed kgn_msg_t;
 
 /************************************************************************
  * runtime tunable data
@@ -580,8 +578,6 @@ typedef struct kgn_device {
        atomic64_t              gnd_nbytes_map;   /* bytes of total GART maps - fma, tx, etc */
        __u32                   gnd_map_nphys;    /* # TX phys mappings */
        __u32                   gnd_map_physnop;  /* # TX phys pages mapped */
-       __u32                   gnd_map_nvirt;    /* # TX virt mappings */
-       __u64                   gnd_map_virtnob;  /* # TX virt bytes mapped */
        spinlock_t              gnd_map_lock;     /* serialize gnd_map_XXX */
        unsigned long           gnd_next_map;     /* next mapping attempt in jiffies */
        int                     gnd_map_attempt;  /* last map attempt # */
@@ -812,7 +808,7 @@ typedef struct kgn_rx {
        kgn_msg_t               *grx_msg;       /* message */
        struct lnet_msg              *grx_lntmsg;    /* lnet msg for this rx (eager only) */
        int                      grx_eager;     /* if eager, we copied msg to somewhere */
-       struct timespec          grx_received;  /* time this msg received */
+       struct timespec64        grx_received;  /* time this msg received */
 } kgn_rx_t;
 
 typedef struct kgn_data {
@@ -1001,12 +997,10 @@ static inline void *kgnilnd_vzalloc(int size)
 {
        void *ret;
        if (*kgnilnd_tunables.kgn_vzalloc_noretry)
-               ret = __vmalloc(size, __GFP_HIGHMEM | GFP_NOIO | __GFP_NORETRY |
-                                     __GFP_ZERO,
-                               PAGE_KERNEL);
+               ret = __ll_vmalloc(size, __GFP_HIGHMEM | GFP_NOIO | __GFP_ZERO |
+                                  __GFP_NORETRY);
        else
-               ret = __vmalloc(size, __GFP_HIGHMEM | GFP_NOIO | __GFP_ZERO,
-                               PAGE_KERNEL);
+               ret = __ll_vmalloc(size, __GFP_HIGHMEM | GFP_NOIO | __GFP_ZERO);
 
        LIBCFS_ALLOC_POST(ret, size);
        return ret;
@@ -1159,18 +1153,20 @@ do {                                                                    \
 #error "this code uses actions inside LASSERT for ref counting"
 #endif
 
-#define kgnilnd_admin_addref(atomic)                                     \
-do {                                                                            \
-       int     val = atomic_inc_return(&atomic);                               \
-       LASSERTF(val > 0,  #atomic " refcount %d\n", val);                       \
-       CDEBUG(D_NETTRACE, #atomic " refcount %d\n", val);                       \
+#define kgnilnd_admin_addref(atomic)                                   \
+do {                                                                   \
+       int val = atomic_inc_return(&atomic);                           \
+       LASSERTF(val > 0,  #atomic " refcount %d\n", val);              \
+       CDEBUG(D_NETTRACE, #atomic " refcount %d\n", val);              \
 } while (0)
 
-#define kgnilnd_admin_decref(atomic)                                     \
-do {                                                                            \
-       int     val = atomic_dec_return(&atomic);                               \
-       LASSERTF(val >=0,  #atomic " refcount %d\n", val);                        \
-       CDEBUG(D_NETTRACE, #atomic " refcount %d\n", val);                       \
+#define kgnilnd_admin_decref(atomic)                                   \
+do {                                                                   \
+       int val = atomic_dec_return(&atomic);                           \
+       LASSERTF(val >= 0,  #atomic " refcount %d\n", val);             \
+       CDEBUG(D_NETTRACE, #atomic " refcount %d\n", val);              \
+       if (!val)                                                       \
+               wake_up_var(&kgnilnd_data);                             \
 }while (0)
 
 #define kgnilnd_net_addref(net)                                                 \
@@ -1572,8 +1568,7 @@ kgnilnd_tx_del_state_locked(kgn_tx_t *tx, kgn_peer_t *peer,
 static inline int
 kgnilnd_tx_mapped(kgn_tx_t *tx)
 {
-       return (tx->tx_buftype == GNILND_BUF_VIRT_MAPPED ||
-               tx->tx_buftype == GNILND_BUF_PHYS_MAPPED);
+       return tx->tx_buftype == GNILND_BUF_PHYS_MAPPED;
 }
 
 static inline struct list_head *
@@ -1787,10 +1782,11 @@ int kgnilnd_eager_recv(struct lnet_ni *ni, void *private,
                        struct lnet_msg *lntmsg, void **new_private);
 int kgnilnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
                int delayed, unsigned int niov,
-               struct kvec *iov, lnet_kiov_t *kiov,
+               struct bio_vec *kiov,
                unsigned int offset, unsigned int mlen, unsigned int rlen);
 
-__u16 kgnilnd_cksum_kiov(unsigned int nkiov, lnet_kiov_t *kiov, unsigned int offset, unsigned int nob, int dump_blob);
+__u16 kgnilnd_cksum_kiov(unsigned int nkiov, struct bio_vec *kiov,
+                        unsigned int offset, unsigned int nob, int dump_blob);
 
 /* purgatory functions */
 void kgnilnd_add_purgatory_locked(kgn_conn_t *conn, kgn_peer_t *peer);
@@ -1823,7 +1819,8 @@ void kgnilnd_consume_rx(kgn_rx_t *rx);
 
 void kgnilnd_schedule_device(kgn_device_t *dev);
 void kgnilnd_device_callback(__u32 devid, __u64 arg);
-void kgnilnd_schedule_device_timer(unsigned long arg);
+void kgnilnd_schedule_device_timer(cfs_timer_cb_arg_t data);
+void kgnilnd_schedule_device_timer_rd(cfs_timer_cb_arg_t data);
 
 int kgnilnd_reaper(void *arg);
 int kgnilnd_scheduler(void *arg);