nvme/pcie: page size alignment rings

cmd and cpl rings must be aligned on page size boundaries.

Change-Id: I103eed32adfaa4388bc7d672ee166973f796b343
Signed-off-by: Jonas Pfefferle <jpf@zurich.ibm.com>
Reviewed-on: https://review.gerrithub.io/383727
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
PepperJo 2017-10-11 14:03:49 +02:00 committed by Daniel Verkamp
parent dcfbafeb77
commit 2e7c008fe2

View File

@ -2,6 +2,7 @@
* BSD LICENSE
*
* Copyright (c) Intel Corporation.
* Copyright (c) 2017, IBM Corporation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -844,6 +845,7 @@ nvme_pcie_qpair_construct(struct spdk_nvme_qpair *qpair)
uint64_t phys_addr = 0;
uint64_t offset;
uint16_t num_trackers;
size_t page_size = sysconf(_SC_PAGESIZE);
if (qpair->id == 0) {
num_trackers = NVME_ADMIN_TRACKERS;
@ -859,10 +861,10 @@ nvme_pcie_qpair_construct(struct spdk_nvme_qpair *qpair)
pqpair->sq_in_cmb = false;
/* cmd and cpl rings must be aligned on 4KB boundaries. */
/* cmd and cpl rings must be aligned on page size boundaries. */
if (ctrlr->opts.use_cmb_sqs) {
if (nvme_pcie_ctrlr_alloc_cmb(ctrlr, pqpair->num_entries * sizeof(struct spdk_nvme_cmd),
0x1000, &offset) == 0) {
page_size, &offset) == 0) {
pqpair->cmd = pctrlr->cmb_bar_virt_addr + offset;
pqpair->cmd_bus_addr = pctrlr->cmb_bar_phys_addr + offset;
pqpair->sq_in_cmb = true;
@ -870,7 +872,7 @@ nvme_pcie_qpair_construct(struct spdk_nvme_qpair *qpair)
}
if (pqpair->sq_in_cmb == false) {
pqpair->cmd = spdk_dma_zmalloc(pqpair->num_entries * sizeof(struct spdk_nvme_cmd),
0x1000,
page_size,
&pqpair->cmd_bus_addr);
if (pqpair->cmd == NULL) {
SPDK_ERRLOG("alloc qpair_cmd failed\n");
@ -879,7 +881,7 @@ nvme_pcie_qpair_construct(struct spdk_nvme_qpair *qpair)
}
pqpair->cpl = spdk_dma_zmalloc(pqpair->num_entries * sizeof(struct spdk_nvme_cpl),
0x1000,
page_size,
&pqpair->cpl_bus_addr);
if (pqpair->cpl == NULL) {
SPDK_ERRLOG("alloc qpair_cpl failed\n");