[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v3 2/4] xen/save: allow the usage of zeroextend and a fixup function



On 18/11/15 16:37, Roger Pau Monne wrote:
> 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@xxxxxxxxxx>
> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> Cc: Jan Beulich <jbeulich@xxxxxxxx>
> Cc: Tim Deegan <tim@xxxxxxx>

Eww - how nasty.

I believe the only actual change here is:

+        if ( HVM_SAVE_HAS_COMPAT(_x) && d->length !=
HVM_SAVE_LENGTH(_x) )  \
+            r = HVM_SAVE_FIX_COMPAT(_x, (_dst),
d->length);                 \

which looks to be appropriate.

If so, Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>

> ---
>  xen/include/xen/hvm/save.h | 29 ++++++++++++++++-------------
>  1 file changed, 16 insertions(+), 13 deletions(-)
>
> diff --git a/xen/include/xen/hvm/save.h b/xen/include/xen/hvm/save.h
> index a97694e..22bcdb9 100644
> --- a/xen/include/xen/hvm/save.h
> +++ b/xen/include/xen/hvm/save.h
> @@ -58,19 +58,22 @@ void _hvm_read_entry(struct hvm_domain_context *h,
>   * Unmarshalling: check, then copy. Evaluates to zero on success. This load
>   * function requires the save entry to be the same size as the dest 
> structure.
>   */
> -#define _hvm_load_entry(_x, _h, _dst, _strict) ({                       \
> -    int r;                                                              \
> -    struct hvm_save_descriptor *d                                       \
> -        = (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));             \
> -    else if (HVM_SAVE_HAS_COMPAT(_x)                                    \
> -             && (r = _hvm_check_entry((_h), HVM_SAVE_CODE(_x),          \
> -                       HVM_SAVE_LENGTH_COMPAT(_x), (_strict))) == 0 ) { \
> -        _hvm_read_entry((_h), (_dst), HVM_SAVE_LENGTH_COMPAT(_x));      \
> -        r = HVM_SAVE_FIX_COMPAT(_x, (_dst), d->length);                 \
> -    }                                                                   \
> +#define _hvm_load_entry(_x, _h, _dst, _strict) ({                           \
> +    int r;                                                                  \
> +    struct hvm_save_descriptor *d                                           \
> +        = (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) && d->length != HVM_SAVE_LENGTH(_x) )  \
> +            r = HVM_SAVE_FIX_COMPAT(_x, (_dst), d->length);                 \
> +    }                                                                       \
> +    else if (HVM_SAVE_HAS_COMPAT(_x)                                        \
> +             && (r = _hvm_check_entry((_h), HVM_SAVE_CODE(_x),              \
> +                       HVM_SAVE_LENGTH_COMPAT(_x), (_strict))) == 0 ) {     \
> +        _hvm_read_entry((_h), (_dst), HVM_SAVE_LENGTH_COMPAT(_x));          \
> +        r = HVM_SAVE_FIX_COMPAT(_x, (_dst), d->length);                     \
> +    }                                                                       \
>      r; })
>  
>  #define hvm_load_entry(_x, _h, _dst)            \


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.