IB/ehca: Use common error code mapping instead of specific ones
Instead of one error mapping function for each potential error source in ehca_mrmw.c, use a centralized function that handles all cases, saving a three-figure line count. Signed-off-by: Joachim Fenkes <fenkes@de.ibm.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
committed by
Roland Dreier
parent
3df78f81e0
commit
a1a6ff1100
@@ -537,7 +537,7 @@ int ehca_query_mr(struct ib_mr *mr, struct ib_mr_attr *mr_attr)
|
|||||||
"hca_hndl=%lx mr_hndl=%lx lkey=%x",
|
"hca_hndl=%lx mr_hndl=%lx lkey=%x",
|
||||||
h_ret, mr, shca->ipz_hca_handle.handle,
|
h_ret, mr, shca->ipz_hca_handle.handle,
|
||||||
e_mr->ipz_mr_handle.handle, mr->lkey);
|
e_mr->ipz_mr_handle.handle, mr->lkey);
|
||||||
ret = ehca_mrmw_map_hrc_query_mr(h_ret);
|
ret = ehca2ib_return_code(h_ret);
|
||||||
goto query_mr_exit1;
|
goto query_mr_exit1;
|
||||||
}
|
}
|
||||||
mr_attr->pd = mr->pd;
|
mr_attr->pd = mr->pd;
|
||||||
@@ -597,7 +597,7 @@ int ehca_dereg_mr(struct ib_mr *mr)
|
|||||||
"e_mr=%p hca_hndl=%lx mr_hndl=%lx mr->lkey=%x",
|
"e_mr=%p hca_hndl=%lx mr_hndl=%lx mr->lkey=%x",
|
||||||
h_ret, shca, e_mr, shca->ipz_hca_handle.handle,
|
h_ret, shca, e_mr, shca->ipz_hca_handle.handle,
|
||||||
e_mr->ipz_mr_handle.handle, mr->lkey);
|
e_mr->ipz_mr_handle.handle, mr->lkey);
|
||||||
ret = ehca_mrmw_map_hrc_free_mr(h_ret);
|
ret = ehca2ib_return_code(h_ret);
|
||||||
goto dereg_mr_exit0;
|
goto dereg_mr_exit0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -637,7 +637,7 @@ struct ib_mw *ehca_alloc_mw(struct ib_pd *pd)
|
|||||||
ehca_err(pd->device, "hipz_mw_allocate failed, h_ret=%lx "
|
ehca_err(pd->device, "hipz_mw_allocate failed, h_ret=%lx "
|
||||||
"shca=%p hca_hndl=%lx mw=%p",
|
"shca=%p hca_hndl=%lx mw=%p",
|
||||||
h_ret, shca, shca->ipz_hca_handle.handle, e_mw);
|
h_ret, shca, shca->ipz_hca_handle.handle, e_mw);
|
||||||
ib_mw = ERR_PTR(ehca_mrmw_map_hrc_alloc(h_ret));
|
ib_mw = ERR_PTR(ehca2ib_return_code(h_ret));
|
||||||
goto alloc_mw_exit1;
|
goto alloc_mw_exit1;
|
||||||
}
|
}
|
||||||
/* successful MW allocation */
|
/* successful MW allocation */
|
||||||
@@ -680,7 +680,7 @@ int ehca_dealloc_mw(struct ib_mw *mw)
|
|||||||
"mw=%p rkey=%x hca_hndl=%lx mw_hndl=%lx",
|
"mw=%p rkey=%x hca_hndl=%lx mw_hndl=%lx",
|
||||||
h_ret, shca, mw, mw->rkey, shca->ipz_hca_handle.handle,
|
h_ret, shca, mw, mw->rkey, shca->ipz_hca_handle.handle,
|
||||||
e_mw->ipz_mw_handle.handle);
|
e_mw->ipz_mw_handle.handle);
|
||||||
return ehca_mrmw_map_hrc_free_mw(h_ret);
|
return ehca2ib_return_code(h_ret);
|
||||||
}
|
}
|
||||||
/* successful deallocation */
|
/* successful deallocation */
|
||||||
ehca_mw_delete(e_mw);
|
ehca_mw_delete(e_mw);
|
||||||
@@ -923,7 +923,7 @@ int ehca_dealloc_fmr(struct ib_fmr *fmr)
|
|||||||
"hca_hndl=%lx fmr_hndl=%lx fmr->lkey=%x",
|
"hca_hndl=%lx fmr_hndl=%lx fmr->lkey=%x",
|
||||||
h_ret, e_fmr, shca->ipz_hca_handle.handle,
|
h_ret, e_fmr, shca->ipz_hca_handle.handle,
|
||||||
e_fmr->ipz_mr_handle.handle, fmr->lkey);
|
e_fmr->ipz_mr_handle.handle, fmr->lkey);
|
||||||
ret = ehca_mrmw_map_hrc_free_mr(h_ret);
|
ret = ehca2ib_return_code(h_ret);
|
||||||
goto free_fmr_exit0;
|
goto free_fmr_exit0;
|
||||||
}
|
}
|
||||||
/* successful deregistration */
|
/* successful deregistration */
|
||||||
@@ -964,7 +964,7 @@ int ehca_reg_mr(struct ehca_shca *shca,
|
|||||||
if (h_ret != H_SUCCESS) {
|
if (h_ret != H_SUCCESS) {
|
||||||
ehca_err(&shca->ib_device, "hipz_alloc_mr failed, h_ret=%lx "
|
ehca_err(&shca->ib_device, "hipz_alloc_mr failed, h_ret=%lx "
|
||||||
"hca_hndl=%lx", h_ret, shca->ipz_hca_handle.handle);
|
"hca_hndl=%lx", h_ret, shca->ipz_hca_handle.handle);
|
||||||
ret = ehca_mrmw_map_hrc_alloc(h_ret);
|
ret = ehca2ib_return_code(h_ret);
|
||||||
goto ehca_reg_mr_exit0;
|
goto ehca_reg_mr_exit0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1079,7 +1079,7 @@ int ehca_reg_mr_rpages(struct ehca_shca *shca,
|
|||||||
shca->ipz_hca_handle.handle,
|
shca->ipz_hca_handle.handle,
|
||||||
e_mr->ipz_mr_handle.handle,
|
e_mr->ipz_mr_handle.handle,
|
||||||
e_mr->ib.ib_mr.lkey);
|
e_mr->ib.ib_mr.lkey);
|
||||||
ret = ehca_mrmw_map_hrc_rrpg_last(h_ret);
|
ret = ehca2ib_return_code(h_ret);
|
||||||
break;
|
break;
|
||||||
} else
|
} else
|
||||||
ret = 0;
|
ret = 0;
|
||||||
@@ -1090,7 +1090,7 @@ int ehca_reg_mr_rpages(struct ehca_shca *shca,
|
|||||||
e_mr->ib.ib_mr.lkey,
|
e_mr->ib.ib_mr.lkey,
|
||||||
shca->ipz_hca_handle.handle,
|
shca->ipz_hca_handle.handle,
|
||||||
e_mr->ipz_mr_handle.handle);
|
e_mr->ipz_mr_handle.handle);
|
||||||
ret = ehca_mrmw_map_hrc_rrpg_notlast(h_ret);
|
ret = ehca2ib_return_code(h_ret);
|
||||||
break;
|
break;
|
||||||
} else
|
} else
|
||||||
ret = 0;
|
ret = 0;
|
||||||
@@ -1254,7 +1254,7 @@ int ehca_rereg_mr(struct ehca_shca *shca,
|
|||||||
h_ret, e_mr, shca->ipz_hca_handle.handle,
|
h_ret, e_mr, shca->ipz_hca_handle.handle,
|
||||||
e_mr->ipz_mr_handle.handle,
|
e_mr->ipz_mr_handle.handle,
|
||||||
e_mr->ib.ib_mr.lkey);
|
e_mr->ib.ib_mr.lkey);
|
||||||
ret = ehca_mrmw_map_hrc_free_mr(h_ret);
|
ret = ehca2ib_return_code(h_ret);
|
||||||
goto ehca_rereg_mr_exit0;
|
goto ehca_rereg_mr_exit0;
|
||||||
}
|
}
|
||||||
/* clean ehca_mr_t, without changing struct ib_mr and lock */
|
/* clean ehca_mr_t, without changing struct ib_mr and lock */
|
||||||
@@ -1351,7 +1351,7 @@ int ehca_unmap_one_fmr(struct ehca_shca *shca,
|
|||||||
h_ret, e_fmr, shca->ipz_hca_handle.handle,
|
h_ret, e_fmr, shca->ipz_hca_handle.handle,
|
||||||
e_fmr->ipz_mr_handle.handle,
|
e_fmr->ipz_mr_handle.handle,
|
||||||
e_fmr->ib.ib_fmr.lkey);
|
e_fmr->ib.ib_fmr.lkey);
|
||||||
ret = ehca_mrmw_map_hrc_free_mr(h_ret);
|
ret = ehca2ib_return_code(h_ret);
|
||||||
goto ehca_unmap_one_fmr_exit0;
|
goto ehca_unmap_one_fmr_exit0;
|
||||||
}
|
}
|
||||||
/* clean ehca_mr_t, without changing lock */
|
/* clean ehca_mr_t, without changing lock */
|
||||||
@@ -1420,7 +1420,7 @@ int ehca_reg_smr(struct ehca_shca *shca,
|
|||||||
shca->ipz_hca_handle.handle,
|
shca->ipz_hca_handle.handle,
|
||||||
e_origmr->ipz_mr_handle.handle,
|
e_origmr->ipz_mr_handle.handle,
|
||||||
e_origmr->ib.ib_mr.lkey);
|
e_origmr->ib.ib_mr.lkey);
|
||||||
ret = ehca_mrmw_map_hrc_reg_smr(h_ret);
|
ret = ehca2ib_return_code(h_ret);
|
||||||
goto ehca_reg_smr_exit0;
|
goto ehca_reg_smr_exit0;
|
||||||
}
|
}
|
||||||
/* successful registration */
|
/* successful registration */
|
||||||
@@ -1539,7 +1539,7 @@ int ehca_reg_maxmr(struct ehca_shca *shca,
|
|||||||
h_ret, e_origmr, shca->ipz_hca_handle.handle,
|
h_ret, e_origmr, shca->ipz_hca_handle.handle,
|
||||||
e_origmr->ipz_mr_handle.handle,
|
e_origmr->ipz_mr_handle.handle,
|
||||||
e_origmr->ib.ib_mr.lkey);
|
e_origmr->ib.ib_mr.lkey);
|
||||||
return ehca_mrmw_map_hrc_reg_smr(h_ret);
|
return ehca2ib_return_code(h_ret);
|
||||||
}
|
}
|
||||||
/* successful registration */
|
/* successful registration */
|
||||||
e_newmr->num_pages = e_origmr->num_pages;
|
e_newmr->num_pages = e_origmr->num_pages;
|
||||||
@@ -2040,177 +2040,6 @@ void ehca_mrmw_reverse_map_acl(const u32 *hipz_acl,
|
|||||||
} /* end ehca_mrmw_reverse_map_acl() */
|
} /* end ehca_mrmw_reverse_map_acl() */
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* map HIPZ rc to IB retcodes for MR/MW allocations
|
|
||||||
* Used for hipz_mr_reg_alloc and hipz_mw_alloc.
|
|
||||||
*/
|
|
||||||
int ehca_mrmw_map_hrc_alloc(const u64 hipz_rc)
|
|
||||||
{
|
|
||||||
switch (hipz_rc) {
|
|
||||||
case H_SUCCESS: /* successful completion */
|
|
||||||
return 0;
|
|
||||||
case H_NOT_ENOUGH_RESOURCES: /* insufficient resources */
|
|
||||||
case H_CONSTRAINED: /* resource constraint */
|
|
||||||
case H_NO_MEM:
|
|
||||||
return -ENOMEM;
|
|
||||||
case H_BUSY: /* long busy */
|
|
||||||
return -EBUSY;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
} /* end ehca_mrmw_map_hrc_alloc() */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* map HIPZ rc to IB retcodes for MR register rpage
|
|
||||||
* Used for hipz_h_register_rpage_mr at registering last page
|
|
||||||
*/
|
|
||||||
int ehca_mrmw_map_hrc_rrpg_last(const u64 hipz_rc)
|
|
||||||
{
|
|
||||||
switch (hipz_rc) {
|
|
||||||
case H_SUCCESS: /* registration complete */
|
|
||||||
return 0;
|
|
||||||
case H_PAGE_REGISTERED: /* page registered */
|
|
||||||
case H_ADAPTER_PARM: /* invalid adapter handle */
|
|
||||||
case H_RH_PARM: /* invalid resource handle */
|
|
||||||
/* case H_QT_PARM: invalid queue type */
|
|
||||||
case H_PARAMETER: /*
|
|
||||||
* invalid logical address,
|
|
||||||
* or count zero or greater 512
|
|
||||||
*/
|
|
||||||
case H_TABLE_FULL: /* page table full */
|
|
||||||
case H_HARDWARE: /* HCA not operational */
|
|
||||||
return -EINVAL;
|
|
||||||
case H_BUSY: /* long busy */
|
|
||||||
return -EBUSY;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
} /* end ehca_mrmw_map_hrc_rrpg_last() */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* map HIPZ rc to IB retcodes for MR register rpage
|
|
||||||
* Used for hipz_h_register_rpage_mr at registering one page, but not last page
|
|
||||||
*/
|
|
||||||
int ehca_mrmw_map_hrc_rrpg_notlast(const u64 hipz_rc)
|
|
||||||
{
|
|
||||||
switch (hipz_rc) {
|
|
||||||
case H_PAGE_REGISTERED: /* page registered */
|
|
||||||
return 0;
|
|
||||||
case H_SUCCESS: /* registration complete */
|
|
||||||
case H_ADAPTER_PARM: /* invalid adapter handle */
|
|
||||||
case H_RH_PARM: /* invalid resource handle */
|
|
||||||
/* case H_QT_PARM: invalid queue type */
|
|
||||||
case H_PARAMETER: /*
|
|
||||||
* invalid logical address,
|
|
||||||
* or count zero or greater 512
|
|
||||||
*/
|
|
||||||
case H_TABLE_FULL: /* page table full */
|
|
||||||
case H_HARDWARE: /* HCA not operational */
|
|
||||||
return -EINVAL;
|
|
||||||
case H_BUSY: /* long busy */
|
|
||||||
return -EBUSY;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
} /* end ehca_mrmw_map_hrc_rrpg_notlast() */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/* map HIPZ rc to IB retcodes for MR query. Used for hipz_mr_query. */
|
|
||||||
int ehca_mrmw_map_hrc_query_mr(const u64 hipz_rc)
|
|
||||||
{
|
|
||||||
switch (hipz_rc) {
|
|
||||||
case H_SUCCESS: /* successful completion */
|
|
||||||
return 0;
|
|
||||||
case H_ADAPTER_PARM: /* invalid adapter handle */
|
|
||||||
case H_RH_PARM: /* invalid resource handle */
|
|
||||||
return -EINVAL;
|
|
||||||
case H_BUSY: /* long busy */
|
|
||||||
return -EBUSY;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
} /* end ehca_mrmw_map_hrc_query_mr() */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------*/
|
|
||||||
/*----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* map HIPZ rc to IB retcodes for freeing MR resource
|
|
||||||
* Used for hipz_h_free_resource_mr
|
|
||||||
*/
|
|
||||||
int ehca_mrmw_map_hrc_free_mr(const u64 hipz_rc)
|
|
||||||
{
|
|
||||||
switch (hipz_rc) {
|
|
||||||
case H_SUCCESS: /* resource freed */
|
|
||||||
return 0;
|
|
||||||
case H_ADAPTER_PARM: /* invalid adapter handle */
|
|
||||||
case H_RH_PARM: /* invalid resource handle */
|
|
||||||
case H_R_STATE: /* invalid resource state */
|
|
||||||
case H_HARDWARE: /* HCA not operational */
|
|
||||||
return -EINVAL;
|
|
||||||
case H_RESOURCE: /* Resource in use */
|
|
||||||
case H_BUSY: /* long busy */
|
|
||||||
return -EBUSY;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
} /* end ehca_mrmw_map_hrc_free_mr() */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* map HIPZ rc to IB retcodes for freeing MW resource
|
|
||||||
* Used for hipz_h_free_resource_mw
|
|
||||||
*/
|
|
||||||
int ehca_mrmw_map_hrc_free_mw(const u64 hipz_rc)
|
|
||||||
{
|
|
||||||
switch (hipz_rc) {
|
|
||||||
case H_SUCCESS: /* resource freed */
|
|
||||||
return 0;
|
|
||||||
case H_ADAPTER_PARM: /* invalid adapter handle */
|
|
||||||
case H_RH_PARM: /* invalid resource handle */
|
|
||||||
case H_R_STATE: /* invalid resource state */
|
|
||||||
case H_HARDWARE: /* HCA not operational */
|
|
||||||
return -EINVAL;
|
|
||||||
case H_RESOURCE: /* Resource in use */
|
|
||||||
case H_BUSY: /* long busy */
|
|
||||||
return -EBUSY;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
} /* end ehca_mrmw_map_hrc_free_mw() */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* map HIPZ rc to IB retcodes for SMR registrations
|
|
||||||
* Used for hipz_h_register_smr.
|
|
||||||
*/
|
|
||||||
int ehca_mrmw_map_hrc_reg_smr(const u64 hipz_rc)
|
|
||||||
{
|
|
||||||
switch (hipz_rc) {
|
|
||||||
case H_SUCCESS: /* successful completion */
|
|
||||||
return 0;
|
|
||||||
case H_ADAPTER_PARM: /* invalid adapter handle */
|
|
||||||
case H_RH_PARM: /* invalid resource handle */
|
|
||||||
case H_MEM_PARM: /* invalid MR virtual address */
|
|
||||||
case H_MEM_ACCESS_PARM: /* invalid access controls */
|
|
||||||
case H_NOT_ENOUGH_RESOURCES: /* insufficient resources */
|
|
||||||
return -EINVAL;
|
|
||||||
case H_BUSY: /* long busy */
|
|
||||||
return -EBUSY;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
} /* end ehca_mrmw_map_hrc_reg_smr() */
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -121,20 +121,6 @@ void ehca_mrmw_set_pgsize_hipz_acl(u32 *hipz_acl);
|
|||||||
void ehca_mrmw_reverse_map_acl(const u32 *hipz_acl,
|
void ehca_mrmw_reverse_map_acl(const u32 *hipz_acl,
|
||||||
int *ib_acl);
|
int *ib_acl);
|
||||||
|
|
||||||
int ehca_mrmw_map_hrc_alloc(const u64 hipz_rc);
|
|
||||||
|
|
||||||
int ehca_mrmw_map_hrc_rrpg_last(const u64 hipz_rc);
|
|
||||||
|
|
||||||
int ehca_mrmw_map_hrc_rrpg_notlast(const u64 hipz_rc);
|
|
||||||
|
|
||||||
int ehca_mrmw_map_hrc_query_mr(const u64 hipz_rc);
|
|
||||||
|
|
||||||
int ehca_mrmw_map_hrc_free_mr(const u64 hipz_rc);
|
|
||||||
|
|
||||||
int ehca_mrmw_map_hrc_free_mw(const u64 hipz_rc);
|
|
||||||
|
|
||||||
int ehca_mrmw_map_hrc_reg_smr(const u64 hipz_rc);
|
|
||||||
|
|
||||||
void ehca_mr_deletenew(struct ehca_mr *mr);
|
void ehca_mr_deletenew(struct ehca_mr *mr);
|
||||||
|
|
||||||
#endif /*_EHCA_MRMW_H_*/
|
#endif /*_EHCA_MRMW_H_*/
|
||||||
|
@@ -161,8 +161,11 @@ static inline int ehca2ib_return_code(u64 ehca_rc)
|
|||||||
switch (ehca_rc) {
|
switch (ehca_rc) {
|
||||||
case H_SUCCESS:
|
case H_SUCCESS:
|
||||||
return 0;
|
return 0;
|
||||||
|
case H_RESOURCE: /* Resource in use */
|
||||||
case H_BUSY:
|
case H_BUSY:
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
case H_NOT_ENOUGH_RESOURCES: /* insufficient resources */
|
||||||
|
case H_CONSTRAINED: /* resource constraint */
|
||||||
case H_NO_MEM:
|
case H_NO_MEM:
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
default:
|
default:
|
||||||
|
Reference in New Issue
Block a user