Message ID | 20190813170149.26037-7-will@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix issues with 52-bit kernel virtual addressing | expand |
On Tue, Aug 13, 2019 at 06:01:47PM +0100, Will Deacon wrote: > There's no need for __tag_set() to be a complicated macro when > CONFIG_KASAN_SW_TAGS=y and a simple static inline otherwise. Rewrite > the thing as a common static inline function. > > Signed-off-by: Will Deacon <will@kernel.org> Reviewed-by: Steve Capper <steve.capper@arm.com> > --- > arch/arm64/include/asm/memory.h | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > > diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h > index 5552c8cba1e2..e902132b808c 100644 > --- a/arch/arm64/include/asm/memory.h > +++ b/arch/arm64/include/asm/memory.h > @@ -218,20 +218,20 @@ static inline unsigned long kaslr_offset(void) > > #ifdef CONFIG_KASAN_SW_TAGS > #define __tag_shifted(tag) ((u64)(tag) << 56) > -#define __tag_set(addr, tag) (__typeof__(addr))( \ > - ((u64)(addr) & ~__tag_shifted(0xff)) | __tag_shifted(tag)) > #define __tag_reset(addr) untagged_addr(addr) > #define __tag_get(addr) (__u8)((u64)(addr) >> 56) > #else > -static inline const void *__tag_set(const void *addr, u8 tag) > -{ > - return addr; > -} > - > +#define __tag_shifted(tag) 0UL > #define __tag_reset(addr) (addr) > #define __tag_get(addr) 0 > #endif > > +static inline const void *__tag_set(const void *addr, u8 tag) > +{ > + u64 __addr = (u64)addr & ~__tag_shifted(0xff); > + return (const void *)(__addr | __tag_shifted(tag)); > +} > + > /* > * Physical vs virtual RAM address space conversion. These are > * private definitions which should NOT be used outside memory.h > -- > 2.11.0 >
On Tue, Aug 13, 2019 at 06:01:47PM +0100, Will Deacon wrote: > There's no need for __tag_set() to be a complicated macro when > CONFIG_KASAN_SW_TAGS=y and a simple static inline otherwise. Rewrite > the thing as a common static inline function. > > Signed-off-by: Will Deacon <will@kernel.org> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index 5552c8cba1e2..e902132b808c 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -218,20 +218,20 @@ static inline unsigned long kaslr_offset(void) #ifdef CONFIG_KASAN_SW_TAGS #define __tag_shifted(tag) ((u64)(tag) << 56) -#define __tag_set(addr, tag) (__typeof__(addr))( \ - ((u64)(addr) & ~__tag_shifted(0xff)) | __tag_shifted(tag)) #define __tag_reset(addr) untagged_addr(addr) #define __tag_get(addr) (__u8)((u64)(addr) >> 56) #else -static inline const void *__tag_set(const void *addr, u8 tag) -{ - return addr; -} - +#define __tag_shifted(tag) 0UL #define __tag_reset(addr) (addr) #define __tag_get(addr) 0 #endif +static inline const void *__tag_set(const void *addr, u8 tag) +{ + u64 __addr = (u64)addr & ~__tag_shifted(0xff); + return (const void *)(__addr | __tag_shifted(tag)); +} + /* * Physical vs virtual RAM address space conversion. These are * private definitions which should NOT be used outside memory.h
There's no need for __tag_set() to be a complicated macro when CONFIG_KASAN_SW_TAGS=y and a simple static inline otherwise. Rewrite the thing as a common static inline function. Signed-off-by: Will Deacon <will@kernel.org> --- arch/arm64/include/asm/memory.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)