mirror of
https://github.com/torvalds/linux.git
synced 2024-10-31 17:21:49 +00:00
[PATCH] IB/mthca: Move mthca_is_memfree checks
Make mthca_table_put() and mthca_table_put_range() NOPs if the device is not mem-free, so that we don't have to have "if (mthca_is_memfree())" tests in the callers of these functions. This makes our code more readable and maintainable, and saves a couple dozen bytes of text in ib_mthca.ko as well. Signed-off-by: Roland Dreier <roland@topspin.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
a852092e8c
commit
a03a5a67b2
@ -918,9 +918,9 @@ void mthca_free_cq(struct mthca_dev *dev,
|
|||||||
if (mthca_is_memfree(dev)) {
|
if (mthca_is_memfree(dev)) {
|
||||||
mthca_free_db(dev, MTHCA_DB_TYPE_CQ_ARM, cq->arm_db_index);
|
mthca_free_db(dev, MTHCA_DB_TYPE_CQ_ARM, cq->arm_db_index);
|
||||||
mthca_free_db(dev, MTHCA_DB_TYPE_CQ_SET_CI, cq->set_ci_db_index);
|
mthca_free_db(dev, MTHCA_DB_TYPE_CQ_SET_CI, cq->set_ci_db_index);
|
||||||
mthca_table_put(dev, dev->cq_table.table, cq->cqn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mthca_table_put(dev, dev->cq_table.table, cq->cqn);
|
||||||
mthca_free(&dev->cq_table.alloc, cq->cqn);
|
mthca_free(&dev->cq_table.alloc, cq->cqn);
|
||||||
kfree(mailbox);
|
kfree(mailbox);
|
||||||
}
|
}
|
||||||
|
@ -179,9 +179,14 @@ out:
|
|||||||
|
|
||||||
void mthca_table_put(struct mthca_dev *dev, struct mthca_icm_table *table, int obj)
|
void mthca_table_put(struct mthca_dev *dev, struct mthca_icm_table *table, int obj)
|
||||||
{
|
{
|
||||||
int i = (obj & (table->num_obj - 1)) * table->obj_size / MTHCA_TABLE_CHUNK_SIZE;
|
int i;
|
||||||
u8 status;
|
u8 status;
|
||||||
|
|
||||||
|
if (!mthca_is_memfree(dev))
|
||||||
|
return;
|
||||||
|
|
||||||
|
i = (obj & (table->num_obj - 1)) * table->obj_size / MTHCA_TABLE_CHUNK_SIZE;
|
||||||
|
|
||||||
down(&table->mutex);
|
down(&table->mutex);
|
||||||
|
|
||||||
if (--table->icm[i]->refcount == 0) {
|
if (--table->icm[i]->refcount == 0) {
|
||||||
@ -256,6 +261,9 @@ void mthca_table_put_range(struct mthca_dev *dev, struct mthca_icm_table *table,
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (!mthca_is_memfree(dev))
|
||||||
|
return;
|
||||||
|
|
||||||
for (i = start; i <= end; i += MTHCA_TABLE_CHUNK_SIZE / table->obj_size)
|
for (i = start; i <= end; i += MTHCA_TABLE_CHUNK_SIZE / table->obj_size)
|
||||||
mthca_table_put(dev, table, i);
|
mthca_table_put(dev, table, i);
|
||||||
}
|
}
|
||||||
|
@ -195,10 +195,8 @@ static void mthca_free_mtt(struct mthca_dev *dev, u32 seg, int order,
|
|||||||
struct mthca_buddy* buddy)
|
struct mthca_buddy* buddy)
|
||||||
{
|
{
|
||||||
mthca_buddy_free(buddy, seg, order);
|
mthca_buddy_free(buddy, seg, order);
|
||||||
|
mthca_table_put_range(dev, dev->mr_table.mtt_table, seg,
|
||||||
if (mthca_is_memfree(dev))
|
seg + (1 << order) - 1);
|
||||||
mthca_table_put_range(dev, dev->mr_table.mtt_table, seg,
|
|
||||||
seg + (1 << order) - 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u32 tavor_hw_index_to_key(u32 ind)
|
static inline u32 tavor_hw_index_to_key(u32 ind)
|
||||||
@ -299,8 +297,7 @@ int mthca_mr_alloc_notrans(struct mthca_dev *dev, u32 pd,
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
err_out_table:
|
err_out_table:
|
||||||
if (mthca_is_memfree(dev))
|
mthca_table_put(dev, dev->mr_table.mpt_table, key);
|
||||||
mthca_table_put(dev, dev->mr_table.mpt_table, key);
|
|
||||||
|
|
||||||
err_out_mpt_free:
|
err_out_mpt_free:
|
||||||
mthca_free(&dev->mr_table.mpt_alloc, key);
|
mthca_free(&dev->mr_table.mpt_alloc, key);
|
||||||
@ -437,8 +434,7 @@ err_out_free_mtt:
|
|||||||
mthca_free_mtt(dev, mr->first_seg, mr->order, &dev->mr_table.mtt_buddy);
|
mthca_free_mtt(dev, mr->first_seg, mr->order, &dev->mr_table.mtt_buddy);
|
||||||
|
|
||||||
err_out_table:
|
err_out_table:
|
||||||
if (mthca_is_memfree(dev))
|
mthca_table_put(dev, dev->mr_table.mpt_table, key);
|
||||||
mthca_table_put(dev, dev->mr_table.mpt_table, key);
|
|
||||||
|
|
||||||
err_out_mpt_free:
|
err_out_mpt_free:
|
||||||
mthca_free(&dev->mr_table.mpt_alloc, key);
|
mthca_free(&dev->mr_table.mpt_alloc, key);
|
||||||
@ -452,9 +448,8 @@ static void mthca_free_region(struct mthca_dev *dev, u32 lkey, int order,
|
|||||||
if (order >= 0)
|
if (order >= 0)
|
||||||
mthca_free_mtt(dev, first_seg, order, buddy);
|
mthca_free_mtt(dev, first_seg, order, buddy);
|
||||||
|
|
||||||
if (mthca_is_memfree(dev))
|
mthca_table_put(dev, dev->mr_table.mpt_table,
|
||||||
mthca_table_put(dev, dev->mr_table.mpt_table,
|
arbel_key_to_hw_index(lkey));
|
||||||
arbel_key_to_hw_index(lkey));
|
|
||||||
|
|
||||||
mthca_free(&dev->mr_table.mpt_alloc, key_to_hw_index(dev, lkey));
|
mthca_free(&dev->mr_table.mpt_alloc, key_to_hw_index(dev, lkey));
|
||||||
}
|
}
|
||||||
@ -596,8 +591,7 @@ err_out_free_mtt:
|
|||||||
dev->mr_table.fmr_mtt_buddy);
|
dev->mr_table.fmr_mtt_buddy);
|
||||||
|
|
||||||
err_out_table:
|
err_out_table:
|
||||||
if (mthca_is_memfree(dev))
|
mthca_table_put(dev, dev->mr_table.mpt_table, key);
|
||||||
mthca_table_put(dev, dev->mr_table.mpt_table, key);
|
|
||||||
|
|
||||||
err_out_mpt_free:
|
err_out_mpt_free:
|
||||||
mthca_free(&dev->mr_table.mpt_alloc, mr->ibmr.lkey);
|
mthca_free(&dev->mr_table.mpt_alloc, mr->ibmr.lkey);
|
||||||
|
@ -1111,11 +1111,12 @@ static void mthca_free_memfree(struct mthca_dev *dev,
|
|||||||
if (mthca_is_memfree(dev)) {
|
if (mthca_is_memfree(dev)) {
|
||||||
mthca_free_db(dev, MTHCA_DB_TYPE_SQ, qp->sq.db_index);
|
mthca_free_db(dev, MTHCA_DB_TYPE_SQ, qp->sq.db_index);
|
||||||
mthca_free_db(dev, MTHCA_DB_TYPE_RQ, qp->rq.db_index);
|
mthca_free_db(dev, MTHCA_DB_TYPE_RQ, qp->rq.db_index);
|
||||||
mthca_table_put(dev, dev->qp_table.rdb_table,
|
|
||||||
qp->qpn << dev->qp_table.rdb_shift);
|
|
||||||
mthca_table_put(dev, dev->qp_table.eqp_table, qp->qpn);
|
|
||||||
mthca_table_put(dev, dev->qp_table.qp_table, qp->qpn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mthca_table_put(dev, dev->qp_table.rdb_table,
|
||||||
|
qp->qpn << dev->qp_table.rdb_shift);
|
||||||
|
mthca_table_put(dev, dev->qp_table.eqp_table, qp->qpn);
|
||||||
|
mthca_table_put(dev, dev->qp_table.qp_table, qp->qpn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mthca_wq_init(struct mthca_wq* wq)
|
static void mthca_wq_init(struct mthca_wq* wq)
|
||||||
|
Loading…
Reference in New Issue
Block a user