Commit d10ddbf6 authored by Roland Dreier's avatar Roland Dreier Committed by Linus Torvalds

[PATCH] IB/mthca: encapsulate mem-free check into mthca_is_memfree()

Clean up mem-free mode support by introducing mthca_is_memfree() function,
which encapsulates the logic of deciding if a device is mem-free.
Signed-off-by: default avatarRoland Dreier <roland@topspin.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 6bd6228e
...@@ -62,7 +62,7 @@ int mthca_create_ah(struct mthca_dev *dev, ...@@ -62,7 +62,7 @@ int mthca_create_ah(struct mthca_dev *dev,
ah->type = MTHCA_AH_PCI_POOL; ah->type = MTHCA_AH_PCI_POOL;
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
ah->av = kmalloc(sizeof *ah->av, GFP_ATOMIC); ah->av = kmalloc(sizeof *ah->av, GFP_ATOMIC);
if (!ah->av) if (!ah->av)
return -ENOMEM; return -ENOMEM;
...@@ -192,7 +192,7 @@ int __devinit mthca_init_av_table(struct mthca_dev *dev) ...@@ -192,7 +192,7 @@ int __devinit mthca_init_av_table(struct mthca_dev *dev)
{ {
int err; int err;
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
return 0; return 0;
err = mthca_alloc_init(&dev->av_table.alloc, err = mthca_alloc_init(&dev->av_table.alloc,
...@@ -231,7 +231,7 @@ int __devinit mthca_init_av_table(struct mthca_dev *dev) ...@@ -231,7 +231,7 @@ int __devinit mthca_init_av_table(struct mthca_dev *dev)
void __devexit mthca_cleanup_av_table(struct mthca_dev *dev) void __devexit mthca_cleanup_av_table(struct mthca_dev *dev)
{ {
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
return; return;
if (dev->av_table.av_map) if (dev->av_table.av_map)
......
...@@ -651,7 +651,7 @@ int mthca_QUERY_FW(struct mthca_dev *dev, u8 *status) ...@@ -651,7 +651,7 @@ int mthca_QUERY_FW(struct mthca_dev *dev, u8 *status)
mthca_dbg(dev, "FW version %012llx, max commands %d\n", mthca_dbg(dev, "FW version %012llx, max commands %d\n",
(unsigned long long) dev->fw_ver, dev->cmd.max_cmds); (unsigned long long) dev->fw_ver, dev->cmd.max_cmds);
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
MTHCA_GET(dev->fw.arbel.fw_pages, outbox, QUERY_FW_SIZE_OFFSET); MTHCA_GET(dev->fw.arbel.fw_pages, outbox, QUERY_FW_SIZE_OFFSET);
MTHCA_GET(dev->fw.arbel.clr_int_base, outbox, QUERY_FW_CLR_INT_BASE_OFFSET); MTHCA_GET(dev->fw.arbel.clr_int_base, outbox, QUERY_FW_CLR_INT_BASE_OFFSET);
MTHCA_GET(dev->fw.arbel.eq_arm_base, outbox, QUERY_FW_EQ_ARM_BASE_OFFSET); MTHCA_GET(dev->fw.arbel.eq_arm_base, outbox, QUERY_FW_EQ_ARM_BASE_OFFSET);
...@@ -984,7 +984,7 @@ int mthca_QUERY_DEV_LIM(struct mthca_dev *dev, ...@@ -984,7 +984,7 @@ int mthca_QUERY_DEV_LIM(struct mthca_dev *dev,
mthca_dbg(dev, "Flags: %08x\n", dev_lim->flags); mthca_dbg(dev, "Flags: %08x\n", dev_lim->flags);
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
MTHCA_GET(field, outbox, QUERY_DEV_LIM_RSZ_SRQ_OFFSET); MTHCA_GET(field, outbox, QUERY_DEV_LIM_RSZ_SRQ_OFFSET);
dev_lim->hca.arbel.resize_srq = field & 1; dev_lim->hca.arbel.resize_srq = field & 1;
MTHCA_GET(field, outbox, QUERY_DEV_LIM_MAX_SG_RQ_OFFSET); MTHCA_GET(field, outbox, QUERY_DEV_LIM_MAX_SG_RQ_OFFSET);
...@@ -1148,7 +1148,7 @@ int mthca_INIT_HCA(struct mthca_dev *dev, ...@@ -1148,7 +1148,7 @@ int mthca_INIT_HCA(struct mthca_dev *dev,
/* TPT attributes */ /* TPT attributes */
MTHCA_PUT(inbox, param->mpt_base, INIT_HCA_MPT_BASE_OFFSET); MTHCA_PUT(inbox, param->mpt_base, INIT_HCA_MPT_BASE_OFFSET);
if (dev->hca_type != ARBEL_NATIVE) if (!mthca_is_memfree(dev))
MTHCA_PUT(inbox, param->mtt_seg_sz, INIT_HCA_MTT_SEG_SZ_OFFSET); MTHCA_PUT(inbox, param->mtt_seg_sz, INIT_HCA_MTT_SEG_SZ_OFFSET);
MTHCA_PUT(inbox, param->log_mpt_sz, INIT_HCA_LOG_MPT_SZ_OFFSET); MTHCA_PUT(inbox, param->log_mpt_sz, INIT_HCA_LOG_MPT_SZ_OFFSET);
MTHCA_PUT(inbox, param->mtt_base, INIT_HCA_MTT_BASE_OFFSET); MTHCA_PUT(inbox, param->mtt_base, INIT_HCA_MTT_BASE_OFFSET);
...@@ -1161,7 +1161,7 @@ int mthca_INIT_HCA(struct mthca_dev *dev, ...@@ -1161,7 +1161,7 @@ int mthca_INIT_HCA(struct mthca_dev *dev,
MTHCA_PUT(inbox, param->uar_scratch_base, INIT_HCA_UAR_SCATCH_BASE_OFFSET); MTHCA_PUT(inbox, param->uar_scratch_base, INIT_HCA_UAR_SCATCH_BASE_OFFSET);
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
MTHCA_PUT(inbox, param->log_uarc_sz, INIT_HCA_UARC_SZ_OFFSET); MTHCA_PUT(inbox, param->log_uarc_sz, INIT_HCA_UARC_SZ_OFFSET);
MTHCA_PUT(inbox, param->log_uar_sz, INIT_HCA_LOG_UAR_SZ_OFFSET); MTHCA_PUT(inbox, param->log_uar_sz, INIT_HCA_LOG_UAR_SZ_OFFSET);
MTHCA_PUT(inbox, param->uarc_base, INIT_HCA_UAR_CTX_BASE_OFFSET); MTHCA_PUT(inbox, param->uarc_base, INIT_HCA_UAR_CTX_BASE_OFFSET);
......
...@@ -180,7 +180,7 @@ static inline void update_cons_index(struct mthca_dev *dev, struct mthca_cq *cq, ...@@ -180,7 +180,7 @@ static inline void update_cons_index(struct mthca_dev *dev, struct mthca_cq *cq,
{ {
u32 doorbell[2]; u32 doorbell[2];
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
*cq->set_ci_db = cpu_to_be32(cq->cons_index); *cq->set_ci_db = cpu_to_be32(cq->cons_index);
wmb(); wmb();
} else { } else {
...@@ -760,7 +760,7 @@ int mthca_init_cq(struct mthca_dev *dev, int nent, ...@@ -760,7 +760,7 @@ int mthca_init_cq(struct mthca_dev *dev, int nent,
if (cq->cqn == -1) if (cq->cqn == -1)
return -ENOMEM; return -ENOMEM;
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
cq->arm_sn = 1; cq->arm_sn = 1;
err = mthca_table_get(dev, dev->cq_table.table, cq->cqn); err = mthca_table_get(dev, dev->cq_table.table, cq->cqn);
...@@ -811,7 +811,7 @@ int mthca_init_cq(struct mthca_dev *dev, int nent, ...@@ -811,7 +811,7 @@ int mthca_init_cq(struct mthca_dev *dev, int nent,
cq_context->lkey = cpu_to_be32(cq->mr.ibmr.lkey); cq_context->lkey = cpu_to_be32(cq->mr.ibmr.lkey);
cq_context->cqn = cpu_to_be32(cq->cqn); cq_context->cqn = cpu_to_be32(cq->cqn);
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
cq_context->ci_db = cpu_to_be32(cq->set_ci_db_index); cq_context->ci_db = cpu_to_be32(cq->set_ci_db_index);
cq_context->state_db = cpu_to_be32(cq->arm_db_index); cq_context->state_db = cpu_to_be32(cq->arm_db_index);
} }
...@@ -851,11 +851,11 @@ int mthca_init_cq(struct mthca_dev *dev, int nent, ...@@ -851,11 +851,11 @@ int mthca_init_cq(struct mthca_dev *dev, int nent,
err_out_mailbox: err_out_mailbox:
kfree(mailbox); kfree(mailbox);
if (dev->hca_type == ARBEL_NATIVE) 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);
err_out_ci: err_out_ci:
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
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);
err_out_icm: err_out_icm:
...@@ -916,7 +916,7 @@ void mthca_free_cq(struct mthca_dev *dev, ...@@ -916,7 +916,7 @@ void mthca_free_cq(struct mthca_dev *dev,
mthca_free_mr(dev, &cq->mr); mthca_free_mr(dev, &cq->mr);
mthca_free_cq_buf(dev, cq); mthca_free_cq_buf(dev, cq);
if (dev->hca_type == ARBEL_NATIVE) { 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);
......
...@@ -470,4 +470,9 @@ static inline struct mthca_dev *to_mdev(struct ib_device *ibdev) ...@@ -470,4 +470,9 @@ static inline struct mthca_dev *to_mdev(struct ib_device *ibdev)
return container_of(ibdev, struct mthca_dev, ib_dev); return container_of(ibdev, struct mthca_dev, ib_dev);
} }
static inline int mthca_is_memfree(struct mthca_dev *dev)
{
return dev->hca_type == ARBEL_NATIVE;
}
#endif /* MTHCA_DEV_H */ #endif /* MTHCA_DEV_H */
...@@ -198,7 +198,7 @@ static inline void arbel_set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u ...@@ -198,7 +198,7 @@ static inline void arbel_set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u
static inline void set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u32 ci) static inline void set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u32 ci)
{ {
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
arbel_set_eq_ci(dev, eq, ci); arbel_set_eq_ci(dev, eq, ci);
else else
tavor_set_eq_ci(dev, eq, ci); tavor_set_eq_ci(dev, eq, ci);
...@@ -223,7 +223,7 @@ static inline void arbel_eq_req_not(struct mthca_dev *dev, u32 eqn_mask) ...@@ -223,7 +223,7 @@ static inline void arbel_eq_req_not(struct mthca_dev *dev, u32 eqn_mask)
static inline void disarm_cq(struct mthca_dev *dev, int eqn, int cqn) static inline void disarm_cq(struct mthca_dev *dev, int eqn, int cqn)
{ {
if (dev->hca_type != ARBEL_NATIVE) { if (!mthca_is_memfree(dev)) {
u32 doorbell[2]; u32 doorbell[2];
doorbell[0] = cpu_to_be32(MTHCA_EQ_DB_DISARM_CQ | eqn); doorbell[0] = cpu_to_be32(MTHCA_EQ_DB_DISARM_CQ | eqn);
...@@ -535,11 +535,11 @@ static int __devinit mthca_create_eq(struct mthca_dev *dev, ...@@ -535,11 +535,11 @@ static int __devinit mthca_create_eq(struct mthca_dev *dev,
MTHCA_EQ_OWNER_HW | MTHCA_EQ_OWNER_HW |
MTHCA_EQ_STATE_ARMED | MTHCA_EQ_STATE_ARMED |
MTHCA_EQ_FLAG_TR); MTHCA_EQ_FLAG_TR);
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
eq_context->flags |= cpu_to_be32(MTHCA_EQ_STATE_ARBEL); eq_context->flags |= cpu_to_be32(MTHCA_EQ_STATE_ARBEL);
eq_context->logsize_usrpage = cpu_to_be32((ffs(nent) - 1) << 24); eq_context->logsize_usrpage = cpu_to_be32((ffs(nent) - 1) << 24);
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
eq_context->arbel_pd = cpu_to_be32(dev->driver_pd.pd_num); eq_context->arbel_pd = cpu_to_be32(dev->driver_pd.pd_num);
} else { } else {
eq_context->logsize_usrpage |= cpu_to_be32(dev->driver_uar.index); eq_context->logsize_usrpage |= cpu_to_be32(dev->driver_uar.index);
...@@ -686,7 +686,7 @@ static int __devinit mthca_map_eq_regs(struct mthca_dev *dev) ...@@ -686,7 +686,7 @@ static int __devinit mthca_map_eq_regs(struct mthca_dev *dev)
mthca_base = pci_resource_start(dev->pdev, 0); mthca_base = pci_resource_start(dev->pdev, 0);
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
/* /*
* We assume that the EQ arm and EQ set CI registers * We assume that the EQ arm and EQ set CI registers
* fall within the first BAR. We can't trust the * fall within the first BAR. We can't trust the
...@@ -756,7 +756,7 @@ static int __devinit mthca_map_eq_regs(struct mthca_dev *dev) ...@@ -756,7 +756,7 @@ static int __devinit mthca_map_eq_regs(struct mthca_dev *dev)
static void __devexit mthca_unmap_eq_regs(struct mthca_dev *dev) static void __devexit mthca_unmap_eq_regs(struct mthca_dev *dev)
{ {
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
mthca_unmap_reg(dev, (pci_resource_len(dev->pdev, 0) - 1) & mthca_unmap_reg(dev, (pci_resource_len(dev->pdev, 0) - 1) &
dev->fw.arbel.eq_set_ci_base, dev->fw.arbel.eq_set_ci_base,
MTHCA_EQ_SET_CI_SIZE, MTHCA_EQ_SET_CI_SIZE,
...@@ -880,7 +880,7 @@ int __devinit mthca_init_eq_table(struct mthca_dev *dev) ...@@ -880,7 +880,7 @@ int __devinit mthca_init_eq_table(struct mthca_dev *dev)
for (i = 0; i < MTHCA_NUM_EQ; ++i) { for (i = 0; i < MTHCA_NUM_EQ; ++i) {
err = request_irq(dev->eq_table.eq[i].msi_x_vector, err = request_irq(dev->eq_table.eq[i].msi_x_vector,
dev->hca_type == ARBEL_NATIVE ? mthca_is_memfree(dev) ?
mthca_arbel_msi_x_interrupt : mthca_arbel_msi_x_interrupt :
mthca_tavor_msi_x_interrupt, mthca_tavor_msi_x_interrupt,
0, eq_name[i], dev->eq_table.eq + i); 0, eq_name[i], dev->eq_table.eq + i);
...@@ -890,7 +890,7 @@ int __devinit mthca_init_eq_table(struct mthca_dev *dev) ...@@ -890,7 +890,7 @@ int __devinit mthca_init_eq_table(struct mthca_dev *dev)
} }
} else { } else {
err = request_irq(dev->pdev->irq, err = request_irq(dev->pdev->irq,
dev->hca_type == ARBEL_NATIVE ? mthca_is_memfree(dev) ?
mthca_arbel_interrupt : mthca_arbel_interrupt :
mthca_tavor_interrupt, mthca_tavor_interrupt,
SA_SHIRQ, DRV_NAME, dev); SA_SHIRQ, DRV_NAME, dev);
...@@ -918,7 +918,7 @@ int __devinit mthca_init_eq_table(struct mthca_dev *dev) ...@@ -918,7 +918,7 @@ int __devinit mthca_init_eq_table(struct mthca_dev *dev)
dev->eq_table.eq[MTHCA_EQ_CMD].eqn, status); dev->eq_table.eq[MTHCA_EQ_CMD].eqn, status);
for (i = 0; i < MTHCA_EQ_CMD; ++i) for (i = 0; i < MTHCA_EQ_CMD; ++i)
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
arbel_eq_req_not(dev, dev->eq_table.eq[i].eqn_mask); arbel_eq_req_not(dev, dev->eq_table.eq[i].eqn_mask);
else else
tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn); tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn);
......
...@@ -601,7 +601,7 @@ static int __devinit mthca_init_arbel(struct mthca_dev *mdev) ...@@ -601,7 +601,7 @@ static int __devinit mthca_init_arbel(struct mthca_dev *mdev)
static int __devinit mthca_init_hca(struct mthca_dev *mdev) static int __devinit mthca_init_hca(struct mthca_dev *mdev)
{ {
if (mdev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(mdev))
return mthca_init_arbel(mdev); return mthca_init_arbel(mdev);
else else
return mthca_init_tavor(mdev); return mthca_init_tavor(mdev);
...@@ -835,7 +835,7 @@ static void mthca_close_hca(struct mthca_dev *mdev) ...@@ -835,7 +835,7 @@ static void mthca_close_hca(struct mthca_dev *mdev)
mthca_CLOSE_HCA(mdev, 0, &status); mthca_CLOSE_HCA(mdev, 0, &status);
if (mdev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(mdev)) {
mthca_free_icm_table(mdev, mdev->cq_table.table); mthca_free_icm_table(mdev, mdev->cq_table.table);
mthca_free_icm_table(mdev, mdev->qp_table.eqp_table); mthca_free_icm_table(mdev, mdev->qp_table.eqp_table);
mthca_free_icm_table(mdev, mdev->qp_table.qp_table); mthca_free_icm_table(mdev, mdev->qp_table.qp_table);
...@@ -939,7 +939,7 @@ static int __devinit mthca_init_one(struct pci_dev *pdev, ...@@ -939,7 +939,7 @@ static int __devinit mthca_init_one(struct pci_dev *pdev,
mdev->pdev = pdev; mdev->pdev = pdev;
mdev->hca_type = id->driver_data; mdev->hca_type = id->driver_data;
if (mdev->hca_type == ARBEL_NATIVE && !mthca_memfree_warned++) if (mthca_is_memfree(mdev) && !mthca_memfree_warned++)
mthca_warn(mdev, "Warning: native MT25208 mode support is incomplete. " mthca_warn(mdev, "Warning: native MT25208 mode support is incomplete. "
"Your HCA may not work properly.\n"); "Your HCA may not work properly.\n");
......
...@@ -472,7 +472,7 @@ int mthca_init_db_tab(struct mthca_dev *dev) ...@@ -472,7 +472,7 @@ int mthca_init_db_tab(struct mthca_dev *dev)
{ {
int i; int i;
if (dev->hca_type != ARBEL_NATIVE) if (!mthca_is_memfree(dev))
return 0; return 0;
dev->db_tab = kmalloc(sizeof *dev->db_tab, GFP_KERNEL); dev->db_tab = kmalloc(sizeof *dev->db_tab, GFP_KERNEL);
...@@ -504,7 +504,7 @@ void mthca_cleanup_db_tab(struct mthca_dev *dev) ...@@ -504,7 +504,7 @@ void mthca_cleanup_db_tab(struct mthca_dev *dev)
int i; int i;
u8 status; u8 status;
if (dev->hca_type != ARBEL_NATIVE) if (!mthca_is_memfree(dev))
return; return;
/* /*
......
...@@ -181,7 +181,7 @@ static u32 mthca_alloc_mtt(struct mthca_dev *dev, int order, ...@@ -181,7 +181,7 @@ static u32 mthca_alloc_mtt(struct mthca_dev *dev, int order,
if (seg == -1) if (seg == -1)
return -1; return -1;
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
if (mthca_table_get_range(dev, dev->mr_table.mtt_table, seg, if (mthca_table_get_range(dev, dev->mr_table.mtt_table, seg,
seg + (1 << order) - 1)) { seg + (1 << order) - 1)) {
mthca_buddy_free(buddy, seg, order); mthca_buddy_free(buddy, seg, order);
...@@ -196,7 +196,7 @@ static void mthca_free_mtt(struct mthca_dev *dev, u32 seg, int order, ...@@ -196,7 +196,7 @@ static void mthca_free_mtt(struct mthca_dev *dev, u32 seg, int order,
{ {
mthca_buddy_free(buddy, seg, order); mthca_buddy_free(buddy, seg, order);
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
mthca_table_put_range(dev, dev->mr_table.mtt_table, seg, mthca_table_put_range(dev, dev->mr_table.mtt_table, seg,
seg + (1 << order) - 1); seg + (1 << order) - 1);
} }
...@@ -223,7 +223,7 @@ static inline u32 arbel_key_to_hw_index(u32 key) ...@@ -223,7 +223,7 @@ static inline u32 arbel_key_to_hw_index(u32 key)
static inline u32 hw_index_to_key(struct mthca_dev *dev, u32 ind) static inline u32 hw_index_to_key(struct mthca_dev *dev, u32 ind)
{ {
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
return arbel_hw_index_to_key(ind); return arbel_hw_index_to_key(ind);
else else
return tavor_hw_index_to_key(ind); return tavor_hw_index_to_key(ind);
...@@ -231,7 +231,7 @@ static inline u32 hw_index_to_key(struct mthca_dev *dev, u32 ind) ...@@ -231,7 +231,7 @@ static inline u32 hw_index_to_key(struct mthca_dev *dev, u32 ind)
static inline u32 key_to_hw_index(struct mthca_dev *dev, u32 key) static inline u32 key_to_hw_index(struct mthca_dev *dev, u32 key)
{ {
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
return arbel_key_to_hw_index(key); return arbel_key_to_hw_index(key);
else else
return tavor_key_to_hw_index(key); return tavor_key_to_hw_index(key);
...@@ -254,7 +254,7 @@ int mthca_mr_alloc_notrans(struct mthca_dev *dev, u32 pd, ...@@ -254,7 +254,7 @@ int mthca_mr_alloc_notrans(struct mthca_dev *dev, u32 pd,
return -ENOMEM; return -ENOMEM;
mr->ibmr.rkey = mr->ibmr.lkey = hw_index_to_key(dev, key); mr->ibmr.rkey = mr->ibmr.lkey = hw_index_to_key(dev, key);
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
err = mthca_table_get(dev, dev->mr_table.mpt_table, key); err = mthca_table_get(dev, dev->mr_table.mpt_table, key);
if (err) if (err)
goto err_out_mpt_free; goto err_out_mpt_free;
...@@ -299,7 +299,7 @@ int mthca_mr_alloc_notrans(struct mthca_dev *dev, u32 pd, ...@@ -299,7 +299,7 @@ int mthca_mr_alloc_notrans(struct mthca_dev *dev, u32 pd,
return err; return err;
err_out_table: err_out_table:
if (dev->hca_type == ARBEL_NATIVE) 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:
...@@ -329,7 +329,7 @@ int mthca_mr_alloc_phys(struct mthca_dev *dev, u32 pd, ...@@ -329,7 +329,7 @@ int mthca_mr_alloc_phys(struct mthca_dev *dev, u32 pd,
return -ENOMEM; return -ENOMEM;
mr->ibmr.rkey = mr->ibmr.lkey = hw_index_to_key(dev, key); mr->ibmr.rkey = mr->ibmr.lkey = hw_index_to_key(dev, key);
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
err = mthca_table_get(dev, dev->mr_table.mpt_table, key); err = mthca_table_get(dev, dev->mr_table.mpt_table, key);
if (err) if (err)
goto err_out_mpt_free; goto err_out_mpt_free;
...@@ -437,7 +437,7 @@ int mthca_mr_alloc_phys(struct mthca_dev *dev, u32 pd, ...@@ -437,7 +437,7 @@ int mthca_mr_alloc_phys(struct mthca_dev *dev, u32 pd,
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 (dev->hca_type == ARBEL_NATIVE) 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:
...@@ -452,7 +452,7 @@ static void mthca_free_region(struct mthca_dev *dev, u32 lkey, int order, ...@@ -452,7 +452,7 @@ 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 (dev->hca_type == ARBEL_NATIVE) 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));
...@@ -498,7 +498,7 @@ int mthca_fmr_alloc(struct mthca_dev *dev, u32 pd, ...@@ -498,7 +498,7 @@ int mthca_fmr_alloc(struct mthca_dev *dev, u32 pd,
return -EINVAL; return -EINVAL;
/* For Arbel, all MTTs must fit in the same page. */ /* For Arbel, all MTTs must fit in the same page. */
if (dev->hca_type == ARBEL_NATIVE && if (mthca_is_memfree(dev) &&
mr->attr.max_pages * sizeof *mr->mem.arbel.mtts > PAGE_SIZE) mr->attr.max_pages * sizeof *mr->mem.arbel.mtts > PAGE_SIZE)
return -EINVAL; return -EINVAL;
...@@ -511,7 +511,7 @@ int mthca_fmr_alloc(struct mthca_dev *dev, u32 pd, ...@@ -511,7 +511,7 @@ int mthca_fmr_alloc(struct mthca_dev *dev, u32 pd,
idx = key & (dev->limits.num_mpts - 1); idx = key & (dev->limits.num_mpts - 1);
mr->ibmr.rkey = mr->ibmr.lkey = hw_index_to_key(dev, key); mr->ibmr.rkey = mr->ibmr.lkey = hw_index_to_key(dev, key);
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
err = mthca_table_get(dev, dev->mr_table.mpt_table, key); err = mthca_table_get(dev, dev->mr_table.mpt_table, key);
if (err) if (err)
goto err_out_mpt_free; goto err_out_mpt_free;
...@@ -534,7 +534,7 @@ int mthca_fmr_alloc(struct mthca_dev *dev, u32 pd, ...@@ -534,7 +534,7 @@ int mthca_fmr_alloc(struct mthca_dev *dev, u32 pd,
mtt_seg = mr->first_seg * MTHCA_MTT_SEG_SIZE; mtt_seg = mr->first_seg * MTHCA_MTT_SEG_SIZE;
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
mr->mem.arbel.mtts = mthca_table_find(dev->mr_table.mtt_table, mr->mem.arbel.mtts = mthca_table_find(dev->mr_table.mtt_table,
mr->first_seg); mr->first_seg);
BUG_ON(!mr->mem.arbel.mtts); BUG_ON(!mr->mem.arbel.mtts);
...@@ -596,7 +596,7 @@ int mthca_fmr_alloc(struct mthca_dev *dev, u32 pd, ...@@ -596,7 +596,7 @@ int mthca_fmr_alloc(struct mthca_dev *dev, u32 pd,
dev->mr_table.fmr_mtt_buddy); dev->mr_table.fmr_mtt_buddy);
err_out_table: err_out_table:
if (dev->hca_type == ARBEL_NATIVE) 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:
...@@ -765,7 +765,7 @@ int __devinit mthca_init_mr_table(struct mthca_dev *dev) ...@@ -765,7 +765,7 @@ int __devinit mthca_init_mr_table(struct mthca_dev *dev)
if (err) if (err)
return err; return err;
if (dev->hca_type != ARBEL_NATIVE && if (!mthca_is_memfree(dev) &&
(dev->mthca_flags & MTHCA_FLAG_DDR_HIDDEN)) (dev->mthca_flags & MTHCA_FLAG_DDR_HIDDEN))
dev->limits.fmr_reserved_mtts = 0; dev->limits.fmr_reserved_mtts = 0;
else else
......
...@@ -116,11 +116,11 @@ u64 mthca_make_profile(struct mthca_dev *dev, ...@@ -116,11 +116,11 @@ u64 mthca_make_profile(struct mthca_dev *dev,
profile[i].type = i; profile[i].type = i;
profile[i].log_num = max(ffs(profile[i].num) - 1, 0); profile[i].log_num = max(ffs(profile[i].num) - 1, 0);
profile[i].size *= profile[i].num; profile[i].size *= profile[i].num;
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
profile[i].size = max(profile[i].size, (u64) PAGE_SIZE); profile[i].size = max(profile[i].size, (u64) PAGE_SIZE);
} }
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
mem_base = 0; mem_base = 0;
mem_avail = dev_lim->hca.arbel.max_icm_sz; mem_avail = dev_lim->hca.arbel.max_icm_sz;
} else { } else {
...@@ -165,7 +165,7 @@ u64 mthca_make_profile(struct mthca_dev *dev, ...@@ -165,7 +165,7 @@ u64 mthca_make_profile(struct mthca_dev *dev,
(unsigned long long) profile[i].size); (unsigned long long) profile[i].size);
} }
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
mthca_dbg(dev, "HCA context memory: reserving %d KB\n", mthca_dbg(dev, "HCA context memory: reserving %d KB\n",
(int) (total_size >> 10)); (int) (total_size >> 10));
else else
...@@ -267,7 +267,7 @@ u64 mthca_make_profile(struct mthca_dev *dev, ...@@ -267,7 +267,7 @@ u64 mthca_make_profile(struct mthca_dev *dev,
* out of the MR pool. They don't use additional memory, but * out of the MR pool. They don't use additional memory, but
* we assign them as part of the HCA profile anyway. * we assign them as part of the HCA profile anyway.
*/ */
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
dev->limits.fmr_reserved_mtts = 0; dev->limits.fmr_reserved_mtts = 0;
else else
dev->limits.fmr_reserved_mtts = request->fmr_reserved_mtts; dev->limits.fmr_reserved_mtts = request->fmr_reserved_mtts;
......
...@@ -625,7 +625,7 @@ static int mthca_unmap_fmr(struct list_head *fmr_list) ...@@ -625,7 +625,7 @@ static int mthca_unmap_fmr(struct list_head *fmr_list)
if (!mdev) if (!mdev)
return 0; return 0;
if (mdev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(mdev)) {
list_for_each_entry(fmr, fmr_list, list) list_for_each_entry(fmr, fmr_list, list)
mthca_arbel_fmr_unmap(mdev, to_mfmr(fmr)); mthca_arbel_fmr_unmap(mdev, to_mfmr(fmr));
...@@ -710,7 +710,7 @@ int mthca_register_device(struct mthca_dev *dev) ...@@ -710,7 +710,7 @@ int mthca_register_device(struct mthca_dev *dev)
dev->ib_dev.alloc_fmr = mthca_alloc_fmr; dev->ib_dev.alloc_fmr = mthca_alloc_fmr;
dev->ib_dev.unmap_fmr = mthca_unmap_fmr; dev->ib_dev.unmap_fmr = mthca_unmap_fmr;
dev->ib_dev.dealloc_fmr = mthca_dealloc_fmr; dev->ib_dev.dealloc_fmr = mthca_dealloc_fmr;
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
dev->ib_dev.map_phys_fmr = mthca_arbel_map_phys_fmr; dev->ib_dev.map_phys_fmr = mthca_arbel_map_phys_fmr;
else else
dev->ib_dev.map_phys_fmr = mthca_tavor_map_phys_fmr; dev->ib_dev.map_phys_fmr = mthca_tavor_map_phys_fmr;
...@@ -720,7 +720,7 @@ int mthca_register_device(struct mthca_dev *dev) ...@@ -720,7 +720,7 @@ int mthca_register_device(struct mthca_dev *dev)
dev->ib_dev.detach_mcast = mthca_multicast_detach; dev->ib_dev.detach_mcast = mthca_multicast_detach;
dev->ib_dev.process_mad = mthca_process_mad; dev->ib_dev.process_mad = mthca_process_mad;
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
dev->ib_dev.req_notify_cq = mthca_arbel_arm_cq; dev->ib_dev.req_notify_cq = mthca_arbel_arm_cq;
dev->ib_dev.post_send = mthca_arbel_post_send; dev->ib_dev.post_send = mthca_arbel_post_send;
dev->ib_dev.post_recv = mthca_arbel_post_receive; dev->ib_dev.post_recv = mthca_arbel_post_receive;
......
...@@ -639,7 +639,7 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask) ...@@ -639,7 +639,7 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask)
else if (attr_mask & IB_QP_PATH_MTU) else if (attr_mask & IB_QP_PATH_MTU)
qp_context->mtu_msgmax = (attr->path_mtu << 5) | 31; qp_context->mtu_msgmax = (attr->path_mtu << 5) | 31;
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
qp_context->rq_size_stride = qp_context->rq_size_stride =
((ffs(qp->rq.max) - 1) << 3) | (qp->rq.wqe_shift - 4); ((ffs(qp->rq.max) - 1) << 3) | (qp->rq.wqe_shift - 4);
qp_context->sq_size_stride = qp_context->sq_size_stride =
...@@ -731,7 +731,7 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask) ...@@ -731,7 +731,7 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask)
qp_context->next_send_psn = cpu_to_be32(attr->sq_psn); qp_context->next_send_psn = cpu_to_be32(attr->sq_psn);
qp_context->cqn_snd = cpu_to_be32(to_mcq(ibqp->send_cq)->cqn); qp_context->cqn_snd = cpu_to_be32(to_mcq(ibqp->send_cq)->cqn);
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
qp_context->snd_wqe_base_l = cpu_to_be32(qp->send_wqe_offset); qp_context->snd_wqe_base_l = cpu_to_be32(qp->send_wqe_offset);
qp_context->snd_db_index = cpu_to_be32(qp->sq.db_index); qp_context->snd_db_index = cpu_to_be32(qp->sq.db_index);
} }
...@@ -822,7 +822,7 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask) ...@@ -822,7 +822,7 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask)
qp_context->cqn_rcv = cpu_to_be32(to_mcq(ibqp->recv_cq)->cqn); qp_context->cqn_rcv = cpu_to_be32(to_mcq(ibqp->recv_cq)->cqn);
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
qp_context->rcv_db_index = cpu_to_be32(qp->rq.db_index); qp_context->rcv_db_index = cpu_to_be32(qp->rq.db_index);
if (attr_mask & IB_QP_QKEY) { if (attr_mask & IB_QP_QKEY) {
...@@ -897,7 +897,7 @@ static int mthca_alloc_wqe_buf(struct mthca_dev *dev, ...@@ -897,7 +897,7 @@ static int mthca_alloc_wqe_buf(struct mthca_dev *dev,
size += 2 * sizeof (struct mthca_data_seg); size += 2 * sizeof (struct mthca_data_seg);
break; break;
case UD: case UD:
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
size += sizeof (struct mthca_arbel_ud_seg); size += sizeof (struct mthca_arbel_ud_seg);
else else
size += sizeof (struct mthca_tavor_ud_seg); size += sizeof (struct mthca_tavor_ud_seg);
...@@ -1016,7 +1016,7 @@ static int mthca_alloc_memfree(struct mthca_dev *dev, ...@@ -1016,7 +1016,7 @@ static int mthca_alloc_memfree(struct mthca_dev *dev,
{ {
int ret = 0; int ret = 0;
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
ret = mthca_table_get(dev, dev->qp_table.qp_table, qp->qpn); ret = mthca_table_get(dev, dev->qp_table.qp_table, qp->qpn);
if (ret) if (ret)
return ret; return ret;
...@@ -1057,7 +1057,7 @@ static int mthca_alloc_memfree(struct mthca_dev *dev, ...@@ -1057,7 +1057,7 @@ static int mthca_alloc_memfree(struct mthca_dev *dev,
static void mthca_free_memfree(struct mthca_dev *dev, static void mthca_free_memfree(struct mthca_dev *dev,
struct mthca_qp *qp) struct mthca_qp *qp)
{ {
if (dev->hca_type == ARBEL_NATIVE) { 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.eqp_table, qp->qpn); mthca_table_put(dev, dev->qp_table.eqp_table, qp->qpn);
...@@ -1104,7 +1104,7 @@ static int mthca_alloc_qp_common(struct mthca_dev *dev, ...@@ -1104,7 +1104,7 @@ static int mthca_alloc_qp_common(struct mthca_dev *dev,
return ret; return ret;
} }
if (dev->hca_type == ARBEL_NATIVE) { if (mthca_is_memfree(dev)) {
for (i = 0; i < qp->rq.max; ++i) { for (i = 0; i < qp->rq.max; ++i) {
wqe = get_recv_wqe(qp, i); wqe = get_recv_wqe(qp, i);
wqe->nda_op = cpu_to_be32(((i + 1) & (qp->rq.max - 1)) << wqe->nda_op = cpu_to_be32(((i + 1) & (qp->rq.max - 1)) <<
...@@ -1127,7 +1127,7 @@ static void mthca_align_qp_size(struct mthca_dev *dev, struct mthca_qp *qp) ...@@ -1127,7 +1127,7 @@ static void mthca_align_qp_size(struct mthca_dev *dev, struct mthca_qp *qp)
{ {
int i; int i;
if (dev->hca_type != ARBEL_NATIVE) if (!mthca_is_memfree(dev))
return; return;
for (i = 0; 1 << i < qp->rq.max; ++i) for (i = 0; 1 << i < qp->rq.max; ++i)
...@@ -2011,7 +2011,7 @@ int mthca_free_err_wqe(struct mthca_dev *dev, struct mthca_qp *qp, int is_send, ...@@ -2011,7 +2011,7 @@ int mthca_free_err_wqe(struct mthca_dev *dev, struct mthca_qp *qp, int is_send,
else else
next = get_recv_wqe(qp, index); next = get_recv_wqe(qp, index);
if (dev->hca_type == ARBEL_NATIVE) if (mthca_is_memfree(dev))
*dbd = 1; *dbd = 1;
else else
*dbd = !!(next->ee_nds & cpu_to_be32(MTHCA_NEXT_DBD)); *dbd = !!(next->ee_nds & cpu_to_be32(MTHCA_NEXT_DBD));
......
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