[xen stable-4.6] tools/libxc: Avoid generating inappropriate zero-content records

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[xen stable-4.6] tools/libxc: Avoid generating inappropriate zero-content records

patchbot
commit 4c1e2d33787297405a2a1aebe870bbc05f9d1a52
Author:     Andrew Cooper <[hidden email]>
AuthorDate: Thu Mar 30 17:32:32 2017 +0100
Commit:     Ian Jackson <[hidden email]>
CommitDate: Tue Feb 27 16:00:12 2018 +0000

    tools/libxc: Avoid generating inappropriate zero-content records
   
    The code as written attempted to elide zero-content records, as such records
    serve no purpose but come with a performance hit.  Unfortunately, in the case
    where the hypervisor reported max size is non-zero, but the actual size is
    zero, the record is not elided.
   
    This previously tripped up the sanity checks in the restore side of migration,
    but as the underlying reasons for eliding the records in the first place are
    still valid, fix the elision logic.
   
    Signed-off-by: Andrew Cooper <[hidden email]>
    Reviewed-by: Wei Liu <[hidden email]>
    (cherry picked from commit 72efb1df629421037e2795f5529210aaa95ec72e)
    (cherry picked from commit c31070f3505fb12f78d5b67498c6b1e460209c9a)
    (cherry picked from commit 60e129725abe6163e63e838121d8a1c608710a20)
---
 tools/libxc/xc_sr_save_x86_hvm.c |  4 ++++
 tools/libxc/xc_sr_save_x86_pv.c  | 12 ++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/tools/libxc/xc_sr_save_x86_hvm.c b/tools/libxc/xc_sr_save_x86_hvm.c
index 3c006d5b1a..91fb348184 100644
--- a/tools/libxc/xc_sr_save_x86_hvm.c
+++ b/tools/libxc/xc_sr_save_x86_hvm.c
@@ -112,6 +112,10 @@ static int write_hvm_params(struct xc_sr_context *ctx)
         }
     }
 
+    /* No params? Skip this record. */
+    if ( hdr.count == 0 )
+        return 0;
+
     rc = write_split_record(ctx, &rec, entries, hdr.count * sizeof(*entries));
     if ( rc )
         PERROR("Failed to write HVM_PARAMS record");
diff --git a/tools/libxc/xc_sr_save_x86_pv.c b/tools/libxc/xc_sr_save_x86_pv.c
index f29cfc9e88..dd6d8f4a2b 100644
--- a/tools/libxc/xc_sr_save_x86_pv.c
+++ b/tools/libxc/xc_sr_save_x86_pv.c
@@ -355,6 +355,10 @@ static int write_one_vcpu_extended(struct xc_sr_context *ctx, uint32_t id)
         return -1;
     }
 
+    /* No content? Skip the record. */
+    if ( domctl.u.ext_vcpucontext.size == 0 )
+        return 0;
+
     return write_split_record(ctx, &rec, &domctl.u.ext_vcpucontext,
                               domctl.u.ext_vcpucontext.size);
 }
@@ -410,6 +414,10 @@ static int write_one_vcpu_xsave(struct xc_sr_context *ctx, uint32_t id)
         goto err;
     }
 
+    /* No xsave state? Skip this record. */
+    if ( domctl.u.vcpuextstate.size == 0 )
+        goto out;
+
     rc = write_split_record(ctx, &rec, buffer, domctl.u.vcpuextstate.size);
     if ( rc )
         goto err;
@@ -476,6 +484,10 @@ static int write_one_vcpu_msrs(struct xc_sr_context *ctx, uint32_t id)
         goto err;
     }
 
+    /* No MSRs? Skip this record. */
+    if ( domctl.u.vcpu_msrs.msr_count == 0 )
+        goto out;
+
     rc = write_split_record(ctx, &rec, buffer,
                             domctl.u.vcpu_msrs.msr_count *
                             sizeof(xen_domctl_vcpu_msr_t));
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.6

_______________________________________________
Xen-changelog mailing list
[hidden email]
https://lists.xenproject.org/xen-changelog