net: implements ip_route_input_noref()
[linux-2.6.git] / net / rds / ib.h
index 455ae73..64df4e7 100644 (file)
@@ -15,6 +15,8 @@
 #define RDS_IB_DEFAULT_RECV_WR         1024
 #define RDS_IB_DEFAULT_SEND_WR         256
 
+#define RDS_IB_DEFAULT_RETRY_COUNT     2
+
 #define RDS_IB_SUPPORTED_PROTOCOLS     0x00000003      /* minor versions supported */
 
 extern struct list_head rds_ib_devices;
@@ -96,6 +98,7 @@ struct rds_ib_connection {
        struct rds_ib_send_work *i_sends;
 
        /* rx */
+       struct tasklet_struct   i_recv_tasklet;
        struct mutex            i_recv_mutex;
        struct rds_ib_work_ring i_recv_ring;
        struct rds_ib_incoming  *i_ibinc;
@@ -157,9 +160,6 @@ struct rds_ib_device {
        struct ib_pd            *pd;
        struct ib_mr            *mr;
        struct rds_ib_mr_pool   *mr_pool;
-       int                     fmr_page_shift;
-       int                     fmr_page_size;
-       u64                     fmr_page_mask;
        unsigned int            fmr_max_remaps;
        unsigned int            max_fmrs;
        int                     max_sge;
@@ -247,6 +247,7 @@ extern struct ib_client rds_ib_client;
 
 extern unsigned int fmr_pool_size;
 extern unsigned int fmr_message_size;
+extern unsigned int rds_ib_retry_count;
 
 extern spinlock_t ib_nodev_conns_lock;
 extern struct list_head ib_nodev_conns;
@@ -303,6 +304,7 @@ void rds_ib_inc_free(struct rds_incoming *inc);
 int rds_ib_inc_copy_to_user(struct rds_incoming *inc, struct iovec *iov,
                             size_t size);
 void rds_ib_recv_cq_comp_handler(struct ib_cq *cq, void *context);
+void rds_ib_recv_tasklet_fn(unsigned long data);
 void rds_ib_recv_init_ring(struct rds_ib_connection *ic);
 void rds_ib_recv_clear_ring(struct rds_ib_connection *ic);
 void rds_ib_recv_init_ack(struct rds_ib_connection *ic);
@@ -355,17 +357,25 @@ extern ctl_table rds_ib_sysctl_table[];
 /*
  * Helper functions for getting/setting the header and data SGEs in
  * RDS packets (not RDMA)
+ *
+ * From version 3.1 onwards, header is in front of data in the sge.
  */
 static inline struct ib_sge *
 rds_ib_header_sge(struct rds_ib_connection *ic, struct ib_sge *sge)
 {
-       return &sge[0];
+       if (ic->conn->c_version > RDS_PROTOCOL_3_0)
+               return &sge[0];
+       else
+               return &sge[1];
 }
 
 static inline struct ib_sge *
 rds_ib_data_sge(struct rds_ib_connection *ic, struct ib_sge *sge)
 {
-       return &sge[1];
+       if (ic->conn->c_version > RDS_PROTOCOL_3_0)
+               return &sge[1];
+       else
+               return &sge[0];
 }
 
 #endif