Commit 52e124c2 authored by Matthew Wilcox's avatar Matthew Wilcox Committed by Jason Gunthorpe

cxgb4: Convert cqidr to XArray

Signed-off-by: default avatarMatthew Wilcox <willy@infradead.org>
Acked-by: default avatarSteve Wise <swise@opengridcomputing.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent e64a7c02
...@@ -976,7 +976,7 @@ int c4iw_destroy_cq(struct ib_cq *ib_cq) ...@@ -976,7 +976,7 @@ int c4iw_destroy_cq(struct ib_cq *ib_cq)
pr_debug("ib_cq %p\n", ib_cq); pr_debug("ib_cq %p\n", ib_cq);
chp = to_c4iw_cq(ib_cq); chp = to_c4iw_cq(ib_cq);
remove_handle(chp->rhp, &chp->rhp->cqidr, chp->cq.cqid); xa_erase_irq(&chp->rhp->cqs, chp->cq.cqid);
atomic_dec(&chp->refcnt); atomic_dec(&chp->refcnt);
wait_event(chp->wait, !atomic_read(&chp->refcnt)); wait_event(chp->wait, !atomic_read(&chp->refcnt));
...@@ -1088,7 +1088,7 @@ struct ib_cq *c4iw_create_cq(struct ib_device *ibdev, ...@@ -1088,7 +1088,7 @@ struct ib_cq *c4iw_create_cq(struct ib_device *ibdev,
spin_lock_init(&chp->comp_handler_lock); spin_lock_init(&chp->comp_handler_lock);
atomic_set(&chp->refcnt, 1); atomic_set(&chp->refcnt, 1);
init_waitqueue_head(&chp->wait); init_waitqueue_head(&chp->wait);
ret = insert_handle(rhp, &rhp->cqidr, chp, chp->cq.cqid); ret = xa_insert_irq(&rhp->cqs, chp->cq.cqid, chp, GFP_KERNEL);
if (ret) if (ret)
goto err_destroy_cq; goto err_destroy_cq;
...@@ -1143,7 +1143,7 @@ struct ib_cq *c4iw_create_cq(struct ib_device *ibdev, ...@@ -1143,7 +1143,7 @@ struct ib_cq *c4iw_create_cq(struct ib_device *ibdev,
err_free_mm: err_free_mm:
kfree(mm); kfree(mm);
err_remove_handle: err_remove_handle:
remove_handle(rhp, &rhp->cqidr, chp->cq.cqid); xa_erase_irq(&rhp->cqs, chp->cq.cqid);
err_destroy_cq: err_destroy_cq:
destroy_cq(&chp->rhp->rdev, &chp->cq, destroy_cq(&chp->rhp->rdev, &chp->cq,
ucontext ? &ucontext->uctx : &rhp->rdev.uctx, ucontext ? &ucontext->uctx : &rhp->rdev.uctx,
......
...@@ -931,8 +931,7 @@ static void c4iw_rdev_close(struct c4iw_rdev *rdev) ...@@ -931,8 +931,7 @@ static void c4iw_rdev_close(struct c4iw_rdev *rdev)
void c4iw_dealloc(struct uld_ctx *ctx) void c4iw_dealloc(struct uld_ctx *ctx)
{ {
c4iw_rdev_close(&ctx->dev->rdev); c4iw_rdev_close(&ctx->dev->rdev);
WARN_ON_ONCE(!idr_is_empty(&ctx->dev->cqidr)); WARN_ON(!xa_empty(&ctx->dev->cqs));
idr_destroy(&ctx->dev->cqidr);
WARN_ON_ONCE(!idr_is_empty(&ctx->dev->qpidr)); WARN_ON_ONCE(!idr_is_empty(&ctx->dev->qpidr));
idr_destroy(&ctx->dev->qpidr); idr_destroy(&ctx->dev->qpidr);
WARN_ON_ONCE(!idr_is_empty(&ctx->dev->mmidr)); WARN_ON_ONCE(!idr_is_empty(&ctx->dev->mmidr));
...@@ -1044,7 +1043,7 @@ static struct c4iw_dev *c4iw_alloc(const struct cxgb4_lld_info *infop) ...@@ -1044,7 +1043,7 @@ static struct c4iw_dev *c4iw_alloc(const struct cxgb4_lld_info *infop)
return ERR_PTR(ret); return ERR_PTR(ret);
} }
idr_init(&devp->cqidr); xa_init_flags(&devp->cqs, XA_FLAGS_LOCK_IRQ);
idr_init(&devp->qpidr); idr_init(&devp->qpidr);
idr_init(&devp->mmidr); idr_init(&devp->mmidr);
idr_init(&devp->hwtid_idr); idr_init(&devp->hwtid_idr);
......
...@@ -225,11 +225,11 @@ int c4iw_ev_handler(struct c4iw_dev *dev, u32 qid) ...@@ -225,11 +225,11 @@ int c4iw_ev_handler(struct c4iw_dev *dev, u32 qid)
struct c4iw_cq *chp; struct c4iw_cq *chp;
unsigned long flag; unsigned long flag;
spin_lock_irqsave(&dev->lock, flag); xa_lock_irqsave(&dev->cqs, flag);
chp = get_chp(dev, qid); chp = xa_load(&dev->cqs, qid);
if (chp) { if (chp) {
atomic_inc(&chp->refcnt); atomic_inc(&chp->refcnt);
spin_unlock_irqrestore(&dev->lock, flag); xa_unlock_irqrestore(&dev->cqs, flag);
t4_clear_cq_armed(&chp->cq); t4_clear_cq_armed(&chp->cq);
spin_lock_irqsave(&chp->comp_handler_lock, flag); spin_lock_irqsave(&chp->comp_handler_lock, flag);
(*chp->ibcq.comp_handler)(&chp->ibcq, chp->ibcq.cq_context); (*chp->ibcq.comp_handler)(&chp->ibcq, chp->ibcq.cq_context);
...@@ -238,7 +238,7 @@ int c4iw_ev_handler(struct c4iw_dev *dev, u32 qid) ...@@ -238,7 +238,7 @@ int c4iw_ev_handler(struct c4iw_dev *dev, u32 qid)
wake_up(&chp->wait); wake_up(&chp->wait);
} else { } else {
pr_debug("unknown cqid 0x%x\n", qid); pr_debug("unknown cqid 0x%x\n", qid);
spin_unlock_irqrestore(&dev->lock, flag); xa_unlock_irqrestore(&dev->cqs, flag);
} }
return 0; return 0;
} }
...@@ -315,7 +315,7 @@ struct c4iw_dev { ...@@ -315,7 +315,7 @@ struct c4iw_dev {
struct ib_device ibdev; struct ib_device ibdev;
struct c4iw_rdev rdev; struct c4iw_rdev rdev;
u32 device_cap_flags; u32 device_cap_flags;
struct idr cqidr; struct xarray cqs;
struct idr qpidr; struct idr qpidr;
struct idr mmidr; struct idr mmidr;
spinlock_t lock; spinlock_t lock;
...@@ -349,7 +349,7 @@ static inline struct c4iw_dev *rdev_to_c4iw_dev(struct c4iw_rdev *rdev) ...@@ -349,7 +349,7 @@ static inline struct c4iw_dev *rdev_to_c4iw_dev(struct c4iw_rdev *rdev)
static inline struct c4iw_cq *get_chp(struct c4iw_dev *rhp, u32 cqid) static inline struct c4iw_cq *get_chp(struct c4iw_dev *rhp, u32 cqid)
{ {
return idr_find(&rhp->cqidr, cqid); return xa_load(&rhp->cqs, cqid);
} }
static inline struct c4iw_qp *get_qhp(struct c4iw_dev *rhp, u32 qpid) static inline struct c4iw_qp *get_qhp(struct c4iw_dev *rhp, u32 qpid)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment