x86/kvm/svm: Force-inline GHCB accessors
authorBorislav Petkov <bp@suse.de>
Wed, 23 Mar 2022 20:52:44 +0000 (21:52 +0100)
committerBorislav Petkov <bp@suse.de>
Mon, 4 Apr 2022 08:13:20 +0000 (10:13 +0200)
In order to fix:

  vmlinux.o: warning: objtool: __sev_es_nmi_complete()+0x4c: call to ghcb_set_sw_exit_code() leaves .noinstr.text section

Signed-off-by: Borislav Petkov <bp@suse.de>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220324183607.31717-3-bp@alien8.de
arch/x86/include/asm/svm.h

index f70a5108d46421d7d5887526790eead68b8fa921..e255039b36b642cac185f0c1f918d56e3b97fb07 100644 (file)
@@ -444,23 +444,23 @@ struct vmcb {
        (offsetof(struct vmcb_save_area, field) / sizeof(u64))
 
 #define DEFINE_GHCB_ACCESSORS(field)                                           \
-       static inline bool ghcb_##field##_is_valid(const struct ghcb *ghcb)     \
+       static __always_inline bool ghcb_##field##_is_valid(const struct ghcb *ghcb) \
        {                                                                       \
                return test_bit(GHCB_BITMAP_IDX(field),                         \
                                (unsigned long *)&ghcb->save.valid_bitmap);     \
        }                                                                       \
                                                                                \
-       static inline u64 ghcb_get_##field(struct ghcb *ghcb)                   \
+       static __always_inline u64 ghcb_get_##field(struct ghcb *ghcb)          \
        {                                                                       \
                return ghcb->save.field;                                        \
        }                                                                       \
                                                                                \
-       static inline u64 ghcb_get_##field##_if_valid(struct ghcb *ghcb)        \
+       static __always_inline u64 ghcb_get_##field##_if_valid(struct ghcb *ghcb) \
        {                                                                       \
                return ghcb_##field##_is_valid(ghcb) ? ghcb->save.field : 0;    \
        }                                                                       \
                                                                                \
-       static inline void ghcb_set_##field(struct ghcb *ghcb, u64 value)       \
+       static __always_inline void ghcb_set_##field(struct ghcb *ghcb, u64 value) \
        {                                                                       \
                __set_bit(GHCB_BITMAP_IDX(field),                               \
                          (unsigned long *)&ghcb->save.valid_bitmap);           \