lib/nvme: Expose APIs to Access PMR
APIs to get PMR size, enable, disable, map and unmap the PMR. Signed-off-by: Krishna Kanth Reddy <krish.reddy@samsung.com> Change-Id: If6ec7f3e2f19bc13b3cbb2def622a41a3d84dc4e Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6560 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
89858bbf5d
commit
f98b792db2
@ -63,6 +63,9 @@ chained accelerated CRC32 computation support.
|
||||
|
||||
### nvme
|
||||
|
||||
Added new functions `spdk_nvme_ctrlr_get_pmrsz`, `spdk_nvme_ctrlr_enable_pmr`,
|
||||
`spdk_nvme_ctrlr_disable_pmr`, `spdk_nvme_ctrlr_map_pmr` and `spdk_nvme_ctrlr_unmap_pmr`.
|
||||
|
||||
Added NVMe transport operations to enable, disable, map and unmap the PMR.
|
||||
|
||||
Added `spdk_nvme_qpair_get_optimal_poll_group` function and `qpair_get_optimal_poll_group`
|
||||
|
@ -1094,6 +1094,15 @@ union spdk_nvme_cmbsz_register spdk_nvme_ctrlr_get_regs_cmbsz(struct spdk_nvme_c
|
||||
*/
|
||||
union spdk_nvme_pmrcap_register spdk_nvme_ctrlr_get_regs_pmrcap(struct spdk_nvme_ctrlr *ctrlr);
|
||||
|
||||
/**
|
||||
* Get the NVMe controller PMR size.
|
||||
*
|
||||
* \param ctrlr Opaque handle to NVMe controller.
|
||||
*
|
||||
* \return the NVMe controller PMR size or 0 if PMR is not supported.
|
||||
*/
|
||||
uint64_t spdk_nvme_ctrlr_get_pmrsz(struct spdk_nvme_ctrlr *ctrlr);
|
||||
|
||||
/**
|
||||
* Get the number of namespaces for the given NVMe controller.
|
||||
*
|
||||
@ -2227,6 +2236,56 @@ void *spdk_nvme_ctrlr_map_cmb(struct spdk_nvme_ctrlr *ctrlr, size_t *size);
|
||||
*/
|
||||
void spdk_nvme_ctrlr_unmap_cmb(struct spdk_nvme_ctrlr *ctrlr);
|
||||
|
||||
/**
|
||||
* Enable the Persistent Memory Region
|
||||
*
|
||||
* \param ctrlr Controller that contains the Persistent Memory Region
|
||||
*
|
||||
* \return 0 on success. Negated errno on the following error conditions:
|
||||
* -ENOTSUP: PMR is not supported by the Controller.
|
||||
* -EIO: Registers access failure.
|
||||
* -EINVAL: PMR Time Units Invalid or PMR is already enabled.
|
||||
* -ETIMEDOUT: Timed out to Enable PMR.
|
||||
* -ENOSYS: Transport does not support Enable PMR function.
|
||||
*/
|
||||
int spdk_nvme_ctrlr_enable_pmr(struct spdk_nvme_ctrlr *ctrlr);
|
||||
|
||||
/**
|
||||
* Disable the Persistent Memory Region
|
||||
*
|
||||
* \param ctrlr Controller that contains the Persistent Memory Region
|
||||
*
|
||||
* \return 0 on success. Negated errno on the following error conditions:
|
||||
* -ENOTSUP: PMR is not supported by the Controller.
|
||||
* -EIO: Registers access failure.
|
||||
* -EINVAL: PMR Time Units Invalid or PMR is already disabled.
|
||||
* -ETIMEDOUT: Timed out to Disable PMR.
|
||||
* -ENOSYS: Transport does not support Disable PMR function.
|
||||
*/
|
||||
int spdk_nvme_ctrlr_disable_pmr(struct spdk_nvme_ctrlr *ctrlr);
|
||||
|
||||
/**
|
||||
* Map the Persistent Memory Region so that it's data is
|
||||
* visible from the CPU.
|
||||
*
|
||||
* \param ctrlr Controller that contains the Persistent Memory Region
|
||||
* \param size Size of the region that was mapped.
|
||||
*
|
||||
* \return Pointer to Persistent Memory Region, or NULL on failure.
|
||||
*/
|
||||
void *spdk_nvme_ctrlr_map_pmr(struct spdk_nvme_ctrlr *ctrlr, size_t *size);
|
||||
|
||||
/**
|
||||
* Free the Persistent Memory Region.
|
||||
*
|
||||
* \param ctrlr Controller from which to unmap the Persistent Memory Region.
|
||||
*
|
||||
* \return 0 on success, negative errno on failure.
|
||||
* -ENXIO: Either PMR is not supported by the Controller or the PMR is already unmapped.
|
||||
* -ENOSYS: Transport does not support Unmap PMR function.
|
||||
*/
|
||||
int spdk_nvme_ctrlr_unmap_pmr(struct spdk_nvme_ctrlr *ctrlr);
|
||||
|
||||
/**
|
||||
* Get the transport ID for a given NVMe controller.
|
||||
*
|
||||
|
@ -3614,6 +3614,12 @@ union spdk_nvme_pmrcap_register spdk_nvme_ctrlr_get_regs_pmrcap(struct spdk_nvme
|
||||
return pmrcap;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
spdk_nvme_ctrlr_get_pmrsz(struct spdk_nvme_ctrlr *ctrlr)
|
||||
{
|
||||
return ctrlr->pmr_size;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
spdk_nvme_ctrlr_get_num_ns(struct spdk_nvme_ctrlr *ctrlr)
|
||||
{
|
||||
@ -4093,6 +4099,54 @@ spdk_nvme_ctrlr_unmap_cmb(struct spdk_nvme_ctrlr *ctrlr)
|
||||
nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock);
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvme_ctrlr_enable_pmr(struct spdk_nvme_ctrlr *ctrlr)
|
||||
{
|
||||
int rc;
|
||||
|
||||
nvme_robust_mutex_lock(&ctrlr->ctrlr_lock);
|
||||
rc = nvme_transport_ctrlr_enable_pmr(ctrlr);
|
||||
nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvme_ctrlr_disable_pmr(struct spdk_nvme_ctrlr *ctrlr)
|
||||
{
|
||||
int rc;
|
||||
|
||||
nvme_robust_mutex_lock(&ctrlr->ctrlr_lock);
|
||||
rc = nvme_transport_ctrlr_disable_pmr(ctrlr);
|
||||
nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void *
|
||||
spdk_nvme_ctrlr_map_pmr(struct spdk_nvme_ctrlr *ctrlr, size_t *size)
|
||||
{
|
||||
void *buf;
|
||||
|
||||
nvme_robust_mutex_lock(&ctrlr->ctrlr_lock);
|
||||
buf = nvme_transport_ctrlr_map_pmr(ctrlr, size);
|
||||
nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvme_ctrlr_unmap_pmr(struct spdk_nvme_ctrlr *ctrlr)
|
||||
{
|
||||
int rc;
|
||||
|
||||
nvme_robust_mutex_lock(&ctrlr->ctrlr_lock);
|
||||
rc = nvme_transport_ctrlr_unmap_pmr(ctrlr);
|
||||
nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
bool
|
||||
spdk_nvme_ctrlr_is_discovery(struct spdk_nvme_ctrlr *ctrlr)
|
||||
{
|
||||
|
@ -42,6 +42,7 @@
|
||||
spdk_nvme_ctrlr_get_regs_vs;
|
||||
spdk_nvme_ctrlr_get_regs_cmbsz;
|
||||
spdk_nvme_ctrlr_get_regs_pmrcap;
|
||||
spdk_nvme_ctrlr_get_pmrsz;
|
||||
spdk_nvme_ctrlr_get_num_ns;
|
||||
spdk_nvme_ctrlr_get_pci_device;
|
||||
spdk_nvme_ctrlr_get_max_xfer_size;
|
||||
@ -90,6 +91,10 @@
|
||||
spdk_nvme_ctrlr_reserve_cmb;
|
||||
spdk_nvme_ctrlr_map_cmb;
|
||||
spdk_nvme_ctrlr_unmap_cmb;
|
||||
spdk_nvme_ctrlr_enable_pmr;
|
||||
spdk_nvme_ctrlr_disable_pmr;
|
||||
spdk_nvme_ctrlr_map_pmr;
|
||||
spdk_nvme_ctrlr_unmap_pmr;
|
||||
spdk_nvme_ctrlr_get_transport_id;
|
||||
spdk_nvme_ctrlr_alloc_qid;
|
||||
spdk_nvme_ctrlr_free_qid;
|
||||
|
@ -158,6 +158,30 @@ nvme_transport_ctrlr_unmap_cmb(struct spdk_nvme_ctrlr *ctrlr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
nvme_transport_ctrlr_enable_pmr(struct spdk_nvme_ctrlr *ctrlr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
nvme_transport_ctrlr_disable_pmr(struct spdk_nvme_ctrlr *ctrlr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *
|
||||
nvme_transport_ctrlr_map_pmr(struct spdk_nvme_ctrlr *ctrlr, size_t *size)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
nvme_transport_ctrlr_unmap_pmr(struct spdk_nvme_ctrlr *ctrlr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct spdk_nvme_qpair *
|
||||
nvme_transport_ctrlr_create_io_qpair(struct spdk_nvme_ctrlr *ctrlr, uint16_t qid,
|
||||
const struct spdk_nvme_io_qpair_opts *opts)
|
||||
|
Loading…
x
Reference in New Issue
Block a user