提交 77d67385 编写于 作者: D Dave Jiang 提交者: Dan Williams

isci: removing the kmalloc in smp request construct

It doesn't look like there is any reason to do a kmalloc. We can do the
byte swap in place and avoid the allocation. This allow us to remove
a kmalloc and a memcpy.
Signed-off-by: NDave Jiang <dave.jiang@intel.com>
Signed-off-by: NDan Williams <dan.j.williams@intel.com>
上级 8db02da5
...@@ -3187,7 +3187,7 @@ static enum sci_status isci_request_stp_request_construct( ...@@ -3187,7 +3187,7 @@ static enum sci_status isci_request_stp_request_construct(
*/ */
static void static void
scu_smp_request_construct_task_context(struct scic_sds_request *sci_req, scu_smp_request_construct_task_context(struct scic_sds_request *sci_req,
struct smp_req *smp_req) ssize_t req_len)
{ {
dma_addr_t dma_addr; dma_addr_t dma_addr;
struct scic_sds_controller *scic; struct scic_sds_controller *scic;
...@@ -3197,7 +3197,7 @@ scu_smp_request_construct_task_context(struct scic_sds_request *sci_req, ...@@ -3197,7 +3197,7 @@ scu_smp_request_construct_task_context(struct scic_sds_request *sci_req,
ssize_t word_cnt = sizeof(struct smp_req) / sizeof(u32); ssize_t word_cnt = sizeof(struct smp_req) / sizeof(u32);
/* byte swap the smp request. */ /* byte swap the smp request. */
sci_swab32_cpy(&sci_req->smp.cmd, smp_req, sci_swab32_cpy(&sci_req->smp.cmd, &sci_req->smp.cmd,
word_cnt); word_cnt);
task_context = scic_sds_request_get_task_context(sci_req); task_context = scic_sds_request_get_task_context(sci_req);
...@@ -3238,7 +3238,7 @@ scu_smp_request_construct_task_context(struct scic_sds_request *sci_req, ...@@ -3238,7 +3238,7 @@ scu_smp_request_construct_task_context(struct scic_sds_request *sci_req,
task_context->address_modifier = 0; task_context->address_modifier = 0;
/* 10h */ /* 10h */
task_context->ssp_command_iu_length = smp_req->req_len; task_context->ssp_command_iu_length = req_len;
/* 14h */ /* 14h */
task_context->transfer_length_bytes = 0; task_context->transfer_length_bytes = 0;
...@@ -3299,22 +3299,18 @@ scu_smp_request_construct_task_context(struct scic_sds_request *sci_req, ...@@ -3299,22 +3299,18 @@ scu_smp_request_construct_task_context(struct scic_sds_request *sci_req,
task_context->response_iu_lower = 0; task_context->response_iu_lower = 0;
} }
static enum sci_status scic_io_request_construct_smp(struct scic_sds_request *sci_req) static enum sci_status
scic_io_request_construct_smp(struct scic_sds_request *sci_req)
{ {
struct smp_req *smp_req = kmalloc(sizeof(*smp_req), GFP_KERNEL); struct smp_req *smp_req = &sci_req->smp.cmd;
if (!smp_req)
return SCI_FAILURE_INSUFFICIENT_RESOURCES;
sci_req->protocol = SCIC_SMP_PROTOCOL; sci_req->protocol = SCIC_SMP_PROTOCOL;
/* Construct the SMP SCU Task Context */
memcpy(smp_req, &sci_req->smp.cmd, sizeof(*smp_req));
/* /*
* Look at the SMP requests' header fields; for certain SAS 1.x SMP * Look at the SMP requests' header fields; for certain SAS 1.x SMP
* functions under SAS 2.0, a zero request length really indicates * functions under SAS 2.0, a zero request length really indicates
* a non-zero default length. */ * a non-zero default length.
*/
if (smp_req->req_len == 0) { if (smp_req->req_len == 0) {
switch (smp_req->func) { switch (smp_req->func) {
case SMP_DISCOVER: case SMP_DISCOVER:
...@@ -3332,12 +3328,10 @@ static enum sci_status scic_io_request_construct_smp(struct scic_sds_request *sc ...@@ -3332,12 +3328,10 @@ static enum sci_status scic_io_request_construct_smp(struct scic_sds_request *sc
} }
} }
scu_smp_request_construct_task_context(sci_req, smp_req); scu_smp_request_construct_task_context(sci_req, smp_req->req_len);
sci_base_state_machine_change_state(&sci_req->state_machine, sci_base_state_machine_change_state(&sci_req->state_machine,
SCI_BASE_REQUEST_STATE_CONSTRUCTED); SCI_BASE_REQUEST_STATE_CONSTRUCTED);
kfree(smp_req);
return SCI_SUCCESS; return SCI_SUCCESS;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册