Page MenuHomeFreeBSD

D54244.id168167.diff
No OneTemporary

D54244.id168167.diff

diff --git a/sys/dev/ufshci/ufshci_ctrlr.c b/sys/dev/ufshci/ufshci_ctrlr.c
--- a/sys/dev/ufshci/ufshci_ctrlr.c
+++ b/sys/dev/ufshci/ufshci_ctrlr.c
@@ -426,24 +426,15 @@
struct ufshci_request *req)
{
return (
- ufshci_req_queue_submit_request(&ctrlr->task_mgmt_req_queue, req,
- /*is_admin*/ false));
+ ufshci_req_queue_submit_request(&ctrlr->task_mgmt_req_queue, req));
}
int
-ufshci_ctrlr_submit_admin_request(struct ufshci_controller *ctrlr,
+ufshci_ctrlr_submit_transfer_request(struct ufshci_controller *ctrlr,
struct ufshci_request *req)
{
- return (ufshci_req_queue_submit_request(&ctrlr->transfer_req_queue, req,
- /*is_admin*/ true));
-}
-
-int
-ufshci_ctrlr_submit_io_request(struct ufshci_controller *ctrlr,
- struct ufshci_request *req)
-{
- return (ufshci_req_queue_submit_request(&ctrlr->transfer_req_queue, req,
- /*is_admin*/ false));
+ return (
+ ufshci_req_queue_submit_request(&ctrlr->transfer_req_queue, req));
}
int
diff --git a/sys/dev/ufshci/ufshci_ctrlr_cmd.c b/sys/dev/ufshci/ufshci_ctrlr_cmd.c
--- a/sys/dev/ufshci/ufshci_ctrlr_cmd.c
+++ b/sys/dev/ufshci/ufshci_ctrlr_cmd.c
@@ -44,12 +44,13 @@
req->request_size = sizeof(struct ufshci_nop_out_upiu);
req->response_size = sizeof(struct ufshci_nop_in_upiu);
+ req->is_admin = true;
upiu = (struct ufshci_nop_out_upiu *)&req->request_upiu;
memset(upiu, 0, req->request_size);
upiu->header.trans_type = UFSHCI_UPIU_TRANSACTION_CODE_NOP_OUT;
- ufshci_ctrlr_submit_admin_request(ctrlr, req);
+ ufshci_ctrlr_submit_transfer_request(ctrlr, req);
}
void
@@ -63,6 +64,7 @@
req->request_size = sizeof(struct ufshci_query_request_upiu);
req->response_size = sizeof(struct ufshci_query_response_upiu);
+ req->is_admin = true;
upiu = (struct ufshci_query_request_upiu *)&req->request_upiu;
memset(upiu, 0, req->request_size);
@@ -75,5 +77,5 @@
upiu->value_64 = param.value;
upiu->length = param.desc_size;
- ufshci_ctrlr_submit_admin_request(ctrlr, req);
+ ufshci_ctrlr_submit_transfer_request(ctrlr, req);
}
diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
--- a/sys/dev/ufshci/ufshci_dev.c
+++ b/sys/dev/ufshci/ufshci_dev.c
@@ -33,7 +33,8 @@
&status, param);
ufshci_completion_poll(&status);
if (status.error) {
- ufshci_printf(ctrlr, "ufshci_dev_read_descriptor failed!\n");
+ ufshci_printf(ctrlr,
+ "Failed to send Read Descriptor query request!\n");
return (ENXIO);
}
diff --git a/sys/dev/ufshci/ufshci_private.h b/sys/dev/ufshci/ufshci_private.h
--- a/sys/dev/ufshci/ufshci_private.h
+++ b/sys/dev/ufshci/ufshci_private.h
@@ -451,9 +451,7 @@
int ufshci_ctrlr_submit_task_mgmt_request(struct ufshci_controller *ctrlr,
struct ufshci_request *req);
-int ufshci_ctrlr_submit_admin_request(struct ufshci_controller *ctrlr,
- struct ufshci_request *req);
-int ufshci_ctrlr_submit_io_request(struct ufshci_controller *ctrlr,
+int ufshci_ctrlr_submit_transfer_request(struct ufshci_controller *ctrlr,
struct ufshci_request *req);
int ufshci_ctrlr_send_nop(struct ufshci_controller *ctrlr);
@@ -501,7 +499,7 @@
void ufshci_req_queue_fail(struct ufshci_controller *ctrlr,
struct ufshci_req_queue *req_queue);
int ufshci_req_queue_submit_request(struct ufshci_req_queue *req_queue,
- struct ufshci_request *req, bool is_admin);
+ struct ufshci_request *req);
void ufshci_req_queue_complete_tracker(struct ufshci_tracker *tr);
/* Request Single Doorbell Queue */
diff --git a/sys/dev/ufshci/ufshci_req_queue.c b/sys/dev/ufshci/ufshci_req_queue.c
--- a/sys/dev/ufshci/ufshci_req_queue.c
+++ b/sys/dev/ufshci/ufshci_req_queue.c
@@ -268,9 +268,8 @@
error = ufshci_req_queue_response_is_error(req_queue, ocs,
&cpl.response_upiu);
- /* TODO: Implement retry */
- // retriable = ufshci_completion_is_retry(cpl);
- retriable = false;
+ /* Retry for admin commands */
+ retriable = req->is_admin;
retry = error && retriable &&
req->retries < req_queue->ctrlr->retry_count;
if (retry)
@@ -778,7 +777,7 @@
int
ufshci_req_queue_submit_request(struct ufshci_req_queue *req_queue,
- struct ufshci_request *req, bool is_admin)
+ struct ufshci_request *req)
{
struct ufshci_hw_queue *hwq;
uint32_t error;
diff --git a/sys/dev/ufshci/ufshci_sim.c b/sys/dev/ufshci/ufshci_sim.c
--- a/sys/dev/ufshci/ufshci_sim.c
+++ b/sys/dev/ufshci/ufshci_sim.c
@@ -165,6 +165,7 @@
data_direction = UFSHCI_DATA_DIRECTION_NO_DATA_TRANSFER;
}
req->data_direction = data_direction;
+ req->is_admin = false;
upiu = (struct ufshci_cmd_command_upiu *)&req->request_upiu;
memset(upiu, 0, req->request_size);
@@ -191,7 +192,7 @@
}
memcpy(upiu->cdb, cdb, csio->cdb_len);
- error = ufshci_ctrlr_submit_io_request(ctrlr, req);
+ error = ufshci_ctrlr_submit_transfer_request(ctrlr, req);
if (error == EBUSY) {
ccb->ccb_h.status = CAM_SCSI_BUSY;
xpt_done(ccb);

File Metadata

Mime Type
text/plain
Expires
Wed, Feb 4, 7:04 AM (1 h, 25 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28432603
Default Alt Text
D54244.id168167.diff (4 KB)

Event Timeline