nvmf: share Get/Set Features - Number of Queues
The code in virtual.c and direct.c was identical - move it to session.c to share it. Change-Id: Ic6e4e9238e8ffacb212e76293c440109aa839f8c Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
48631ef2b9
commit
2bfb991e42
@ -110,15 +110,12 @@ nvmf_direct_ctrlr_process_admin_cmd(struct spdk_nvmf_request *req)
|
|||||||
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
|
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
|
||||||
struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl;
|
struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl;
|
||||||
struct spdk_nvmf_subsystem *subsystem = session->subsys;
|
struct spdk_nvmf_subsystem *subsystem = session->subsys;
|
||||||
uint32_t nr_io_queues = 0;
|
|
||||||
union spdk_nvme_vs_register vs;
|
union spdk_nvme_vs_register vs;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
uint8_t feature;
|
uint8_t feature;
|
||||||
|
|
||||||
/* pre-set response details for this command */
|
/* pre-set response details for this command */
|
||||||
response->status.sc = SPDK_NVME_SC_SUCCESS;
|
response->status.sc = SPDK_NVME_SC_SUCCESS;
|
||||||
/* Extra 1 connection for Admin queue */
|
|
||||||
nr_io_queues = session->max_connections_allowed - 1;
|
|
||||||
|
|
||||||
switch (cmd->opc) {
|
switch (cmd->opc) {
|
||||||
case SPDK_NVME_OPC_IDENTIFY:
|
case SPDK_NVME_OPC_IDENTIFY:
|
||||||
@ -152,11 +149,7 @@ nvmf_direct_ctrlr_process_admin_cmd(struct spdk_nvmf_request *req)
|
|||||||
feature = cmd->cdw10 & 0xff; /* mask out the FID value */
|
feature = cmd->cdw10 & 0xff; /* mask out the FID value */
|
||||||
switch (feature) {
|
switch (feature) {
|
||||||
case SPDK_NVME_FEAT_NUMBER_OF_QUEUES:
|
case SPDK_NVME_FEAT_NUMBER_OF_QUEUES:
|
||||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Get Features - Number of Queues\n");
|
return spdk_nvmf_session_get_features_number_of_queues(req);
|
||||||
/* Number of IO queues has a zero based value */
|
|
||||||
response->cdw0 = ((nr_io_queues - 1) << 16) |
|
|
||||||
(nr_io_queues - 1);
|
|
||||||
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
|
||||||
case SPDK_NVME_FEAT_HOST_IDENTIFIER:
|
case SPDK_NVME_FEAT_HOST_IDENTIFIER:
|
||||||
return spdk_nvmf_session_get_features_host_identifier(req);
|
return spdk_nvmf_session_get_features_host_identifier(req);
|
||||||
case SPDK_NVME_FEAT_KEEP_ALIVE_TIMER:
|
case SPDK_NVME_FEAT_KEEP_ALIVE_TIMER:
|
||||||
@ -169,18 +162,7 @@ nvmf_direct_ctrlr_process_admin_cmd(struct spdk_nvmf_request *req)
|
|||||||
feature = cmd->cdw10 & 0xff; /* mask out the FID value */
|
feature = cmd->cdw10 & 0xff; /* mask out the FID value */
|
||||||
switch (feature) {
|
switch (feature) {
|
||||||
case SPDK_NVME_FEAT_NUMBER_OF_QUEUES:
|
case SPDK_NVME_FEAT_NUMBER_OF_QUEUES:
|
||||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Set Features - Number of Queues, cdw11 0x%x\n", cmd->cdw11);
|
return spdk_nvmf_session_set_features_number_of_queues(req);
|
||||||
|
|
||||||
/* verify that the contoller is ready to process commands */
|
|
||||||
if (session->num_connections > 1) {
|
|
||||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Queue pairs already active!\n");
|
|
||||||
response->status.sc = SPDK_NVME_SC_COMMAND_SEQUENCE_ERROR;
|
|
||||||
} else {
|
|
||||||
/* Number of IO queues has a zero based value */
|
|
||||||
response->cdw0 = ((nr_io_queues - 1) << 16) |
|
|
||||||
(nr_io_queues - 1);
|
|
||||||
}
|
|
||||||
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
|
||||||
case SPDK_NVME_FEAT_HOST_IDENTIFIER:
|
case SPDK_NVME_FEAT_HOST_IDENTIFIER:
|
||||||
return spdk_nvmf_session_set_features_host_identifier(req);
|
return spdk_nvmf_session_set_features_host_identifier(req);
|
||||||
case SPDK_NVME_FEAT_KEEP_ALIVE_TIMER:
|
case SPDK_NVME_FEAT_KEEP_ALIVE_TIMER:
|
||||||
|
@ -652,3 +652,47 @@ spdk_nvmf_session_get_features_keep_alive_timer(struct spdk_nvmf_request *req)
|
|||||||
rsp->cdw0 = session->kato;
|
rsp->cdw0 = session->kato;
|
||||||
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
spdk_nvmf_session_set_features_number_of_queues(struct spdk_nvmf_request *req)
|
||||||
|
{
|
||||||
|
struct spdk_nvmf_session *session = req->conn->sess;
|
||||||
|
struct spdk_nvme_cpl *rsp = &req->rsp->nvme_cpl;
|
||||||
|
uint32_t nr_io_queues;
|
||||||
|
|
||||||
|
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Set Features - Number of Queues, cdw11 0x%x\n",
|
||||||
|
req->cmd->nvme_cmd.cdw11);
|
||||||
|
|
||||||
|
/* Extra 1 connection for Admin queue */
|
||||||
|
nr_io_queues = session->max_connections_allowed - 1;
|
||||||
|
|
||||||
|
/* verify that the contoller is ready to process commands */
|
||||||
|
if (session->num_connections > 1) {
|
||||||
|
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Queue pairs already active!\n");
|
||||||
|
rsp->status.sc = SPDK_NVME_SC_COMMAND_SEQUENCE_ERROR;
|
||||||
|
} else {
|
||||||
|
/* Number of IO queues has a zero based value */
|
||||||
|
rsp->cdw0 = ((nr_io_queues - 1) << 16) |
|
||||||
|
(nr_io_queues - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
spdk_nvmf_session_get_features_number_of_queues(struct spdk_nvmf_request *req)
|
||||||
|
{
|
||||||
|
struct spdk_nvmf_session *session = req->conn->sess;
|
||||||
|
struct spdk_nvme_cpl *rsp = &req->rsp->nvme_cpl;
|
||||||
|
uint32_t nr_io_queues;
|
||||||
|
|
||||||
|
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Get Features - Number of Queues\n");
|
||||||
|
|
||||||
|
nr_io_queues = session->max_connections_allowed - 1;
|
||||||
|
|
||||||
|
/* Number of IO queues has a zero based value */
|
||||||
|
rsp->cdw0 = ((nr_io_queues - 1) << 16) |
|
||||||
|
(nr_io_queues - 1);
|
||||||
|
|
||||||
|
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
||||||
|
}
|
||||||
|
@ -122,4 +122,7 @@ int spdk_nvmf_session_get_features_host_identifier(struct spdk_nvmf_request *req
|
|||||||
int spdk_nvmf_session_set_features_keep_alive_timer(struct spdk_nvmf_request *req);
|
int spdk_nvmf_session_set_features_keep_alive_timer(struct spdk_nvmf_request *req);
|
||||||
int spdk_nvmf_session_get_features_keep_alive_timer(struct spdk_nvmf_request *req);
|
int spdk_nvmf_session_get_features_keep_alive_timer(struct spdk_nvmf_request *req);
|
||||||
|
|
||||||
|
int spdk_nvmf_session_set_features_number_of_queues(struct spdk_nvmf_request *req);
|
||||||
|
int spdk_nvmf_session_get_features_number_of_queues(struct spdk_nvmf_request *req);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -271,7 +271,6 @@ static int
|
|||||||
nvmf_virtual_ctrlr_get_features(struct spdk_nvmf_request *req)
|
nvmf_virtual_ctrlr_get_features(struct spdk_nvmf_request *req)
|
||||||
{
|
{
|
||||||
uint8_t feature;
|
uint8_t feature;
|
||||||
uint32_t nr_io_queues;
|
|
||||||
struct spdk_nvmf_session *session = req->conn->sess;
|
struct spdk_nvmf_session *session = req->conn->sess;
|
||||||
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
|
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
|
||||||
struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl;
|
struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl;
|
||||||
@ -279,12 +278,7 @@ nvmf_virtual_ctrlr_get_features(struct spdk_nvmf_request *req)
|
|||||||
feature = cmd->cdw10 & 0xff; /* mask out the FID value */
|
feature = cmd->cdw10 & 0xff; /* mask out the FID value */
|
||||||
switch (feature) {
|
switch (feature) {
|
||||||
case SPDK_NVME_FEAT_NUMBER_OF_QUEUES:
|
case SPDK_NVME_FEAT_NUMBER_OF_QUEUES:
|
||||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Get Features - Number of Queues\n");
|
return spdk_nvmf_session_get_features_number_of_queues(req);
|
||||||
nr_io_queues = session->max_connections_allowed - 1;
|
|
||||||
/* Number of IO queues has a zero based value */
|
|
||||||
response->cdw0 = ((nr_io_queues - 1) << 16) |
|
|
||||||
(nr_io_queues - 1);
|
|
||||||
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
|
||||||
case SPDK_NVME_FEAT_VOLATILE_WRITE_CACHE:
|
case SPDK_NVME_FEAT_VOLATILE_WRITE_CACHE:
|
||||||
response->cdw0 = 1;
|
response->cdw0 = 1;
|
||||||
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
||||||
@ -307,7 +301,6 @@ static int
|
|||||||
nvmf_virtual_ctrlr_set_features(struct spdk_nvmf_request *req)
|
nvmf_virtual_ctrlr_set_features(struct spdk_nvmf_request *req)
|
||||||
{
|
{
|
||||||
uint8_t feature;
|
uint8_t feature;
|
||||||
uint32_t nr_io_queues = 0;
|
|
||||||
struct spdk_nvmf_session *session = req->conn->sess;
|
struct spdk_nvmf_session *session = req->conn->sess;
|
||||||
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
|
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
|
||||||
struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl;
|
struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl;
|
||||||
@ -315,18 +308,7 @@ nvmf_virtual_ctrlr_set_features(struct spdk_nvmf_request *req)
|
|||||||
feature = cmd->cdw10 & 0xff; /* mask out the FID value */
|
feature = cmd->cdw10 & 0xff; /* mask out the FID value */
|
||||||
switch (feature) {
|
switch (feature) {
|
||||||
case SPDK_NVME_FEAT_NUMBER_OF_QUEUES:
|
case SPDK_NVME_FEAT_NUMBER_OF_QUEUES:
|
||||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Set Features - Number of Queues, cdw11 0x%x\n", cmd->cdw11);
|
return spdk_nvmf_session_set_features_number_of_queues(req);
|
||||||
nr_io_queues = session->max_connections_allowed - 1;
|
|
||||||
/* verify that the contoller is ready to process commands */
|
|
||||||
if (session->num_connections > 1) {
|
|
||||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Queue pairs already active!\n");
|
|
||||||
response->status.sc = SPDK_NVME_SC_COMMAND_SEQUENCE_ERROR;
|
|
||||||
} else {
|
|
||||||
/* Number of IO queues has a zero based value */
|
|
||||||
response->cdw0 = ((nr_io_queues - 1) << 16) |
|
|
||||||
(nr_io_queues - 1);
|
|
||||||
}
|
|
||||||
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
|
||||||
case SPDK_NVME_FEAT_KEEP_ALIVE_TIMER:
|
case SPDK_NVME_FEAT_KEEP_ALIVE_TIMER:
|
||||||
return spdk_nvmf_session_set_features_keep_alive_timer(req);
|
return spdk_nvmf_session_set_features_keep_alive_timer(req);
|
||||||
case SPDK_NVME_FEAT_ASYNC_EVENT_CONFIGURATION:
|
case SPDK_NVME_FEAT_ASYNC_EVENT_CONFIGURATION:
|
||||||
|
Loading…
Reference in New Issue
Block a user