nvme/pcie: only set mmio_ctrlr around actual MMIO
When the shadow doorbell feature is enabled, no actual MMIO takes place when a shadow update is sufficient; tighten the bounds of the updates to g_thread_mmio_ctrlr in the two doorbell update locations so that we only need to touch the thread-local variable when actual MMIO access is required. Change-Id: Ida974bec33f56cbb9f7d3611f483c6975ec773ab Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-on: https://review.gerrithub.io/413856 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
f2554ee973
commit
008c111b48
@ -1188,14 +1188,14 @@ nvme_pcie_qpair_submit_tracker(struct spdk_nvme_qpair *qpair, struct nvme_tracke
|
||||
}
|
||||
|
||||
spdk_wmb();
|
||||
g_thread_mmio_ctrlr = pctrlr;
|
||||
if (spdk_likely(nvme_pcie_qpair_update_mmio_required(qpair,
|
||||
pqpair->sq_tail,
|
||||
pqpair->sq_shadow_tdbl,
|
||||
pqpair->sq_eventidx))) {
|
||||
g_thread_mmio_ctrlr = pctrlr;
|
||||
spdk_mmio_write_4(pqpair->sq_tdbl, pqpair->sq_tail);
|
||||
g_thread_mmio_ctrlr = NULL;
|
||||
}
|
||||
g_thread_mmio_ctrlr = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2081,13 +2081,13 @@ nvme_pcie_qpair_process_completions(struct spdk_nvme_qpair *qpair, uint32_t max_
|
||||
}
|
||||
|
||||
if (num_completions > 0) {
|
||||
g_thread_mmio_ctrlr = pctrlr;
|
||||
if (spdk_likely(nvme_pcie_qpair_update_mmio_required(qpair, pqpair->cq_head,
|
||||
pqpair->cq_shadow_hdbl,
|
||||
pqpair->cq_eventidx))) {
|
||||
g_thread_mmio_ctrlr = pctrlr;
|
||||
spdk_mmio_write_4(pqpair->cq_hdbl, pqpair->cq_head);
|
||||
g_thread_mmio_ctrlr = NULL;
|
||||
}
|
||||
g_thread_mmio_ctrlr = NULL;
|
||||
}
|
||||
|
||||
/* We don't want to expose the admin queue to the user,
|
||||
|
Loading…
Reference in New Issue
Block a user