[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] xen/typesafe: Force helpers to be always_inline
Clang in particular has a habit of out-of-lining these and creating multiple local copies of _mfn() and mfn_x(), etc. Override this behaviour. Adjust bool_t to bool for the *_eq() helpers. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: George Dunlap <George.Dunlap@xxxxxxxxxxxxx> CC: Ian Jackson <ian.jackson@xxxxxxxxxx> CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> CC: Stefano Stabellini <sstabellini@xxxxxxxxxx> CC: Tim Deegan <tim@xxxxxxx> CC: Wei Liu <wl@xxxxxxx> CC: Julien Grall <julien@xxxxxxx> CC: Juergen Gross <jgross@xxxxxxxx> Spotted while looking at the code generation of evalute_nospec() Semi-RFC for-4.13. Nothing (currently un-broken) will break without this, but it is a step on the way to being able to use Clang and Livepatch in combination. --- xen/include/xen/iommu.h | 4 ++-- xen/include/xen/mm.h | 16 ++++++++-------- xen/include/xen/typesafe.h | 8 ++++---- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/xen/include/xen/iommu.h b/xen/include/xen/iommu.h index 974bd3ffe8..c77b8c1a22 100644 --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -42,12 +42,12 @@ TYPE_SAFE(uint64_t, dfn); #undef dfn_x #endif -static inline dfn_t dfn_add(dfn_t dfn, unsigned long i) +static always_inline dfn_t dfn_add(dfn_t dfn, unsigned long i) { return _dfn(dfn_x(dfn) + i); } -static inline bool_t dfn_eq(dfn_t x, dfn_t y) +static always_inline bool dfn_eq(dfn_t x, dfn_t y) { return dfn_x(x) == dfn_x(y); } diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h index 8d0ddfb60c..5617ecc607 100644 --- a/xen/include/xen/mm.h +++ b/xen/include/xen/mm.h @@ -77,22 +77,22 @@ TYPE_SAFE(unsigned long, mfn); #undef mfn_x #endif -static inline mfn_t mfn_add(mfn_t mfn, unsigned long i) +static always_inline mfn_t mfn_add(mfn_t mfn, unsigned long i) { return _mfn(mfn_x(mfn) + i); } -static inline mfn_t mfn_max(mfn_t x, mfn_t y) +static always_inline mfn_t mfn_max(mfn_t x, mfn_t y) { return _mfn(max(mfn_x(x), mfn_x(y))); } -static inline mfn_t mfn_min(mfn_t x, mfn_t y) +static always_inline mfn_t mfn_min(mfn_t x, mfn_t y) { return _mfn(min(mfn_x(x), mfn_x(y))); } -static inline bool_t mfn_eq(mfn_t x, mfn_t y) +static always_inline bool mfn_eq(mfn_t x, mfn_t y) { return mfn_x(x) == mfn_x(y); } @@ -115,22 +115,22 @@ TYPE_SAFE(unsigned long, gfn); #undef gfn_x #endif -static inline gfn_t gfn_add(gfn_t gfn, unsigned long i) +static always_inline gfn_t gfn_add(gfn_t gfn, unsigned long i) { return _gfn(gfn_x(gfn) + i); } -static inline gfn_t gfn_max(gfn_t x, gfn_t y) +static always_inline gfn_t gfn_max(gfn_t x, gfn_t y) { return _gfn(max(gfn_x(x), gfn_x(y))); } -static inline gfn_t gfn_min(gfn_t x, gfn_t y) +static always_inline gfn_t gfn_min(gfn_t x, gfn_t y) { return _gfn(min(gfn_x(x), gfn_x(y))); } -static inline bool_t gfn_eq(gfn_t x, gfn_t y) +static always_inline bool gfn_eq(gfn_t x, gfn_t y) { return gfn_x(x) == gfn_x(y); } diff --git a/xen/include/xen/typesafe.h b/xen/include/xen/typesafe.h index 7ecd3b4a8d..f242500063 100644 --- a/xen/include/xen/typesafe.h +++ b/xen/include/xen/typesafe.h @@ -21,15 +21,15 @@ #define TYPE_SAFE(_type, _name) \ typedef struct { _type _name; } _name##_t; \ - static inline _name##_t _##_name(_type n) { return (_name##_t) { n }; } \ - static inline _type _name##_x(_name##_t n) { return n._name; } + static always_inline _name##_t _##_name(_type n) { return (_name##_t) { n }; } \ + static always_inline _type _name##_x(_name##_t n) { return n._name; } #else #define TYPE_SAFE(_type, _name) \ typedef _type _name##_t; \ - static inline _name##_t _##_name(_type n) { return n; } \ - static inline _type _name##_x(_name##_t n) { return n; } + static always_inline _name##_t _##_name(_type n) { return n; } \ + static always_inline _type _name##_x(_name##_t n) { return n; } #endif -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |