On Thu, 2019-08-01 at 09:00 -0700, Matthew Wilcox wrote: > On Thu, Aug 01, 2019 at 10:47:05AM -0400, Qian Cai wrote: > > Given this: > > > -#define __tag_set(addr, tag) (addr) > > +static inline const void *__tag_set(const void *addr, u8 tag) > > +{ > > + return addr; > > +} > > + > > #define __tag_reset(addr) (addr) > > #define __tag_get(addr) 0 > > #endif > > @@ -301,8 +305,8 @@ static inline void *phys_to_virt(phys_addr_t x) > > #define page_to_virt(page) ({ > > \ > > unsigned long __addr = > > \ > > ((__page_to_voff(page)) | PAGE_OFFSET); > > \ > > - unsigned long __addr_tag = \ > > - __tag_set(__addr, page_kasan_tag(page)); \ > > + const void *__addr_tag = \ > > + __tag_set((void *)__addr, page_kasan_tag(page)); \ > > ((void *)__addr_tag); > > \ > > }) > > Can't you simplify that macro to: > > #define page_to_virt(page) ({ \ > unsigned long __addr = > \ > ((__page_to_voff(page)) | PAGE_OFFSET); > \ > - unsigned long __addr_tag = \ > - __tag_set(__addr, page_kasan_tag(page)); \ > - ((void *)__addr_tag); > \ > + __tag_set((void *)__addr, page_kasan_tag(page)); \ > }) It still need a cast or lowmem_page_address() will complain of a discarded "const". It might be a bit harder to read when adding a cast as in, ((void *)__tag_set((void *)__addr, page_kasan_tag(page))); But, that feel like more of a followup patch for me if ever needed.