RDMA/mlx5: Initialize SRQ tables on mlx5_ib
Transfer initialization and cleanup from mlx5_priv struct of mlx5_core_dev to be part of mlx5_ib_dev. This completes removal of SRQ from mlx5_core. Reviewed-by: Mark Bloch <markb@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
This commit is contained in:
parent
b4990804e1
commit
f3da6577da
|
@ -4,6 +4,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ib_rep.h"
|
#include "ib_rep.h"
|
||||||
|
#include "srq.h"
|
||||||
|
|
||||||
static const struct mlx5_ib_profile rep_profile = {
|
static const struct mlx5_ib_profile rep_profile = {
|
||||||
STAGE_CREATE(MLX5_IB_STAGE_INIT,
|
STAGE_CREATE(MLX5_IB_STAGE_INIT,
|
||||||
|
@ -21,6 +22,9 @@ static const struct mlx5_ib_profile rep_profile = {
|
||||||
STAGE_CREATE(MLX5_IB_STAGE_ROCE,
|
STAGE_CREATE(MLX5_IB_STAGE_ROCE,
|
||||||
mlx5_ib_stage_rep_roce_init,
|
mlx5_ib_stage_rep_roce_init,
|
||||||
mlx5_ib_stage_rep_roce_cleanup),
|
mlx5_ib_stage_rep_roce_cleanup),
|
||||||
|
STAGE_CREATE(MLX5_IB_STAGE_SRQ,
|
||||||
|
mlx5_init_srq_table,
|
||||||
|
mlx5_cleanup_srq_table),
|
||||||
STAGE_CREATE(MLX5_IB_STAGE_DEVICE_RESOURCES,
|
STAGE_CREATE(MLX5_IB_STAGE_DEVICE_RESOURCES,
|
||||||
mlx5_ib_stage_dev_res_init,
|
mlx5_ib_stage_dev_res_init,
|
||||||
mlx5_ib_stage_dev_res_cleanup),
|
mlx5_ib_stage_dev_res_cleanup),
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
#include "mlx5_ib.h"
|
#include "mlx5_ib.h"
|
||||||
#include "ib_rep.h"
|
#include "ib_rep.h"
|
||||||
#include "cmd.h"
|
#include "cmd.h"
|
||||||
|
#include "srq.h"
|
||||||
#include <linux/mlx5/fs_helpers.h>
|
#include <linux/mlx5/fs_helpers.h>
|
||||||
#include <linux/mlx5/accel.h>
|
#include <linux/mlx5/accel.h>
|
||||||
#include <rdma/uverbs_std_types.h>
|
#include <rdma/uverbs_std_types.h>
|
||||||
|
@ -6308,6 +6309,9 @@ static const struct mlx5_ib_profile pf_profile = {
|
||||||
STAGE_CREATE(MLX5_IB_STAGE_ROCE,
|
STAGE_CREATE(MLX5_IB_STAGE_ROCE,
|
||||||
mlx5_ib_stage_roce_init,
|
mlx5_ib_stage_roce_init,
|
||||||
mlx5_ib_stage_roce_cleanup),
|
mlx5_ib_stage_roce_cleanup),
|
||||||
|
STAGE_CREATE(MLX5_IB_STAGE_SRQ,
|
||||||
|
mlx5_init_srq_table,
|
||||||
|
mlx5_cleanup_srq_table),
|
||||||
STAGE_CREATE(MLX5_IB_STAGE_DEVICE_RESOURCES,
|
STAGE_CREATE(MLX5_IB_STAGE_DEVICE_RESOURCES,
|
||||||
mlx5_ib_stage_dev_res_init,
|
mlx5_ib_stage_dev_res_init,
|
||||||
mlx5_ib_stage_dev_res_cleanup),
|
mlx5_ib_stage_dev_res_cleanup),
|
||||||
|
@ -6365,6 +6369,9 @@ static const struct mlx5_ib_profile nic_rep_profile = {
|
||||||
STAGE_CREATE(MLX5_IB_STAGE_ROCE,
|
STAGE_CREATE(MLX5_IB_STAGE_ROCE,
|
||||||
mlx5_ib_stage_rep_roce_init,
|
mlx5_ib_stage_rep_roce_init,
|
||||||
mlx5_ib_stage_rep_roce_cleanup),
|
mlx5_ib_stage_rep_roce_cleanup),
|
||||||
|
STAGE_CREATE(MLX5_IB_STAGE_SRQ,
|
||||||
|
mlx5_init_srq_table,
|
||||||
|
mlx5_cleanup_srq_table),
|
||||||
STAGE_CREATE(MLX5_IB_STAGE_DEVICE_RESOURCES,
|
STAGE_CREATE(MLX5_IB_STAGE_DEVICE_RESOURCES,
|
||||||
mlx5_ib_stage_dev_res_init,
|
mlx5_ib_stage_dev_res_init,
|
||||||
mlx5_ib_stage_dev_res_cleanup),
|
mlx5_ib_stage_dev_res_cleanup),
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
#include <linux/mlx5/cq.h>
|
#include <linux/mlx5/cq.h>
|
||||||
#include <linux/mlx5/fs.h>
|
#include <linux/mlx5/fs.h>
|
||||||
#include <linux/mlx5/qp.h>
|
#include <linux/mlx5/qp.h>
|
||||||
#include <linux/mlx5/srq.h>
|
|
||||||
#include <linux/mlx5/fs.h>
|
#include <linux/mlx5/fs.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/mlx5/transobj.h>
|
#include <linux/mlx5/transobj.h>
|
||||||
|
@ -50,6 +49,8 @@
|
||||||
#include <rdma/uverbs_ioctl.h>
|
#include <rdma/uverbs_ioctl.h>
|
||||||
#include <rdma/mlx5_user_ioctl_cmds.h>
|
#include <rdma/mlx5_user_ioctl_cmds.h>
|
||||||
|
|
||||||
|
#include "srq.h"
|
||||||
|
|
||||||
#define mlx5_ib_dbg(_dev, format, arg...) \
|
#define mlx5_ib_dbg(_dev, format, arg...) \
|
||||||
dev_dbg(&(_dev)->ib_dev.dev, "%s:%d:(pid %d): " format, __func__, \
|
dev_dbg(&(_dev)->ib_dev.dev, "%s:%d:(pid %d): " format, __func__, \
|
||||||
__LINE__, current->pid, ##arg)
|
__LINE__, current->pid, ##arg)
|
||||||
|
@ -774,6 +775,7 @@ enum mlx5_ib_stages {
|
||||||
MLX5_IB_STAGE_CAPS,
|
MLX5_IB_STAGE_CAPS,
|
||||||
MLX5_IB_STAGE_NON_DEFAULT_CB,
|
MLX5_IB_STAGE_NON_DEFAULT_CB,
|
||||||
MLX5_IB_STAGE_ROCE,
|
MLX5_IB_STAGE_ROCE,
|
||||||
|
MLX5_IB_STAGE_SRQ,
|
||||||
MLX5_IB_STAGE_DEVICE_RESOURCES,
|
MLX5_IB_STAGE_DEVICE_RESOURCES,
|
||||||
MLX5_IB_STAGE_DEVICE_NOTIFIER,
|
MLX5_IB_STAGE_DEVICE_NOTIFIER,
|
||||||
MLX5_IB_STAGE_ODP,
|
MLX5_IB_STAGE_ODP,
|
||||||
|
@ -942,6 +944,7 @@ struct mlx5_ib_dev {
|
||||||
u64 sys_image_guid;
|
u64 sys_image_guid;
|
||||||
struct mlx5_memic memic;
|
struct mlx5_memic memic;
|
||||||
u16 devx_whitelist_uid;
|
u16 devx_whitelist_uid;
|
||||||
|
struct mlx5_srq_table srq_table;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct mlx5_ib_cq *to_mibcq(struct mlx5_core_cq *mcq)
|
static inline struct mlx5_ib_cq *to_mibcq(struct mlx5_core_cq *mcq)
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mlx5/qp.h>
|
#include <linux/mlx5/qp.h>
|
||||||
#include <linux/mlx5/srq.h>
|
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <rdma/ib_umem.h>
|
#include <rdma/ib_umem.h>
|
||||||
#include <rdma/ib_user_verbs.h>
|
#include <rdma/ib_user_verbs.h>
|
||||||
|
|
|
@ -37,6 +37,28 @@ struct mlx5_srq_attr {
|
||||||
|
|
||||||
struct mlx5_ib_dev;
|
struct mlx5_ib_dev;
|
||||||
|
|
||||||
|
struct mlx5_core_srq {
|
||||||
|
struct mlx5_core_rsc_common common; /* must be first */
|
||||||
|
u32 srqn;
|
||||||
|
int max;
|
||||||
|
size_t max_gs;
|
||||||
|
size_t max_avail_gather;
|
||||||
|
int wqe_shift;
|
||||||
|
void (*event)(struct mlx5_core_srq *srq, enum mlx5_event e);
|
||||||
|
|
||||||
|
atomic_t refcount;
|
||||||
|
struct completion free;
|
||||||
|
u16 uid;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mlx5_srq_table {
|
||||||
|
struct notifier_block nb;
|
||||||
|
/* protect radix tree
|
||||||
|
*/
|
||||||
|
spinlock_t lock;
|
||||||
|
struct radix_tree_root tree;
|
||||||
|
};
|
||||||
|
|
||||||
int mlx5_cmd_create_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
|
int mlx5_cmd_create_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
|
||||||
struct mlx5_srq_attr *in);
|
struct mlx5_srq_attr *in);
|
||||||
int mlx5_cmd_destroy_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq);
|
int mlx5_cmd_destroy_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq);
|
||||||
|
@ -45,4 +67,7 @@ int mlx5_cmd_query_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
|
||||||
int mlx5_cmd_arm_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
|
int mlx5_cmd_arm_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
|
||||||
u16 lwm, int is_srq);
|
u16 lwm, int is_srq);
|
||||||
struct mlx5_core_srq *mlx5_cmd_get_srq(struct mlx5_ib_dev *dev, u32 srqn);
|
struct mlx5_core_srq *mlx5_cmd_get_srq(struct mlx5_ib_dev *dev, u32 srqn);
|
||||||
|
|
||||||
|
int mlx5_init_srq_table(struct mlx5_ib_dev *dev);
|
||||||
|
void mlx5_cleanup_srq_table(struct mlx5_ib_dev *dev);
|
||||||
#endif /* MLX5_IB_SRQ_H */
|
#endif /* MLX5_IB_SRQ_H */
|
||||||
|
|
|
@ -80,12 +80,9 @@ static void get_srqc(void *srqc, struct mlx5_srq_attr *in)
|
||||||
|
|
||||||
struct mlx5_core_srq *mlx5_cmd_get_srq(struct mlx5_ib_dev *dev, u32 srqn)
|
struct mlx5_core_srq *mlx5_cmd_get_srq(struct mlx5_ib_dev *dev, u32 srqn)
|
||||||
{
|
{
|
||||||
struct mlx5_core_dev *mdev = dev->mdev;
|
struct mlx5_srq_table *table = &dev->srq_table;
|
||||||
struct mlx5_srq_table *table;
|
|
||||||
struct mlx5_core_srq *srq;
|
struct mlx5_core_srq *srq;
|
||||||
|
|
||||||
table = &mdev->priv.srq_table;
|
|
||||||
|
|
||||||
spin_lock(&table->lock);
|
spin_lock(&table->lock);
|
||||||
|
|
||||||
srq = radix_tree_lookup(&table->tree, srqn);
|
srq = radix_tree_lookup(&table->tree, srqn);
|
||||||
|
@ -576,12 +573,9 @@ static int destroy_srq_split(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
|
||||||
int mlx5_cmd_create_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
|
int mlx5_cmd_create_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
|
||||||
struct mlx5_srq_attr *in)
|
struct mlx5_srq_attr *in)
|
||||||
{
|
{
|
||||||
struct mlx5_core_dev *mdev = dev->mdev;
|
struct mlx5_srq_table *table = &dev->srq_table;
|
||||||
struct mlx5_srq_table *table;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
table = &mdev->priv.srq_table;
|
|
||||||
|
|
||||||
switch (in->type) {
|
switch (in->type) {
|
||||||
case IB_SRQT_XRC:
|
case IB_SRQT_XRC:
|
||||||
srq->common.res = MLX5_RES_XSRQ;
|
srq->common.res = MLX5_RES_XSRQ;
|
||||||
|
@ -616,13 +610,10 @@ err_destroy_srq_split:
|
||||||
|
|
||||||
int mlx5_cmd_destroy_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
|
int mlx5_cmd_destroy_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq)
|
||||||
{
|
{
|
||||||
struct mlx5_core_dev *mdev = dev->mdev;
|
struct mlx5_srq_table *table = &dev->srq_table;
|
||||||
struct mlx5_srq_table *table;
|
|
||||||
struct mlx5_core_srq *tmp;
|
struct mlx5_core_srq *tmp;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
table = &mdev->priv.srq_table;
|
|
||||||
|
|
||||||
spin_lock_irq(&table->lock);
|
spin_lock_irq(&table->lock);
|
||||||
tmp = radix_tree_delete(&table->tree, srq->srqn);
|
tmp = radix_tree_delete(&table->tree, srq->srqn);
|
||||||
spin_unlock_irq(&table->lock);
|
spin_unlock_irq(&table->lock);
|
||||||
|
@ -669,3 +660,60 @@ int mlx5_cmd_arm_srq(struct mlx5_ib_dev *dev, struct mlx5_core_srq *srq,
|
||||||
return arm_rmp_cmd(dev, srq, lwm);
|
return arm_rmp_cmd(dev, srq, lwm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int srq_event_notifier(struct notifier_block *nb,
|
||||||
|
unsigned long type, void *data)
|
||||||
|
{
|
||||||
|
struct mlx5_srq_table *table;
|
||||||
|
struct mlx5_core_srq *srq;
|
||||||
|
struct mlx5_eqe *eqe;
|
||||||
|
u32 srqn;
|
||||||
|
|
||||||
|
if (type != MLX5_EVENT_TYPE_SRQ_CATAS_ERROR &&
|
||||||
|
type != MLX5_EVENT_TYPE_SRQ_RQ_LIMIT)
|
||||||
|
return NOTIFY_DONE;
|
||||||
|
|
||||||
|
table = container_of(nb, struct mlx5_srq_table, nb);
|
||||||
|
|
||||||
|
eqe = data;
|
||||||
|
srqn = be32_to_cpu(eqe->data.qp_srq.qp_srq_n) & 0xffffff;
|
||||||
|
|
||||||
|
spin_lock(&table->lock);
|
||||||
|
|
||||||
|
srq = radix_tree_lookup(&table->tree, srqn);
|
||||||
|
if (srq)
|
||||||
|
atomic_inc(&srq->refcount);
|
||||||
|
|
||||||
|
spin_unlock(&table->lock);
|
||||||
|
|
||||||
|
if (!srq)
|
||||||
|
return NOTIFY_OK;
|
||||||
|
|
||||||
|
srq->event(srq, eqe->type);
|
||||||
|
|
||||||
|
if (atomic_dec_and_test(&srq->refcount))
|
||||||
|
complete(&srq->free);
|
||||||
|
|
||||||
|
return NOTIFY_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int mlx5_init_srq_table(struct mlx5_ib_dev *dev)
|
||||||
|
{
|
||||||
|
struct mlx5_srq_table *table = &dev->srq_table;
|
||||||
|
|
||||||
|
memset(table, 0, sizeof(*table));
|
||||||
|
spin_lock_init(&table->lock);
|
||||||
|
INIT_RADIX_TREE(&table->tree, GFP_ATOMIC);
|
||||||
|
|
||||||
|
table->nb.notifier_call = srq_event_notifier;
|
||||||
|
mlx5_notifier_register(dev->mdev, &table->nb);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mlx5_cleanup_srq_table(struct mlx5_ib_dev *dev)
|
||||||
|
{
|
||||||
|
struct mlx5_srq_table *table = &dev->srq_table;
|
||||||
|
|
||||||
|
mlx5_notifier_unregister(dev->mdev, &table->nb);
|
||||||
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ obj-$(CONFIG_MLX5_CORE) += mlx5_core.o
|
||||||
# mlx5 core basic
|
# mlx5 core basic
|
||||||
#
|
#
|
||||||
mlx5_core-y := main.o cmd.o debugfs.o fw.o eq.o uar.o pagealloc.o \
|
mlx5_core-y := main.o cmd.o debugfs.o fw.o eq.o uar.o pagealloc.o \
|
||||||
health.o mcg.o cq.o srq.o alloc.o qp.o port.o mr.o pd.o \
|
health.o mcg.o cq.o alloc.o qp.o port.o mr.o pd.o \
|
||||||
mad.o transobj.o vport.o sriov.o fs_cmd.o fs_core.o \
|
mad.o transobj.o vport.o sriov.o fs_cmd.o fs_core.o \
|
||||||
fs_counters.o rl.o lag.o dev.o events.o wq.o lib/gid.o \
|
fs_counters.o rl.o lag.o dev.o events.o wq.o lib/gid.o \
|
||||||
diag/fs_tracepoint.o diag/fw_tracer.o
|
diag/fs_tracepoint.o diag/fw_tracer.o
|
||||||
|
|
|
@ -43,7 +43,6 @@
|
||||||
#include <linux/mlx5/driver.h>
|
#include <linux/mlx5/driver.h>
|
||||||
#include <linux/mlx5/cq.h>
|
#include <linux/mlx5/cq.h>
|
||||||
#include <linux/mlx5/qp.h>
|
#include <linux/mlx5/qp.h>
|
||||||
#include <linux/mlx5/srq.h>
|
|
||||||
#include <linux/debugfs.h>
|
#include <linux/debugfs.h>
|
||||||
#include <linux/kmod.h>
|
#include <linux/kmod.h>
|
||||||
#include <linux/mlx5/mlx5_ifc.h>
|
#include <linux/mlx5/mlx5_ifc.h>
|
||||||
|
@ -749,8 +748,6 @@ static int mlx5_init_once(struct mlx5_core_dev *dev, struct mlx5_priv *priv)
|
||||||
|
|
||||||
mlx5_init_qp_table(dev);
|
mlx5_init_qp_table(dev);
|
||||||
|
|
||||||
mlx5_init_srq_table(dev);
|
|
||||||
|
|
||||||
mlx5_init_mkey_table(dev);
|
mlx5_init_mkey_table(dev);
|
||||||
|
|
||||||
mlx5_init_reserved_gids(dev);
|
mlx5_init_reserved_gids(dev);
|
||||||
|
@ -804,7 +801,6 @@ err_rl_cleanup:
|
||||||
err_tables_cleanup:
|
err_tables_cleanup:
|
||||||
mlx5_vxlan_destroy(dev->vxlan);
|
mlx5_vxlan_destroy(dev->vxlan);
|
||||||
mlx5_cleanup_mkey_table(dev);
|
mlx5_cleanup_mkey_table(dev);
|
||||||
mlx5_cleanup_srq_table(dev);
|
|
||||||
mlx5_cleanup_qp_table(dev);
|
mlx5_cleanup_qp_table(dev);
|
||||||
mlx5_cq_debugfs_cleanup(dev);
|
mlx5_cq_debugfs_cleanup(dev);
|
||||||
err_events_cleanup:
|
err_events_cleanup:
|
||||||
|
@ -828,7 +824,6 @@ static void mlx5_cleanup_once(struct mlx5_core_dev *dev)
|
||||||
mlx5_cleanup_clock(dev);
|
mlx5_cleanup_clock(dev);
|
||||||
mlx5_cleanup_reserved_gids(dev);
|
mlx5_cleanup_reserved_gids(dev);
|
||||||
mlx5_cleanup_mkey_table(dev);
|
mlx5_cleanup_mkey_table(dev);
|
||||||
mlx5_cleanup_srq_table(dev);
|
|
||||||
mlx5_cleanup_qp_table(dev);
|
mlx5_cleanup_qp_table(dev);
|
||||||
mlx5_cq_debugfs_cleanup(dev);
|
mlx5_cq_debugfs_cleanup(dev);
|
||||||
mlx5_events_cleanup(dev);
|
mlx5_events_cleanup(dev);
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2013-2018, Mellanox Technologies inc. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/mlx5/driver.h>
|
|
||||||
#include <linux/mlx5/srq.h>
|
|
||||||
|
|
||||||
static int srq_event_notifier(struct notifier_block *nb,
|
|
||||||
unsigned long type, void *data)
|
|
||||||
{
|
|
||||||
struct mlx5_srq_table *table;
|
|
||||||
struct mlx5_core_srq *srq;
|
|
||||||
struct mlx5_eqe *eqe;
|
|
||||||
u32 srqn;
|
|
||||||
|
|
||||||
if (type != MLX5_EVENT_TYPE_SRQ_CATAS_ERROR &&
|
|
||||||
type != MLX5_EVENT_TYPE_SRQ_RQ_LIMIT)
|
|
||||||
return NOTIFY_DONE;
|
|
||||||
|
|
||||||
table = container_of(nb, struct mlx5_srq_table, nb);
|
|
||||||
|
|
||||||
eqe = data;
|
|
||||||
srqn = be32_to_cpu(eqe->data.qp_srq.qp_srq_n) & 0xffffff;
|
|
||||||
|
|
||||||
spin_lock(&table->lock);
|
|
||||||
|
|
||||||
srq = radix_tree_lookup(&table->tree, srqn);
|
|
||||||
if (srq)
|
|
||||||
atomic_inc(&srq->refcount);
|
|
||||||
|
|
||||||
spin_unlock(&table->lock);
|
|
||||||
|
|
||||||
if (!srq)
|
|
||||||
return NOTIFY_OK;
|
|
||||||
|
|
||||||
srq->event(srq, eqe->type);
|
|
||||||
|
|
||||||
if (atomic_dec_and_test(&srq->refcount))
|
|
||||||
complete(&srq->free);
|
|
||||||
|
|
||||||
return NOTIFY_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mlx5_init_srq_table(struct mlx5_core_dev *dev)
|
|
||||||
{
|
|
||||||
struct mlx5_srq_table *table = &dev->priv.srq_table;
|
|
||||||
|
|
||||||
memset(table, 0, sizeof(*table));
|
|
||||||
spin_lock_init(&table->lock);
|
|
||||||
INIT_RADIX_TREE(&table->tree, GFP_ATOMIC);
|
|
||||||
|
|
||||||
table->nb.notifier_call = srq_event_notifier;
|
|
||||||
mlx5_notifier_register(dev, &table->nb);
|
|
||||||
}
|
|
||||||
|
|
||||||
void mlx5_cleanup_srq_table(struct mlx5_core_dev *dev)
|
|
||||||
{
|
|
||||||
struct mlx5_srq_table *table = &dev->priv.srq_table;
|
|
||||||
|
|
||||||
mlx5_notifier_unregister(dev, &table->nb);
|
|
||||||
}
|
|
|
@ -50,7 +50,6 @@
|
||||||
|
|
||||||
#include <linux/mlx5/device.h>
|
#include <linux/mlx5/device.h>
|
||||||
#include <linux/mlx5/doorbell.h>
|
#include <linux/mlx5/doorbell.h>
|
||||||
#include <linux/mlx5/srq.h>
|
|
||||||
#include <linux/mlx5/eq.h>
|
#include <linux/mlx5/eq.h>
|
||||||
#include <linux/timecounter.h>
|
#include <linux/timecounter.h>
|
||||||
#include <linux/ptp_clock_kernel.h>
|
#include <linux/ptp_clock_kernel.h>
|
||||||
|
@ -393,20 +392,6 @@ struct mlx5_core_rsc_common {
|
||||||
struct completion free;
|
struct completion free;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mlx5_core_srq {
|
|
||||||
struct mlx5_core_rsc_common common; /* must be first */
|
|
||||||
u32 srqn;
|
|
||||||
int max;
|
|
||||||
size_t max_gs;
|
|
||||||
size_t max_avail_gather;
|
|
||||||
int wqe_shift;
|
|
||||||
void (*event) (struct mlx5_core_srq *, enum mlx5_event);
|
|
||||||
|
|
||||||
atomic_t refcount;
|
|
||||||
struct completion free;
|
|
||||||
u16 uid;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mlx5_uars_page {
|
struct mlx5_uars_page {
|
||||||
void __iomem *map;
|
void __iomem *map;
|
||||||
bool wc;
|
bool wc;
|
||||||
|
@ -464,14 +449,6 @@ struct mlx5_qp_table {
|
||||||
struct radix_tree_root tree;
|
struct radix_tree_root tree;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mlx5_srq_table {
|
|
||||||
struct notifier_block nb;
|
|
||||||
/* protect radix tree
|
|
||||||
*/
|
|
||||||
spinlock_t lock;
|
|
||||||
struct radix_tree_root tree;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mlx5_mkey_table {
|
struct mlx5_mkey_table {
|
||||||
/* protect radix tree
|
/* protect radix tree
|
||||||
*/
|
*/
|
||||||
|
@ -547,8 +524,6 @@ struct mlx5_priv {
|
||||||
|
|
||||||
struct mlx5_core_health health;
|
struct mlx5_core_health health;
|
||||||
|
|
||||||
struct mlx5_srq_table srq_table;
|
|
||||||
|
|
||||||
/* start: qp staff */
|
/* start: qp staff */
|
||||||
struct mlx5_qp_table qp_table;
|
struct mlx5_qp_table qp_table;
|
||||||
struct dentry *qp_debugfs;
|
struct dentry *qp_debugfs;
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2013-2018, Mellanox Technologies. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MLX5_SRQ_H
|
|
||||||
#define MLX5_SRQ_H
|
|
||||||
|
|
||||||
struct mlx5_core_dev;
|
|
||||||
|
|
||||||
void mlx5_init_srq_table(struct mlx5_core_dev *dev);
|
|
||||||
void mlx5_cleanup_srq_table(struct mlx5_core_dev *dev);
|
|
||||||
|
|
||||||
#endif /* MLX5_SRQ_H */
|
|
Loading…
Reference in New Issue