err = mtgpu_fw_cancel_cmd_submit(vm_ctx, MTFW_SUBMISSION_CMD_CANCEL);
os_create_waitqueue_head(&vm_ctx->job_item_wait_queue);
err = os_wait_event_timeout(vm_ctx->job_item_wait_queue,
list_empty(&vm_ctx->job_item_list),
os_msecs_to_jiffies(WAIT_TIMEOUT_MS));
if (!err) {
/*
* May need to retry, because the skip cmd is also added to the cleanup,
* which may cause a stuck situation
* */
os_dev_err(dev, "%s:wait job_item_list for NULL timeout after cancel cmd, err = %d.",__func__, err);
return PVRSRV_ERROR_TIMEOUT;
}
os_destroy_waitqueue_head(vm_ctx->job_item_wait_queue);
vm_ctx->job_item_wait_queue = NULL;
err = mtgpu_fw_cancel_cmd_submit(vm_ctx, MTFW_SUBMISSION_CMD_TERMINATED);
如果要将上面这段代码封装到一个函数里面,那这个函数的名字取什么比较合适?
根据这段代码的功能,它主要是执行取消命令、等待队列清空、处理超时错误并最终提交终止命令。一个合适的函数名应该能够反映这些操作的主要意图。以下是几个可能的函数名:
mtgpu_handle_cmd_cancel_and_terminate
mtgpu_cancel_and_cleanup_jobs
mtgpu_cancel_cmd_and_wait
mtgpu_terminate_after_cancel
mtgpu_cancel_and_terminate_jobs
其中,mtgpu_cancel_and_cleanup_jobs
可能是一个比较合适的名字,因为它清晰地表达了函数的主要操作:取消命令并清理任务。
以下是如何将这段代码封装到一个函数中的示例:
#define WAIT_TIMEOUT_MS 1000 // 假设的超时时间
int mtgpu_cancel_and_cleanup_jobs(struct vm_context *vm_ctx, struct device *dev) {
int err;
err = mtgpu_fw_cancel_cmd_submit(vm_ctx, MTFW_SUBMISSION_CMD_CANCEL);
if (err) {
os_dev_err(dev, "%s: Failed to submit cancel command, err = %d.", __func__, err);
return err;
}
os_create_waitqueue_head(&vm_ctx->job_item_wait_queue);
err = os_wait_event_timeout(vm_ctx->job_item_wait_queue,
list_empty(&vm_ctx->job_item_list),
os_msecs_to_jiffies(WAIT_TIMEOUT_MS));
if (!err) {
/*
* May need to retry, because the skip cmd is also added to the cleanup,
* which may cause a stuck situation
*/
os_dev_err(dev, "%s: wait job_item_list for NULL timeout after cancel cmd, err = %d.", __func__, err);
os_destroy_waitqueue_head(vm_ctx->job_item_wait_queue);
vm_ctx->job_item_wait_queue = NULL;
return PVRSRV_ERROR_TIMEOUT;
}
os_destroy_waitqueue_head(vm_ctx->job_item_wait_queue);
vm_ctx->job_item_wait_queue = NULL;
err = mtgpu_fw_cancel_cmd_submit(vm_ctx, MTFW_SUBMISSION_CMD_TERMINATED);
if (err) {
os_dev_err(dev, "%s: Failed to submit terminate command, err = %d.", __func__, err);
return err;
}
return 0;
}
这个函数名 mtgpu_cancel_and_cleanup_jobs
反映了函数的主要操作:取消命令并清理任务。你可以根据具体的需求和代码风格进行调整。