#include <linux/security.h>
#include <linux/completion.h>
#include <linux/list.h>
#include <rdma/ib_verbs.h>
#include <rdma/ib_cache.h>
#include "core_priv.h"
#include "mad_priv.h"
static LIST_HEAD(mad_agent_list);
static DEFINE_SPINLOCK(mad_agent_list_lock);
static struct pkey_index_qp_list *get_pkey_idx_qp_list(struct ib_port_pkey *pp)
{ … }
static int get_pkey_and_subnet_prefix(struct ib_port_pkey *pp,
u16 *pkey,
u64 *subnet_prefix)
{ … }
static int enforce_qp_pkey_security(u16 pkey,
u64 subnet_prefix,
struct ib_qp_security *qp_sec)
{ … }
static int check_qp_port_pkey_settings(struct ib_ports_pkeys *pps,
struct ib_qp_security *sec)
{ … }
static void qp_to_error(struct ib_qp_security *sec)
{ … }
static inline void check_pkey_qps(struct pkey_index_qp_list *pkey,
struct ib_device *device,
u32 port_num,
u64 subnet_prefix)
{ … }
static int port_pkey_list_insert(struct ib_port_pkey *pp)
{ … }
static void port_pkey_list_remove(struct ib_port_pkey *pp)
{ … }
static void destroy_qp_security(struct ib_qp_security *sec)
{ … }
static struct ib_ports_pkeys *get_new_pps(const struct ib_qp *qp,
const struct ib_qp_attr *qp_attr,
int qp_attr_mask)
{ … }
int ib_open_shared_qp_security(struct ib_qp *qp, struct ib_device *dev)
{ … }
void ib_close_shared_qp_security(struct ib_qp_security *sec)
{ … }
int ib_create_qp_security(struct ib_qp *qp, struct ib_device *dev)
{ … }
EXPORT_SYMBOL(…);
void ib_destroy_qp_security_begin(struct ib_qp_security *sec)
{ … }
void ib_destroy_qp_security_abort(struct ib_qp_security *sec)
{ … }
void ib_destroy_qp_security_end(struct ib_qp_security *sec)
{ … }
void ib_security_cache_change(struct ib_device *device,
u32 port_num,
u64 subnet_prefix)
{ … }
void ib_security_release_port_pkey_list(struct ib_device *device)
{ … }
int ib_security_modify_qp(struct ib_qp *qp,
struct ib_qp_attr *qp_attr,
int qp_attr_mask,
struct ib_udata *udata)
{ … }
static int ib_security_pkey_access(struct ib_device *dev,
u32 port_num,
u16 pkey_index,
void *sec)
{ … }
void ib_mad_agent_security_change(void)
{ … }
int ib_mad_agent_security_setup(struct ib_mad_agent *agent,
enum ib_qp_type qp_type)
{ … }
void ib_mad_agent_security_cleanup(struct ib_mad_agent *agent)
{ … }
int ib_mad_enforce_security(struct ib_mad_agent_private *map, u16 pkey_index)
{ … }