nvme/pcie: Make signature of nvme_pcie_ctrlr_alloc_cmb more like other

alloc functions

Make the signature look more like spdk_dma_malloc and family.

Change-Id: I6a31acf3b9edd136924b6e53b9a23c699429b9dc
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/788
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Ben Walker 2020-02-11 11:01:12 -07:00 committed by Tomasz Zawadzki
parent 7b28450b3f
commit 9ad044c464

View File

@ -994,31 +994,29 @@ nvme_pcie_qpair_reset(struct spdk_nvme_qpair *qpair)
return 0; return 0;
} }
static int static void *
nvme_pcie_ctrlr_alloc_cmb(struct spdk_nvme_ctrlr *ctrlr, uint64_t length, uint64_t aligned, nvme_pcie_ctrlr_alloc_cmb(struct spdk_nvme_ctrlr *ctrlr, uint64_t size, uint64_t alignment)
uint64_t *offset)
{ {
struct nvme_pcie_ctrlr *pctrlr = nvme_pcie_ctrlr(ctrlr); struct nvme_pcie_ctrlr *pctrlr = nvme_pcie_ctrlr(ctrlr);
uint64_t round_offset; uintptr_t addr;
if (pctrlr->cmb.mem_register_addr != NULL) { if (pctrlr->cmb.mem_register_addr != NULL) {
/* BAR is mapped for data */ /* BAR is mapped for data */
return -1; return NULL;
} }
round_offset = pctrlr->cmb.current_offset; addr = (uintptr_t)pctrlr->cmb.bar_va + pctrlr->cmb.current_offset;
round_offset = (round_offset + (aligned - 1)) & ~(aligned - 1); addr = (addr + (alignment - 1)) & ~(alignment - 1);
/* CMB may only consume part of the BAR, calculate accordingly */ /* CMB may only consume part of the BAR, calculate accordingly */
if (round_offset + length > pctrlr->cmb.end) { if (addr + size > ((uintptr_t)pctrlr->cmb.bar_va + pctrlr->cmb.size)) {
SPDK_ERRLOG("Tried to allocate past valid CMB range!\n"); SPDK_ERRLOG("Tried to allocate past valid CMB range!\n");
return -1; return NULL;
} }
*offset = round_offset; pctrlr->cmb.current_offset = (addr + size) - (uintptr_t)pctrlr->cmb.bar_va;
pctrlr->cmb.current_offset = round_offset + length;
return 0; return (void *)addr;
} }
static int static int
@ -1031,7 +1029,6 @@ nvme_pcie_qpair_construct(struct spdk_nvme_qpair *qpair,
struct nvme_tracker *tr; struct nvme_tracker *tr;
uint16_t i; uint16_t i;
volatile uint32_t *doorbell_base; volatile uint32_t *doorbell_base;
uint64_t offset;
uint16_t num_trackers; uint16_t num_trackers;
size_t page_align = VALUE_2MB; size_t page_align = VALUE_2MB;
uint32_t flags = SPDK_MALLOC_DMA; uint32_t flags = SPDK_MALLOC_DMA;
@ -1070,10 +1067,10 @@ nvme_pcie_qpair_construct(struct spdk_nvme_qpair *qpair,
/* cmd and cpl rings must be aligned on page size boundaries. */ /* cmd and cpl rings must be aligned on page size boundaries. */
if (ctrlr->opts.use_cmb_sqs) { if (ctrlr->opts.use_cmb_sqs) {
if (nvme_pcie_ctrlr_alloc_cmb(ctrlr, pqpair->num_entries * sizeof(struct spdk_nvme_cmd), pqpair->cmd = nvme_pcie_ctrlr_alloc_cmb(ctrlr, pqpair->num_entries * sizeof(struct spdk_nvme_cmd),
sysconf(_SC_PAGESIZE), &offset) == 0) { sysconf(_SC_PAGESIZE));
pqpair->cmd = pctrlr->cmb.bar_va + offset; pqpair->cmd_bus_addr = spdk_vtophys(pqpair->cmd, NULL);
pqpair->cmd_bus_addr = pctrlr->cmb.bar_pa + offset; if (pqpair->cmd != NULL) {
pqpair->sq_in_cmb = true; pqpair->sq_in_cmb = true;
} }
} }