vhost_scsi: moved spdk_scsi_task_construct() out of spdk_vhost_get_tasks()
spdk_vhost_get_tasks() is now fully generic function for getting tasks, which have to be specifically initialized *later*. This allows us to remove extra loop inside spdk_vhost_get_tasks(). Change-Id: I9a9155189599cbae1b2eb94f64fba29a3e2d010b Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/366723 Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
d3d4a688cd
commit
67cd059c11
@ -132,9 +132,9 @@ spdk_vhost_task_free_cb(struct spdk_scsi_task *scsi_task)
|
||||
|
||||
static void
|
||||
spdk_vhost_get_tasks(struct spdk_vhost_scsi_dev *svdev, struct spdk_vhost_task **tasks,
|
||||
size_t count, spdk_scsi_task_cpl cpl_fn)
|
||||
size_t count)
|
||||
{
|
||||
size_t res_count, i;
|
||||
size_t res_count;
|
||||
|
||||
res_count = spdk_ring_dequeue(g_task_pool, (void **)tasks, count);
|
||||
if (res_count != count) {
|
||||
@ -145,10 +145,6 @@ spdk_vhost_get_tasks(struct spdk_vhost_scsi_dev *svdev, struct spdk_vhost_task *
|
||||
|
||||
assert(svdev->vdev.task_cnt <= INT_MAX - (int) res_count);
|
||||
svdev->vdev.task_cnt += res_count;
|
||||
for (i = 0; i < res_count; ++i) {
|
||||
memset(tasks[i], 0, sizeof(*tasks[i]));
|
||||
spdk_scsi_task_construct(&tasks[i]->scsi, cpl_fn, spdk_vhost_task_free_cb, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -331,6 +327,7 @@ process_ctrl_request(struct spdk_vhost_task *task)
|
||||
struct virtio_scsi_ctrl_tmf_req *ctrl_req;
|
||||
struct virtio_scsi_ctrl_an_resp *an_resp;
|
||||
|
||||
spdk_scsi_task_construct(&task->scsi, spdk_vhost_task_mgmt_cpl, spdk_vhost_task_free_cb, NULL);
|
||||
desc = spdk_vhost_vq_get_desc(task->vq, task->req_idx);
|
||||
ctrl_req = spdk_vhost_gpa_to_vva(&task->svdev->vdev, desc->addr);
|
||||
|
||||
@ -412,6 +409,7 @@ task_data_setup(struct spdk_vhost_task *task,
|
||||
goto abort_task;
|
||||
}
|
||||
|
||||
spdk_scsi_task_construct(&task->scsi, spdk_vhost_task_cpl, spdk_vhost_task_free_cb, NULL);
|
||||
*req = spdk_vhost_gpa_to_vva(vdev, desc->addr);
|
||||
|
||||
desc = spdk_vhost_vring_desc_get_next(vq->desc, desc);
|
||||
@ -540,9 +538,10 @@ process_controlq(struct spdk_vhost_scsi_dev *svdev, struct rte_vhost_vring *vq)
|
||||
uint16_t reqs_cnt, i;
|
||||
|
||||
reqs_cnt = spdk_vhost_vq_avail_ring_get(vq, reqs, RTE_DIM(reqs));
|
||||
spdk_vhost_get_tasks(svdev, tasks, reqs_cnt, spdk_vhost_task_mgmt_cpl);
|
||||
spdk_vhost_get_tasks(svdev, tasks, reqs_cnt);
|
||||
for (i = 0; i < reqs_cnt; i++) {
|
||||
task = tasks[i];
|
||||
memset(task, 0, sizeof(*task));
|
||||
task->vq = vq;
|
||||
task->svdev = svdev;
|
||||
task->req_idx = reqs[i];
|
||||
@ -563,13 +562,14 @@ process_requestq(struct spdk_vhost_scsi_dev *svdev, struct rte_vhost_vring *vq)
|
||||
reqs_cnt = spdk_vhost_vq_avail_ring_get(vq, reqs, RTE_DIM(reqs));
|
||||
assert(reqs_cnt <= 32);
|
||||
|
||||
spdk_vhost_get_tasks(svdev, tasks, reqs_cnt, spdk_vhost_task_cpl);
|
||||
spdk_vhost_get_tasks(svdev, tasks, reqs_cnt);
|
||||
|
||||
for (i = 0; i < reqs_cnt; i++) {
|
||||
SPDK_TRACELOG(SPDK_TRACE_VHOST_SCSI, "====== Starting processing request idx %"PRIu16"======\n",
|
||||
reqs[i]);
|
||||
|
||||
task = tasks[i];
|
||||
memset(task, 0, sizeof(*task));
|
||||
task->vq = vq;
|
||||
task->svdev = svdev;
|
||||
task->req_idx = reqs[i];
|
||||
|
Loading…
Reference in New Issue
Block a user