From 8cad0b9bc2dc10a1cc27e332f04d857b45ba20bc Mon Sep 17 00:00:00 2001 From: panhengchang Date: Sat, 13 Dec 2025 20:16:09 +0800 Subject: [PATCH] remove check and wait in export_track --- arch/arm64/kvm/virtcca_mig.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/arch/arm64/kvm/virtcca_mig.c b/arch/arm64/kvm/virtcca_mig.c index aa9e299e87ae..6cba657af6b6 100644 --- a/arch/arm64/kvm/virtcca_mig.c +++ b/arch/arm64/kvm/virtcca_mig.c @@ -35,7 +35,7 @@ #define SEND_RETRY_LIMIT 5 #define RECV_RETRY_LIMIT 5 #define CONNECT_RETRY_LIMIT 3 -#define TMI_IMPORT_TIMEOUT_MS 600000 +#define TMI_IMPORT_TIMEOUT_MS 10000 static struct virtcca_mig_capabilities g_virtcca_mig_caps; static struct migcvm_agent_listen_cids g_migcvm_agent_listen_cid; @@ -938,12 +938,15 @@ static int virtcca_mig_stream_import_mem(struct kvm *kvm, struct virtcca_mig_str gpa_list_info_val = tmi_res.a2; if (ret == TMI_SUCCESS) { - if (copy_to_user(data, &gpa_list_info_val, sizeof(uint64_t))) - return -EFAULT; + if (copy_to_user(data, &gpa_list_info_val, sizeof(uint64_t))) { + ret = -EFAULT; + goto out; + } } else { pr_err("%s: err=%llx, gfn=%llx\n", __func__, ret, (uint64_t)gpa_list->entries[0].gfn); - return -EIO; + ret = -EIO; + goto out; } out: @@ -1015,7 +1018,6 @@ static int virtcca_mig_export_track(struct kvm *kvm, struct virtcca_mig_stream * { union virtcca_mig_stream_info stream_info = {.val = 0}; struct virtcca_cvm *cvm = kvm->arch.virtcca_cvm; - unsigned long timeout = jiffies + msecs_to_jiffies(TMI_IMPORT_TIMEOUT_MS); uint64_t in_order, ret; if (copy_from_user(&in_order, (void __user *)data, sizeof(uint64_t))) @@ -1026,17 +1028,7 @@ static int virtcca_mig_export_track(struct kvm *kvm, struct virtcca_mig_stream * * token by sending a non-0 value through tdx_cmd.data. */ stream_info.in_order = !!in_order; - do { - ret = tmi_export_track(cvm->rd, stream->mbmd.hpa_and_size, stream_info.val); - msleep(1); - - if (time_after(jiffies, timeout)) { - pr_err("tmi_export_track timeout (%d ms)", TMI_IMPORT_TIMEOUT_MS); - ret = ETIMEDOUT; - break; - } - } while (ret == TMI_IMPORT_INCOMPLETE); - + ret = tmi_export_track(cvm->rd, stream->mbmd.hpa_and_size, stream_info.val); if (ret != TMI_SUCCESS) { pr_err("%s: failed, err=%llx\n", __func__, ret); return -EIO; -- Gitee