1
0
Fork 0

IB/qib: Cleanup qib_set_part_key() with direct returns

Perhaps the function is better written without
the empty bail: label and without setting ret
and just using return.

Combining the int/bool conversion of any and the
direct returns makes the resulting code clearer.

Tested-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
hifive-unleashed-5.1
Joe Perches 2017-11-14 16:29:41 -05:00 committed by Jason Gunthorpe
parent 3365776ebf
commit e3649293b9
1 changed files with 24 additions and 42 deletions

View File

@ -568,20 +568,16 @@ done:
static int qib_set_part_key(struct qib_ctxtdata *rcd, u16 key)
{
struct qib_pportdata *ppd = rcd->ppd;
int i, any = 0, pidx = -1;
int i, pidx = -1;
bool any = false;
u16 lkey = key & 0x7FFF;
int ret;
if (lkey == (QIB_DEFAULT_P_KEY & 0x7FFF)) {
if (lkey == (QIB_DEFAULT_P_KEY & 0x7FFF))
/* nothing to do; this key always valid */
ret = 0;
goto bail;
}
return 0;
if (!lkey) {
ret = -EINVAL;
goto bail;
}
if (!lkey)
return -EINVAL;
/*
* Set the full membership bit, because it has to be
@ -594,18 +590,14 @@ static int qib_set_part_key(struct qib_ctxtdata *rcd, u16 key)
for (i = 0; i < ARRAY_SIZE(rcd->pkeys); i++) {
if (!rcd->pkeys[i] && pidx == -1)
pidx = i;
if (rcd->pkeys[i] == key) {
ret = -EEXIST;
goto bail;
}
if (rcd->pkeys[i] == key)
return -EEXIST;
}
if (pidx == -1) {
ret = -EBUSY;
goto bail;
}
for (any = i = 0; i < ARRAY_SIZE(ppd->pkeys); i++) {
if (pidx == -1)
return -EBUSY;
for (i = 0; i < ARRAY_SIZE(ppd->pkeys); i++) {
if (!ppd->pkeys[i]) {
any++;
any = true;
continue;
}
if (ppd->pkeys[i] == key) {
@ -613,44 +605,34 @@ static int qib_set_part_key(struct qib_ctxtdata *rcd, u16 key)
if (atomic_inc_return(pkrefs) > 1) {
rcd->pkeys[pidx] = key;
ret = 0;
goto bail;
} else {
/*
* lost race, decrement count, catch below
*/
atomic_dec(pkrefs);
any++;
return 0;
}
/*
* lost race, decrement count, catch below
*/
atomic_dec(pkrefs);
any = true;
}
if ((ppd->pkeys[i] & 0x7FFF) == lkey) {
if ((ppd->pkeys[i] & 0x7FFF) == lkey)
/*
* It makes no sense to have both the limited and
* full membership PKEY set at the same time since
* the unlimited one will disable the limited one.
*/
ret = -EEXIST;
goto bail;
}
}
if (!any) {
ret = -EBUSY;
goto bail;
return -EEXIST;
}
if (!any)
return -EBUSY;
for (i = 0; i < ARRAY_SIZE(ppd->pkeys); i++) {
if (!ppd->pkeys[i] &&
atomic_inc_return(&ppd->pkeyrefs[i]) == 1) {
rcd->pkeys[pidx] = key;
ppd->pkeys[i] = key;
(void) ppd->dd->f_set_ib_cfg(ppd, QIB_IB_CFG_PKEYS, 0);
ret = 0;
goto bail;
return 0;
}
}
ret = -EBUSY;
bail:
return ret;
return -EBUSY;
}
/**