forked from luck/tmp_suning_uos_patched
IB/qib: Fix context allocation with multiple HCAs
The driver was incorrectly choosing HCAs on which to allocate new user contexts based on overall count of usable ports regardless whether the usable port was on the currently selected HCA. Signed-off-by: Mike Marciniszyn <mike.marciniszyn@qlogic.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
5dbbcb97cc
commit
6676b3f746
@ -1379,17 +1379,17 @@ static int get_a_ctxt(struct file *fp, const struct qib_user_info *uinfo,
|
||||
/* find device (with ACTIVE ports) with fewest ctxts in use */
|
||||
for (ndev = 0; ndev < devmax; ndev++) {
|
||||
struct qib_devdata *dd = qib_lookup(ndev);
|
||||
unsigned cused = 0, cfree = 0;
|
||||
unsigned cused = 0, cfree = 0, pusable = 0;
|
||||
if (!dd)
|
||||
continue;
|
||||
if (port && port <= dd->num_pports &&
|
||||
usable(dd->pport + port - 1))
|
||||
dusable = 1;
|
||||
pusable = 1;
|
||||
else
|
||||
for (i = 0; i < dd->num_pports; i++)
|
||||
if (usable(dd->pport + i))
|
||||
dusable++;
|
||||
if (!dusable)
|
||||
pusable++;
|
||||
if (!pusable)
|
||||
continue;
|
||||
for (ctxt = dd->first_user_ctxt; ctxt < dd->cfgctxts;
|
||||
ctxt++)
|
||||
@ -1397,7 +1397,7 @@ static int get_a_ctxt(struct file *fp, const struct qib_user_info *uinfo,
|
||||
cused++;
|
||||
else
|
||||
cfree++;
|
||||
if (cfree && cused < inuse) {
|
||||
if (pusable && cfree && cused < inuse) {
|
||||
udd = dd;
|
||||
inuse = cused;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user