x86: demacro !CONFIG_PARAVIRT cpu accessors
PATCH 1/1 x86: demacro !CONFIG_PARAVIRT cpu accessors
Recently, we had a build failure on !CONFIG_PARAVIRT due to a callback ->wbinvd() clashing with a macro wbinvd(). While we worked around the issue, avoid it in the future by changing the macro (and a few surrounding ones) to an inline function.
Signed-off-by Avi Kivity <[email protected]>
--- arch/x86/include/asm/system.h | 85 ++++++++++++++++++++++++++++++++++------- 1 files changed, 71 insertions(+), 14 deletions(-)
arch/x86/include/asm/system.h +71 -14
@@ -303,24 +303,81 @@ static inline void native_wbinvd(void)#ifdef CONFIG_PARAVIRT #include <asm/paravirt.h> #else -#define read_cr0 () (native_read_cr0()) -#define write_cr0 (x) (native_write_cr0(x)) -#define read_cr2 () (native_read_cr2()) -#define write_cr2 (x) (native_write_cr2(x)) -#define read_cr3 () (native_read_cr3()) -#define write_cr3 (x) (native_write_cr3(x)) -#define read_cr4 () (native_read_cr4()) -#define read_cr4_safe () (native_read_cr4_safe()) -#define write_cr4 (x) (native_write_cr4(x)) -#define wbinvd () (native_wbinvd()) + +static inline unsigned long read_cr0 (void ) +{ +return native_read_cr0 (); +} + +static inline void write_cr0 (unsigned long x) +{ +native_write_cr0 (x); +} + +static inline unsigned long read_cr2 (void ) +{ +return native_read_cr2 (); +} + +static inline void write_cr2 (unsigned long x) +{ +native_write_cr2 (x); +} + +static inline unsigned long read_cr3 (void ) +{ +return native_read_cr3 (); +} + +static inline void write_cr3 (unsigned long x) +{ +native_write_cr3 (x); +} + +static inline unsigned long read_cr4 (void ) +{ +return native_read_cr4 (); +} + +static inline unsigned long read_cr4_safe (void ) +{ +return native_read_cr4_safe (); +} + +static inline void write_cr4 (unsigned long x) +{ +native_write_cr4 (x); +} + +static inline void wbinvd (void ) +{ +native_wbinvd (); +} +#ifdef CONFIG_X86_64 -#define read_cr8 () (native_read_cr8()) -#define write_cr8 (x) (native_write_cr8(x)) -#define load_gs_index native_load_gs_index + +static inline unsigned long read_cr8 (void ) +{ +return native_read_cr8 (); +} + +static inline void write_cr8 (unsigned long x) +{ +native_write_cr8 (x); +} + +static inline void load_gs_index (unsigned selector) +{ +native_load_gs_index (selector); +} +#endif /* Clear the 'TS' bit */ -#define clts () (native_clts()) +static inline void clts (void ) +{ +native_clts (); +}#endif /* CONFIG_PARAVIRT */
Signature · 1 line
1.7.4.3
[tip:x86/asm] x86: Demacro CONFIG_PARAVIRT cpu accessors
Commit-ID: 15d6aba24d88231415f4e7e091c0f1e60c3e6fd5 Gitweb: http://git.kernel.org/tip/15d6aba24d88231415f4e7e091c0f1e60c3e6fd5 Author: Avi Kivity <[email protected]> AuthorDate: Sun, 24 Apr 2011 11:11:51 +0300 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 24 Apr 2011 13:20:36 +0200
x86: Demacro CONFIG_PARAVIRT cpu accessors
Recently, we had a build failure on !CONFIG_PARAVIRT due to a callback ->wbinvd() clashing with a macro wbinvd().
While we worked around the issue, avoid it in the future by changing the macro (and a few surrounding ones) to an inline function.
Signed-off-by Avi Kivity <[email protected]>
Cc "H. Peter Anvin" <[email protected]>
Signed-off-by Ingo Molnar <[email protected]>
--- arch/x86/include/asm/system.h | 85 ++++++++++++++++++++++++++++++++++------- 1 files changed, 71 insertions(+), 14 deletions(-)
arch/x86/include/asm/system.h +71 -14
@@ -303,24 +303,81 @@ static inline void native_wbinvd(void)#ifdef CONFIG_PARAVIRT #include <asm/paravirt.h> #else -#define read_cr0 () (native_read_cr0()) -#define write_cr0 (x) (native_write_cr0(x)) -#define read_cr2 () (native_read_cr2()) -#define write_cr2 (x) (native_write_cr2(x)) -#define read_cr3 () (native_read_cr3()) -#define write_cr3 (x) (native_write_cr3(x)) -#define read_cr4 () (native_read_cr4()) -#define read_cr4_safe () (native_read_cr4_safe()) -#define write_cr4 (x) (native_write_cr4(x)) -#define wbinvd () (native_wbinvd()) + +static inline unsigned long read_cr0 (void ) +{ +return native_read_cr0 (); +} + +static inline void write_cr0 (unsigned long x) +{ +native_write_cr0 (x); +} + +static inline unsigned long read_cr2 (void ) +{ +return native_read_cr2 (); +} + +static inline void write_cr2 (unsigned long x) +{ +native_write_cr2 (x); +} + +static inline unsigned long read_cr3 (void ) +{ +return native_read_cr3 (); +} + +static inline void write_cr3 (unsigned long x) +{ +native_write_cr3 (x); +} + +static inline unsigned long read_cr4 (void ) +{ +return native_read_cr4 (); +} + +static inline unsigned long read_cr4_safe (void ) +{ +return native_read_cr4_safe (); +} + +static inline void write_cr4 (unsigned long x) +{ +native_write_cr4 (x); +} + +static inline void wbinvd (void ) +{ +native_wbinvd (); +} +#ifdef CONFIG_X86_64 -#define read_cr8 () (native_read_cr8()) -#define write_cr8 (x) (native_write_cr8(x)) -#define load_gs_index native_load_gs_index + +static inline unsigned long read_cr8 (void ) +{ +return native_read_cr8 (); +} + +static inline void write_cr8 (unsigned long x) +{ +native_write_cr8 (x); +} + +static inline void load_gs_index (unsigned selector) +{ +native_load_gs_index (selector); +} +#endif /* Clear the 'TS' bit */ -#define clts () (native_clts()) +static inline void clts (void ) +{ +native_clts (); +}#endif /* CONFIG_PARAVIRT */