All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xen-devel] [PATCH] xen/typesafe: Force helpers to be always_inline
@ 2019-09-30 19:16 Andrew Cooper
  2019-10-01  6:34 ` Jürgen Groß
  2019-10-01  8:38 ` Jan Beulich
  0 siblings, 2 replies; 11+ messages in thread
From: Andrew Cooper @ 2019-09-30 19:16 UTC (permalink / raw)
  To: Xen-devel
  Cc: Juergen Gross, Stefano Stabellini, Julien Grall, Wei Liu,
	Konrad Rzeszutek Wilk, George Dunlap, Andrew Cooper, Tim Deegan,
	Jan Beulich, Ian Jackson

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@citrix.com>
---
CC: George Dunlap <George.Dunlap@eu.citrix.com>
CC: Ian Jackson <ian.jackson@citrix.com>
CC: Jan Beulich <JBeulich@suse.com>
CC: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
CC: Stefano Stabellini <sstabellini@kernel.org>
CC: Tim Deegan <tim@xen.org>
CC: Wei Liu <wl@xen.org>
CC: Julien Grall <julien@xen.org>
CC: Juergen Gross <jgross@suse.com>

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@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2019-10-23 10:54 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-30 19:16 [Xen-devel] [PATCH] xen/typesafe: Force helpers to be always_inline Andrew Cooper
2019-10-01  6:34 ` Jürgen Groß
2019-10-01  8:38 ` Jan Beulich
2019-10-01 20:59   ` Andrew Cooper
2019-10-02  8:11     ` Jan Beulich
2019-10-04 17:02       ` George Dunlap
2019-10-07  9:25         ` Jan Beulich
2019-10-21 11:10           ` George Dunlap
2019-10-23  7:27             ` Jan Beulich
2019-10-23  9:37               ` George Dunlap
2019-10-23 10:43                 ` Jan Beulich

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.