cxgb4: Convert atid_idr to XArray
Signed-off-by: Matthew Wilcox <willy@infradead.org> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
f254ba6ae5
commit
9f5a9632e4
|
@ -558,7 +558,7 @@ static void act_open_req_arp_failure(void *handle, struct sk_buff *skb)
|
||||||
cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
|
cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
|
||||||
(const u32 *)&sin6->sin6_addr.s6_addr, 1);
|
(const u32 *)&sin6->sin6_addr.s6_addr, 1);
|
||||||
}
|
}
|
||||||
remove_handle(ep->com.dev, &ep->com.dev->atid_idr, ep->atid);
|
xa_erase_irq(&ep->com.dev->atids, ep->atid);
|
||||||
cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid);
|
cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid);
|
||||||
queue_arp_failure_cpl(ep, skb, FAKE_CPL_PUT_EP_SAFE);
|
queue_arp_failure_cpl(ep, skb, FAKE_CPL_PUT_EP_SAFE);
|
||||||
}
|
}
|
||||||
|
@ -1238,7 +1238,7 @@ static int act_establish(struct c4iw_dev *dev, struct sk_buff *skb)
|
||||||
set_emss(ep, tcp_opt);
|
set_emss(ep, tcp_opt);
|
||||||
|
|
||||||
/* dealloc the atid */
|
/* dealloc the atid */
|
||||||
remove_handle(ep->com.dev, &ep->com.dev->atid_idr, atid);
|
xa_erase_irq(&ep->com.dev->atids, atid);
|
||||||
cxgb4_free_atid(t, atid);
|
cxgb4_free_atid(t, atid);
|
||||||
set_bit(ACT_ESTAB, &ep->com.history);
|
set_bit(ACT_ESTAB, &ep->com.history);
|
||||||
|
|
||||||
|
@ -2187,7 +2187,9 @@ static int c4iw_reconnect(struct c4iw_ep *ep)
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto fail2;
|
goto fail2;
|
||||||
}
|
}
|
||||||
insert_handle(ep->com.dev, &ep->com.dev->atid_idr, ep, ep->atid);
|
err = xa_insert_irq(&ep->com.dev->atids, ep->atid, ep, GFP_KERNEL);
|
||||||
|
if (err)
|
||||||
|
goto fail2a;
|
||||||
|
|
||||||
/* find a route */
|
/* find a route */
|
||||||
if (ep->com.cm_id->m_local_addr.ss_family == AF_INET) {
|
if (ep->com.cm_id->m_local_addr.ss_family == AF_INET) {
|
||||||
|
@ -2239,7 +2241,8 @@ static int c4iw_reconnect(struct c4iw_ep *ep)
|
||||||
fail4:
|
fail4:
|
||||||
dst_release(ep->dst);
|
dst_release(ep->dst);
|
||||||
fail3:
|
fail3:
|
||||||
remove_handle(ep->com.dev, &ep->com.dev->atid_idr, ep->atid);
|
xa_erase_irq(&ep->com.dev->atids, ep->atid);
|
||||||
|
fail2a:
|
||||||
cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid);
|
cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid);
|
||||||
fail2:
|
fail2:
|
||||||
/*
|
/*
|
||||||
|
@ -2322,8 +2325,7 @@ static int act_open_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
|
||||||
(const u32 *)
|
(const u32 *)
|
||||||
&sin6->sin6_addr.s6_addr, 1);
|
&sin6->sin6_addr.s6_addr, 1);
|
||||||
}
|
}
|
||||||
remove_handle(ep->com.dev, &ep->com.dev->atid_idr,
|
xa_erase_irq(&ep->com.dev->atids, atid);
|
||||||
atid);
|
|
||||||
cxgb4_free_atid(t, atid);
|
cxgb4_free_atid(t, atid);
|
||||||
dst_release(ep->dst);
|
dst_release(ep->dst);
|
||||||
cxgb4_l2t_release(ep->l2t);
|
cxgb4_l2t_release(ep->l2t);
|
||||||
|
@ -2360,7 +2362,7 @@ fail:
|
||||||
cxgb4_remove_tid(ep->com.dev->rdev.lldi.tids, 0, GET_TID(rpl),
|
cxgb4_remove_tid(ep->com.dev->rdev.lldi.tids, 0, GET_TID(rpl),
|
||||||
ep->com.local_addr.ss_family);
|
ep->com.local_addr.ss_family);
|
||||||
|
|
||||||
remove_handle(ep->com.dev, &ep->com.dev->atid_idr, atid);
|
xa_erase_irq(&ep->com.dev->atids, atid);
|
||||||
cxgb4_free_atid(t, atid);
|
cxgb4_free_atid(t, atid);
|
||||||
dst_release(ep->dst);
|
dst_release(ep->dst);
|
||||||
cxgb4_l2t_release(ep->l2t);
|
cxgb4_l2t_release(ep->l2t);
|
||||||
|
@ -3345,7 +3347,9 @@ int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto fail2;
|
goto fail2;
|
||||||
}
|
}
|
||||||
insert_handle(dev, &dev->atid_idr, ep, ep->atid);
|
err = xa_insert_irq(&dev->atids, ep->atid, ep, GFP_KERNEL);
|
||||||
|
if (err)
|
||||||
|
goto fail5;
|
||||||
|
|
||||||
memcpy(&ep->com.local_addr, &cm_id->m_local_addr,
|
memcpy(&ep->com.local_addr, &cm_id->m_local_addr,
|
||||||
sizeof(ep->com.local_addr));
|
sizeof(ep->com.local_addr));
|
||||||
|
@ -3433,7 +3437,8 @@ int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
|
||||||
fail4:
|
fail4:
|
||||||
dst_release(ep->dst);
|
dst_release(ep->dst);
|
||||||
fail3:
|
fail3:
|
||||||
remove_handle(ep->com.dev, &ep->com.dev->atid_idr, ep->atid);
|
xa_erase_irq(&ep->com.dev->atids, ep->atid);
|
||||||
|
fail5:
|
||||||
cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid);
|
cxgb4_free_atid(ep->com.dev->rdev.lldi.tids, ep->atid);
|
||||||
fail2:
|
fail2:
|
||||||
skb_queue_purge(&ep->com.ep_skb_list);
|
skb_queue_purge(&ep->com.ep_skb_list);
|
||||||
|
@ -3766,7 +3771,7 @@ static void active_ofld_conn_reply(struct c4iw_dev *dev, struct sk_buff *skb,
|
||||||
cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
|
cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
|
||||||
(const u32 *)&sin6->sin6_addr.s6_addr, 1);
|
(const u32 *)&sin6->sin6_addr.s6_addr, 1);
|
||||||
}
|
}
|
||||||
remove_handle(dev, &dev->atid_idr, atid);
|
xa_erase_irq(&dev->atids, atid);
|
||||||
cxgb4_free_atid(dev->rdev.lldi.tids, atid);
|
cxgb4_free_atid(dev->rdev.lldi.tids, atid);
|
||||||
dst_release(ep->dst);
|
dst_release(ep->dst);
|
||||||
cxgb4_l2t_release(ep->l2t);
|
cxgb4_l2t_release(ep->l2t);
|
||||||
|
|
|
@ -617,11 +617,6 @@ static int dump_ep(struct c4iw_ep *ep, struct c4iw_debugfs_data *epd)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _dump_ep(int id, void *p, void *data)
|
|
||||||
{
|
|
||||||
return dump_ep(p, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int dump_listen_ep(int id, void *p, void *data)
|
static int dump_listen_ep(int id, void *p, void *data)
|
||||||
{
|
{
|
||||||
struct c4iw_listen_ep *ep = p;
|
struct c4iw_listen_ep *ep = p;
|
||||||
|
@ -695,8 +690,9 @@ static int ep_open(struct inode *inode, struct file *file)
|
||||||
|
|
||||||
xa_for_each(&epd->devp->hwtids, index, ep)
|
xa_for_each(&epd->devp->hwtids, index, ep)
|
||||||
count++;
|
count++;
|
||||||
|
xa_for_each(&epd->devp->atids, index, ep)
|
||||||
|
count++;
|
||||||
spin_lock_irq(&epd->devp->lock);
|
spin_lock_irq(&epd->devp->lock);
|
||||||
idr_for_each(&epd->devp->atid_idr, count_idrs, &count);
|
|
||||||
idr_for_each(&epd->devp->stid_idr, count_idrs, &count);
|
idr_for_each(&epd->devp->stid_idr, count_idrs, &count);
|
||||||
spin_unlock_irq(&epd->devp->lock);
|
spin_unlock_irq(&epd->devp->lock);
|
||||||
|
|
||||||
|
@ -711,8 +707,11 @@ static int ep_open(struct inode *inode, struct file *file)
|
||||||
xa_for_each(&epd->devp->hwtids, index, ep)
|
xa_for_each(&epd->devp->hwtids, index, ep)
|
||||||
dump_ep(ep, epd);
|
dump_ep(ep, epd);
|
||||||
xa_unlock_irq(&epd->devp->hwtids);
|
xa_unlock_irq(&epd->devp->hwtids);
|
||||||
|
xa_lock_irq(&epd->devp->atids);
|
||||||
|
xa_for_each(&epd->devp->atids, index, ep)
|
||||||
|
dump_ep(ep, epd);
|
||||||
|
xa_unlock_irq(&epd->devp->atids);
|
||||||
spin_lock_irq(&epd->devp->lock);
|
spin_lock_irq(&epd->devp->lock);
|
||||||
idr_for_each(&epd->devp->atid_idr, _dump_ep, epd);
|
|
||||||
idr_for_each(&epd->devp->stid_idr, dump_listen_ep, epd);
|
idr_for_each(&epd->devp->stid_idr, dump_listen_ep, epd);
|
||||||
spin_unlock_irq(&epd->devp->lock);
|
spin_unlock_irq(&epd->devp->lock);
|
||||||
|
|
||||||
|
@ -947,7 +946,7 @@ void c4iw_dealloc(struct uld_ctx *ctx)
|
||||||
WARN_ON(!xa_empty(&ctx->dev->mrs));
|
WARN_ON(!xa_empty(&ctx->dev->mrs));
|
||||||
wait_event(ctx->dev->wait, xa_empty(&ctx->dev->hwtids));
|
wait_event(ctx->dev->wait, xa_empty(&ctx->dev->hwtids));
|
||||||
idr_destroy(&ctx->dev->stid_idr);
|
idr_destroy(&ctx->dev->stid_idr);
|
||||||
idr_destroy(&ctx->dev->atid_idr);
|
WARN_ON(!xa_empty(&ctx->dev->atids));
|
||||||
if (ctx->dev->rdev.bar2_kva)
|
if (ctx->dev->rdev.bar2_kva)
|
||||||
iounmap(ctx->dev->rdev.bar2_kva);
|
iounmap(ctx->dev->rdev.bar2_kva);
|
||||||
if (ctx->dev->rdev.oc_mw_kva)
|
if (ctx->dev->rdev.oc_mw_kva)
|
||||||
|
@ -1055,8 +1054,8 @@ static struct c4iw_dev *c4iw_alloc(const struct cxgb4_lld_info *infop)
|
||||||
xa_init_flags(&devp->qps, XA_FLAGS_LOCK_IRQ);
|
xa_init_flags(&devp->qps, XA_FLAGS_LOCK_IRQ);
|
||||||
xa_init_flags(&devp->mrs, XA_FLAGS_LOCK_IRQ);
|
xa_init_flags(&devp->mrs, XA_FLAGS_LOCK_IRQ);
|
||||||
xa_init_flags(&devp->hwtids, XA_FLAGS_LOCK_IRQ);
|
xa_init_flags(&devp->hwtids, XA_FLAGS_LOCK_IRQ);
|
||||||
|
xa_init_flags(&devp->atids, XA_FLAGS_LOCK_IRQ);
|
||||||
idr_init(&devp->stid_idr);
|
idr_init(&devp->stid_idr);
|
||||||
idr_init(&devp->atid_idr);
|
|
||||||
spin_lock_init(&devp->lock);
|
spin_lock_init(&devp->lock);
|
||||||
mutex_init(&devp->rdev.stats.lock);
|
mutex_init(&devp->rdev.stats.lock);
|
||||||
mutex_init(&devp->db_mutex);
|
mutex_init(&devp->db_mutex);
|
||||||
|
|
|
@ -323,7 +323,7 @@ struct c4iw_dev {
|
||||||
struct dentry *debugfs_root;
|
struct dentry *debugfs_root;
|
||||||
enum db_state db_state;
|
enum db_state db_state;
|
||||||
struct xarray hwtids;
|
struct xarray hwtids;
|
||||||
struct idr atid_idr;
|
struct xarray atids;
|
||||||
struct idr stid_idr;
|
struct idr stid_idr;
|
||||||
struct list_head db_fc_list;
|
struct list_head db_fc_list;
|
||||||
u32 avail_ird;
|
u32 avail_ird;
|
||||||
|
|
Loading…
Reference in New Issue