[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |