#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/rculist.h>
#include <linux/llist.h>
#include "rds_single_path.h"
#include "ib_mr.h"
#include "rds.h"
struct workqueue_struct *rds_ib_mr_wq;
struct rds_ib_dereg_odp_mr { … };
static void rds_ib_odp_mr_worker(struct work_struct *work);
static struct rds_ib_device *rds_ib_get_device(__be32 ipaddr)
{ … }
static int rds_ib_add_ipaddr(struct rds_ib_device *rds_ibdev, __be32 ipaddr)
{ … }
static void rds_ib_remove_ipaddr(struct rds_ib_device *rds_ibdev, __be32 ipaddr)
{ … }
int rds_ib_update_ipaddr(struct rds_ib_device *rds_ibdev,
struct in6_addr *ipaddr)
{ … }
void rds_ib_add_conn(struct rds_ib_device *rds_ibdev, struct rds_connection *conn)
{ … }
void rds_ib_remove_conn(struct rds_ib_device *rds_ibdev, struct rds_connection *conn)
{ … }
void rds_ib_destroy_nodev_conns(void)
{ … }
void rds_ib_get_mr_info(struct rds_ib_device *rds_ibdev, struct rds_info_rdma_connection *iinfo)
{ … }
#if IS_ENABLED(CONFIG_IPV6)
void rds6_ib_get_mr_info(struct rds_ib_device *rds_ibdev,
struct rds6_info_rdma_connection *iinfo6)
{ … }
#endif
struct rds_ib_mr *rds_ib_reuse_mr(struct rds_ib_mr_pool *pool)
{ … }
void rds_ib_sync_mr(void *trans_private, int direction)
{ … }
void __rds_ib_teardown_mr(struct rds_ib_mr *ibmr)
{ … }
void rds_ib_teardown_mr(struct rds_ib_mr *ibmr)
{ … }
static inline unsigned int rds_ib_flush_goal(struct rds_ib_mr_pool *pool, int free_all)
{ … }
static unsigned int llist_append_to_list(struct llist_head *llist,
struct list_head *list)
{ … }
static void list_to_llist_nodes(struct list_head *list,
struct llist_node **nodes_head,
struct llist_node **nodes_tail)
{ … }
int rds_ib_flush_mr_pool(struct rds_ib_mr_pool *pool,
int free_all, struct rds_ib_mr **ibmr_ret)
{ … }
struct rds_ib_mr *rds_ib_try_reuse_ibmr(struct rds_ib_mr_pool *pool)
{ … }
static void rds_ib_mr_pool_flush_worker(struct work_struct *work)
{ … }
void rds_ib_free_mr(void *trans_private, int invalidate)
{ … }
void rds_ib_flush_mrs(void)
{ … }
u32 rds_ib_get_lkey(void *trans_private)
{ … }
void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents,
struct rds_sock *rs, u32 *key_ret,
struct rds_connection *conn,
u64 start, u64 length, int need_odp)
{ … }
void rds_ib_destroy_mr_pool(struct rds_ib_mr_pool *pool)
{ … }
struct rds_ib_mr_pool *rds_ib_create_mr_pool(struct rds_ib_device *rds_ibdev,
int pool_type)
{ … }
int rds_ib_mr_init(void)
{ … }
void rds_ib_mr_exit(void)
{ … }
static void rds_ib_odp_mr_worker(struct work_struct *work)
{ … }