1#if !defined(IB_PEER_MEM_H) 2#define IB_PEER_MEM_H 3 4#include <rdma/peer_mem.h> 5 6 7struct invalidation_ctx; 8struct ib_ucontext; 9 10struct ib_peer_memory_statistics { 11 unsigned long num_alloc_mrs; 12 unsigned long num_dealloc_mrs; 13 unsigned long num_reg_pages; 14 unsigned long num_dereg_pages; 15 unsigned long num_free_callbacks; 16}; 17 18struct ib_peer_memory_client { 19 const struct peer_memory_client *peer_mem; 20 21 struct list_head core_peer_list; 22 struct list_head core_ticket_list; 23 unsigned long last_ticket; 24#ifdef __FreeBSD__ 25 int holdcount; 26 int needwakeup; 27 struct cv peer_cv; 28#else 29 struct srcu_struct peer_srcu; 30#endif 31 struct mutex lock; 32 struct kobject *kobj; 33 struct attribute_group peer_mem_attr_group; 34 struct ib_peer_memory_statistics stats; 35}; 36 37struct core_ticket { 38 unsigned long key; 39 void *context; 40 struct list_head ticket_list; 41}; 42 43struct ib_peer_memory_client *ib_get_peer_client(struct ib_ucontext *context, unsigned long addr, 44 size_t size, void **peer_client_context, 45 int *srcu_key); 46 47void ib_put_peer_client(struct ib_peer_memory_client *ib_peer_client, 48 void *peer_client_context, 49 int srcu_key); 50 51unsigned long ib_peer_insert_context(struct ib_peer_memory_client *ib_peer_client, 52 void *context); 53int ib_peer_remove_context(struct ib_peer_memory_client *ib_peer_client, 54 unsigned long key); 55struct core_ticket *ib_peer_search_context(struct ib_peer_memory_client *ib_peer_client, 56 unsigned long key); 57#endif 58 59 60