mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 06:24:53 +08:00
cxgb4: Convert mmidr to XArray
Signed-off-by: Matthew Wilcox <willy@infradead.org> Acked-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
2f43129127
commit
7a268a9397
drivers/infiniband/hw/cxgb4
@ -374,9 +374,8 @@ static const struct file_operations qp_debugfs_fops = {
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
static int dump_stag(int id, void *p, void *data)
|
||||
static int dump_stag(unsigned long id, struct c4iw_debugfs_data *stagd)
|
||||
{
|
||||
struct c4iw_debugfs_data *stagd = data;
|
||||
int space;
|
||||
int cc;
|
||||
struct fw_ri_tpte tpte;
|
||||
@ -425,6 +424,8 @@ static int stag_release(struct inode *inode, struct file *file)
|
||||
static int stag_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct c4iw_debugfs_data *stagd;
|
||||
void *p;
|
||||
unsigned long index;
|
||||
int ret = 0;
|
||||
int count = 1;
|
||||
|
||||
@ -436,9 +437,8 @@ static int stag_open(struct inode *inode, struct file *file)
|
||||
stagd->devp = inode->i_private;
|
||||
stagd->pos = 0;
|
||||
|
||||
spin_lock_irq(&stagd->devp->lock);
|
||||
idr_for_each(&stagd->devp->mmidr, count_idrs, &count);
|
||||
spin_unlock_irq(&stagd->devp->lock);
|
||||
xa_for_each(&stagd->devp->mrs, index, p)
|
||||
count++;
|
||||
|
||||
stagd->bufsize = count * 256;
|
||||
stagd->buf = vmalloc(stagd->bufsize);
|
||||
@ -447,9 +447,10 @@ static int stag_open(struct inode *inode, struct file *file)
|
||||
goto err1;
|
||||
}
|
||||
|
||||
spin_lock_irq(&stagd->devp->lock);
|
||||
idr_for_each(&stagd->devp->mmidr, dump_stag, stagd);
|
||||
spin_unlock_irq(&stagd->devp->lock);
|
||||
xa_lock_irq(&stagd->devp->mrs);
|
||||
xa_for_each(&stagd->devp->mrs, index, p)
|
||||
dump_stag(index, stagd);
|
||||
xa_unlock_irq(&stagd->devp->mrs);
|
||||
|
||||
stagd->buf[stagd->pos++] = 0;
|
||||
file->private_data = stagd;
|
||||
@ -934,8 +935,7 @@ void c4iw_dealloc(struct uld_ctx *ctx)
|
||||
c4iw_rdev_close(&ctx->dev->rdev);
|
||||
WARN_ON(!xa_empty(&ctx->dev->cqs));
|
||||
WARN_ON(!xa_empty(&ctx->dev->qps));
|
||||
WARN_ON_ONCE(!idr_is_empty(&ctx->dev->mmidr));
|
||||
idr_destroy(&ctx->dev->mmidr);
|
||||
WARN_ON(!xa_empty(&ctx->dev->mrs));
|
||||
wait_event(ctx->dev->wait, idr_is_empty(&ctx->dev->hwtid_idr));
|
||||
idr_destroy(&ctx->dev->hwtid_idr);
|
||||
idr_destroy(&ctx->dev->stid_idr);
|
||||
@ -1045,7 +1045,7 @@ static struct c4iw_dev *c4iw_alloc(const struct cxgb4_lld_info *infop)
|
||||
|
||||
xa_init_flags(&devp->cqs, XA_FLAGS_LOCK_IRQ);
|
||||
xa_init_flags(&devp->qps, XA_FLAGS_LOCK_IRQ);
|
||||
idr_init(&devp->mmidr);
|
||||
xa_init_flags(&devp->mrs, XA_FLAGS_LOCK_IRQ);
|
||||
idr_init(&devp->hwtid_idr);
|
||||
idr_init(&devp->stid_idr);
|
||||
idr_init(&devp->atid_idr);
|
||||
|
@ -317,7 +317,7 @@ struct c4iw_dev {
|
||||
u32 device_cap_flags;
|
||||
struct xarray cqs;
|
||||
struct xarray qps;
|
||||
struct idr mmidr;
|
||||
struct xarray mrs;
|
||||
spinlock_t lock;
|
||||
struct mutex db_mutex;
|
||||
struct dentry *debugfs_root;
|
||||
@ -357,10 +357,6 @@ static inline struct c4iw_qp *get_qhp(struct c4iw_dev *rhp, u32 qpid)
|
||||
return xa_load(&rhp->qps, qpid);
|
||||
}
|
||||
|
||||
static inline struct c4iw_mr *get_mhp(struct c4iw_dev *rhp, u32 mmid)
|
||||
{
|
||||
return idr_find(&rhp->mmidr, mmid);
|
||||
}
|
||||
|
||||
static inline int _insert_handle(struct c4iw_dev *rhp, struct idr *idr,
|
||||
void *handle, u32 id, int lock)
|
||||
|
@ -395,7 +395,7 @@ static int finish_mem_reg(struct c4iw_mr *mhp, u32 stag)
|
||||
mhp->ibmr.iova = mhp->attr.va_fbo;
|
||||
mhp->ibmr.page_size = 1U << (mhp->attr.page_size + 12);
|
||||
pr_debug("mmid 0x%x mhp %p\n", mmid, mhp);
|
||||
return insert_handle(mhp->rhp, &mhp->rhp->mmidr, mhp, mmid);
|
||||
return xa_insert_irq(&mhp->rhp->mrs, mmid, mhp, GFP_KERNEL);
|
||||
}
|
||||
|
||||
static int register_mem(struct c4iw_dev *rhp, struct c4iw_pd *php,
|
||||
@ -645,7 +645,7 @@ struct ib_mw *c4iw_alloc_mw(struct ib_pd *pd, enum ib_mw_type type,
|
||||
mhp->attr.stag = stag;
|
||||
mmid = (stag) >> 8;
|
||||
mhp->ibmw.rkey = stag;
|
||||
if (insert_handle(rhp, &rhp->mmidr, mhp, mmid)) {
|
||||
if (xa_insert_irq(&rhp->mrs, mmid, mhp, GFP_KERNEL)) {
|
||||
ret = -ENOMEM;
|
||||
goto dealloc_win;
|
||||
}
|
||||
@ -673,7 +673,7 @@ int c4iw_dealloc_mw(struct ib_mw *mw)
|
||||
mhp = to_c4iw_mw(mw);
|
||||
rhp = mhp->rhp;
|
||||
mmid = (mw->rkey) >> 8;
|
||||
remove_handle(rhp, &rhp->mmidr, mmid);
|
||||
xa_erase_irq(&rhp->mrs, mmid);
|
||||
deallocate_window(&rhp->rdev, mhp->attr.stag, mhp->dereg_skb,
|
||||
mhp->wr_waitp);
|
||||
kfree_skb(mhp->dereg_skb);
|
||||
@ -740,7 +740,7 @@ struct ib_mr *c4iw_alloc_mr(struct ib_pd *pd,
|
||||
mhp->attr.state = 0;
|
||||
mmid = (stag) >> 8;
|
||||
mhp->ibmr.rkey = mhp->ibmr.lkey = stag;
|
||||
if (insert_handle(rhp, &rhp->mmidr, mhp, mmid)) {
|
||||
if (xa_insert_irq(&rhp->mrs, mmid, mhp, GFP_KERNEL)) {
|
||||
ret = -ENOMEM;
|
||||
goto err_dereg;
|
||||
}
|
||||
@ -797,7 +797,7 @@ int c4iw_dereg_mr(struct ib_mr *ib_mr)
|
||||
mhp = to_c4iw_mr(ib_mr);
|
||||
rhp = mhp->rhp;
|
||||
mmid = mhp->attr.stag >> 8;
|
||||
remove_handle(rhp, &rhp->mmidr, mmid);
|
||||
xa_erase_irq(&rhp->mrs, mmid);
|
||||
if (mhp->mpl)
|
||||
dma_free_coherent(&mhp->rhp->rdev.lldi.pdev->dev,
|
||||
mhp->max_mpl_len, mhp->mpl, mhp->mpl_addr);
|
||||
@ -821,9 +821,9 @@ void c4iw_invalidate_mr(struct c4iw_dev *rhp, u32 rkey)
|
||||
struct c4iw_mr *mhp;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&rhp->lock, flags);
|
||||
mhp = get_mhp(rhp, rkey >> 8);
|
||||
xa_lock_irqsave(&rhp->mrs, flags);
|
||||
mhp = xa_load(&rhp->mrs, rkey >> 8);
|
||||
if (mhp)
|
||||
mhp->attr.state = 0;
|
||||
spin_unlock_irqrestore(&rhp->lock, flags);
|
||||
xa_unlock_irqrestore(&rhp->mrs, flags);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user