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:
parent
7b28450b3f
commit
9ad044c464
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user