nvme: simplify supported log page code

Change-Id: If16b1c237dc304378fe0742651a78d3ec0850665
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Daniel Verkamp 2016-01-15 13:21:18 -07:00
parent ab17933468
commit 97601bb358
2 changed files with 16 additions and 62 deletions

View File

@ -45,28 +45,22 @@ static void
nvme_ctrlr_construct_intel_support_log_page_list(struct nvme_controller *ctrlr,
struct nvme_intel_log_page_directory *log_page_directory)
{
int i = 0;
if (ctrlr->cdata.vid != PCI_VENDOR_ID_INTEL || log_page_directory == NULL)
return;
ctrlr->supported_log_pages.vendor_specific_page_id[i] = NVME_INTEL_LOG_PAGE_DIRECTORY;
i++;
ctrlr->log_page_supported[NVME_INTEL_LOG_PAGE_DIRECTORY] = true;
if (log_page_directory->read_latency_log_len) {
ctrlr->supported_log_pages.vendor_specific_page_id[i] = NVME_INTEL_LOG_READ_CMD_LATENCY;
i++;
ctrlr->log_page_supported[NVME_INTEL_LOG_READ_CMD_LATENCY] = true;
}
if (log_page_directory->write_latency_log_len) {
ctrlr->supported_log_pages.vendor_specific_page_id[i] = NVME_INTEL_LOG_WRITE_CMD_LATENCY;
i++;
ctrlr->log_page_supported[NVME_INTEL_LOG_WRITE_CMD_LATENCY] = true;
}
if (log_page_directory->temperature_statistics_log_len) {
ctrlr->supported_log_pages.vendor_specific_page_id[i] = NVME_INTEL_LOG_TEMPERATURE;
i++;
ctrlr->log_page_supported[NVME_INTEL_LOG_TEMPERATURE] = true;
}
if (log_page_directory->smart_log_len) {
ctrlr->supported_log_pages.vendor_specific_page_id[i] = NVME_INTEL_LOG_SMART;
ctrlr->log_page_supported[NVME_INTEL_LOG_SMART] = true;
}
}
@ -106,15 +100,15 @@ static int nvme_ctrlr_set_intel_support_log_pages(struct nvme_controller *ctrlr)
static void
nvme_ctrlr_set_supported_log_pages(struct nvme_controller *ctrlr)
{
memset(&ctrlr->supported_log_pages, 0, sizeof(struct nvme_supported_log_pages));
ctrlr->supported_log_pages.vendor_id = ctrlr->cdata.vid;
ctrlr->supported_log_pages.generic_page_id[0] = NVME_LOG_ERROR;
ctrlr->supported_log_pages.generic_page_id[1] = NVME_LOG_HEALTH_INFORMATION;
ctrlr->supported_log_pages.generic_page_id[2] = NVME_LOG_FIRMWARE_SLOT;
memset(ctrlr->log_page_supported, 0, sizeof(ctrlr->log_page_supported));
/* Mandatory pages */
ctrlr->log_page_supported[NVME_LOG_ERROR] = true;
ctrlr->log_page_supported[NVME_LOG_HEALTH_INFORMATION] = true;
ctrlr->log_page_supported[NVME_LOG_FIRMWARE_SLOT] = true;
if (ctrlr->cdata.lpa.celp) {
ctrlr->supported_log_pages.generic_page_id[3] = NVME_LOG_COMMAND_EFFECTS_LOG;
ctrlr->log_page_supported[NVME_LOG_COMMAND_EFFECTS_LOG] = true;
}
if (ctrlr->supported_log_pages.vendor_id == PCI_VENDOR_ID_INTEL) {
if (ctrlr->cdata.vid == PCI_VENDOR_ID_INTEL) {
nvme_ctrlr_set_intel_support_log_pages(ctrlr);
}
}
@ -865,30 +859,7 @@ nvme_ctrlr_register_aer_callback(struct nvme_controller *ctrlr,
bool
nvme_ctrlr_is_log_page_supported(struct nvme_controller *ctrlr, uint8_t log_page)
{
unsigned int i = 0;
while (i < sizeof(ctrlr->supported_log_pages.generic_page_id)) {
if (log_page == ctrlr->supported_log_pages.generic_page_id[i]) {
return true;
}
i++;
}
i = 0;
while (i < sizeof(ctrlr->supported_log_pages.command_set_page_id)) {
if (log_page == ctrlr->supported_log_pages.command_set_page_id[i]) {
return true;
}
i++;
}
i = 0;
while (i < sizeof(ctrlr->supported_log_pages.vendor_specific_page_id)) {
if (log_page == ctrlr->supported_log_pages.vendor_specific_page_id[i]) {
return true;
}
i++;
}
return false;
/* No bounds check necessary, since log_page is uint8_t and log_page_supported has 256 entries */
SPDK_STATIC_ASSERT(sizeof(ctrlr->log_page_supported) == 256, "log_page_supported size mismatch");
return ctrlr->log_page_supported[log_page];
}

View File

@ -232,23 +232,6 @@ struct nvme_namespace {
uint16_t flags;
};
/** \brief supported log pages. */
struct nvme_supported_log_pages {
uint32_t vendor_id;
/**
* List of supported generic log page IDs, terminated with 0.
*/
uint8_t generic_page_id[128];
/**
* List of supported command set page IDs, terminated with 0.
*/
uint8_t command_set_page_id[64];
/**
* List of supported vendor specific page IDs, terminated with 0.
*/
uint8_t vendor_specific_page_id[64];
};
/*
* One of these per allocated PCI device.
*/
@ -273,7 +256,7 @@ struct nvme_controller {
/* Cold data (not accessed in normal I/O path) is after this point. */
/** All the log pages supported */
struct nvme_supported_log_pages supported_log_pages;
bool log_page_supported[256];
/* Opaque handle to associated PCI device. */
void *devhandle;