HVM/save: allow the usage of zeroextend and a fixup function
authorRoger Pau Monné <roger.pau@citrix.com>
Thu, 26 Nov 2015 14:51:00 +0000 (15:51 +0100)
committerJan Beulich <jbeulich@suse.com>
Thu, 26 Nov 2015 14:51:00 +0000 (15:51 +0100)
With the current compat implementation in the save/restore context handling,
only one compat structure is allowed, and using _zeroextend prevents the
fixup function from being called.

In order to allow for the compat handling layer to be able to handle
different compat versions allow calling the fixup function with
hvm_load_entry_zeroextend.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/include/xen/hvm/save.h

index 51bc7d5521ca137459cf285501a750b61b417c61..a9a78f91339d795d98d41e83c0eb0df18438ed55 100644 (file)
@@ -64,7 +64,12 @@ void _hvm_read_entry(struct hvm_domain_context *h,
         = (struct hvm_save_descriptor *)&(_h)->data[(_h)->cur];         \
     if ( (r = _hvm_check_entry((_h), HVM_SAVE_CODE(_x),                 \
                HVM_SAVE_LENGTH(_x), (_strict))) == 0 )                  \
+    {                                                                   \
         _hvm_read_entry((_h), (_dst), HVM_SAVE_LENGTH(_x));             \
+        if ( HVM_SAVE_HAS_COMPAT(_x) &&                                 \
+             desc->length != HVM_SAVE_LENGTH(_x) )                      \
+            r = HVM_SAVE_FIX_COMPAT(_x, (_dst), desc->length);          \
+    }                                                                   \
     else if (HVM_SAVE_HAS_COMPAT(_x)                                    \
              && (r = _hvm_check_entry((_h), HVM_SAVE_CODE(_x),          \
                        HVM_SAVE_LENGTH_COMPAT(_x), (_strict))) == 0 ) { \