[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 02/13] xen/bitops: Cleanup ahead of rearrangements
On 24.05.2024 22:03, Andrew Cooper wrote: > * Rename __attribute_pure__ to just __pure before it gains users. > * Introduce __constructor which is going to be used in lib/, and is > unconditionally cf_check. > * Identify the areas of xen/bitops.h which are a mess. > * Introduce xen/boot-check.h as helpers for compile and boot time testing. > This provides a statement of the ABI, and a confirmation that arch-specific > implementations behave as expected. > > Sadly Clang 7 and older isn't happy with the compile time checks. Skip them, > and just rely on the runtime checks. > > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Further remarks, though: > --- > xen/include/xen/bitops.h | 13 ++++++-- > xen/include/xen/boot-check.h | 60 ++++++++++++++++++++++++++++++++++++ > xen/include/xen/compiler.h | 3 +- > 3 files changed, 72 insertions(+), 4 deletions(-) > create mode 100644 xen/include/xen/boot-check.h The bulk of the changes isn't about bitops; it's just that you're intending to first use it for testing there. The subject prefix therefore is somewhat misleading. > --- /dev/null > +++ b/xen/include/xen/boot-check.h > @@ -0,0 +1,60 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > + > +/* > + * Helpers for boot-time checks of basic logic, including confirming that > + * examples which should be calculated by the compiler are. > + */ > +#ifndef XEN_BOOT_CHECK_H > +#define XEN_BOOT_CHECK_H > + > +#include <xen/lib.h> > + > +/* Hide a value from the optimiser. */ > +#define HIDE(x) \ > + ({ typeof(x) _x = (x); asm volatile ( "" : "+r" (_x) ); _x; }) In principle this is a macro that could be of use elsewhere. That's also reflected in its entirely generic name. It therefore feels mis-placed in this header. Otoh though the use of "+r" is more restricting than truly necessary: While I'm not sure if "+g" would work, i.e. if that wouldn't cause issues with literals, pretty surely "+rm" ought to work, removing the strict requirement for the compiler to put a certain value in a register. Assuming you may have reservations against "+g" / "+rm" (and hence the construct wants keeping here), maybe rename to e.g. BOOT_CHECK_HIDE()? Alternatively, if generalized, moving to xen/macros.h would seem appropriate to me. Finally, plainly as a remark with no request for any change (but possibly a minor argument against moving to xen/macros.h), this construct won't, afaict, work if x is of array(-of-const) type. A more specialized variant may need introducing, should any such use ever appear. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |