nvme: prefetch stailq before freeing pcie request
We will need to put the recently completed nvme_request object on the qpair's STAILQ. We don't reference any real data from the nvme_request in the completion path since we've already stashed the cb_fn and cb_arg in the nvme_tracker. But we will need to reference the STAILQ_ENTRY to put it back in the qpair's STAILQ, so prefetch that cacheline. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: Id76122afe4150c84a61fbe38bc874f10d606b3b3 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/456673 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
b3d884b700
commit
6550abbac1
@ -2094,6 +2094,10 @@ nvme_pcie_qpair_process_completions(struct spdk_nvme_qpair *qpair, uint32_t max_
|
|||||||
}
|
}
|
||||||
|
|
||||||
tr = &pqpair->tr[cpl->cid];
|
tr = &pqpair->tr[cpl->cid];
|
||||||
|
/* Prefetch the req's STAILQ_ENTRY since we'll need to access it
|
||||||
|
* as part of putting the req back on the qpair's free list.
|
||||||
|
*/
|
||||||
|
__builtin_prefetch(&tr->req->stailq);
|
||||||
pqpair->sq_head = cpl->sqhd;
|
pqpair->sq_head = cpl->sqhd;
|
||||||
|
|
||||||
if (tr->req) {
|
if (tr->req) {
|
||||||
|
Loading…
Reference in New Issue
Block a user