>>> On 23.01.19 at 12:51, <nmant...@amazon.de> wrote: > --- a/xen/include/xen/nospec.h > +++ b/xen/include/xen/nospec.h > @@ -58,6 +58,21 @@ static inline unsigned long > array_index_mask_nospec(unsigned long index, > (typeof(_i)) (_i & _mask); \ > }) > > +/* > + * allow to insert a read memory barrier into conditionals > + */ > +#ifdef CONFIG_X86 > +static inline bool lfence_true(void) { rmb(); return true; } > +#else > +static inline bool lfence_true(void) { return true; } > +#endif > + > +/* > + * protect evaluation of conditional with respect to speculation > + */ > +#define evaluate_nospec(condition) \ > + (((condition) && lfence_true()) || !lfence_true())
It may be just me, but I think #define evaluate_nospec(condition) \ ((condition) ? lfence_true() : !lfence_true()) would better express the two-way nature of this. Jan _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel