diff options
author | Navdeep Parhar <np@FreeBSD.org> | 2013-02-09 00:35:28 +0000 |
---|---|---|
committer | Navdeep Parhar <np@FreeBSD.org> | 2013-02-09 00:35:28 +0000 |
commit | bf3db9ebd8e439a6d809cef564240fd523927748 (patch) | |
tree | 530496abe392a2cebd7f5f96f10b6b615ca6d208 /sys/dev | |
parent | c3400997c48452e75387253a9971ec26fa20cc09 (diff) | |
download | src-bf3db9ebd8e439a6d809cef564240fd523927748.tar.gz src-bf3db9ebd8e439a6d809cef564240fd523927748.zip |
Do not hold locks around hardware context reads.
MFC after: 3 days
Notes
Notes:
svn path=/head/; revision=246575
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/cxgbe/t4_main.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c index c22ec21a020e..96246a60c748 100644 --- a/sys/dev/cxgbe/t4_main.c +++ b/sys/dev/cxgbe/t4_main.c @@ -5161,23 +5161,24 @@ get_sge_context(struct adapter *sc, struct t4_sge_context *cntxt) cntxt->mem_id != CTXT_FLM && cntxt->mem_id != CTXT_CNM) return (EINVAL); + rc = begin_synchronized_op(sc, NULL, SLEEP_OK | INTR_OK, "t4ctxt"); + if (rc) + return (rc); + if (sc->flags & FW_OK) { - rc = begin_synchronized_op(sc, NULL, HOLD_LOCK, "t4ctxt"); - if (rc == 0) { - rc = -t4_sge_ctxt_rd(sc, sc->mbox, cntxt->cid, - cntxt->mem_id, &cntxt->data[0]); - end_synchronized_op(sc, LOCK_HELD); - if (rc == 0) - return (0); - } + rc = -t4_sge_ctxt_rd(sc, sc->mbox, cntxt->cid, cntxt->mem_id, + &cntxt->data[0]); + if (rc == 0) + goto done; } /* * Read via firmware failed or wasn't even attempted. Read directly via * the backdoor. */ - rc = -t4_sge_ctxt_rd_bd(sc, cntxt->cid, cntxt->mem_id, - &cntxt->data[0]); + rc = -t4_sge_ctxt_rd_bd(sc, cntxt->cid, cntxt->mem_id, &cntxt->data[0]); +done: + end_synchronized_op(sc, 0); return (rc); } |