Messages in this thread Patch in this message | | | From | Barry Song <> | Date | Tue, 19 Mar 2024 14:27:14 +1300 | Subject | Re: [PATCH v2] xtensa: remove redundant flush_dcache_page and ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE macros |
| |
On Tue, Mar 19, 2024 at 2:09 PM Barry Song <21cnbao@gmail.com> wrote: > > From: Barry Song <v-songbaohua@oppo.com> > > xtensa's flush_dcache_page() can be a no-op sometimes. There is a > generic implementation for this case in include/asm-generic/ > cacheflush.h. > #ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE > static inline void flush_dcache_page(struct page *page) > { > } > > #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 > #endif > > So remove the superfluous flush_dcache_page() definition, which also > helps silence potential build warnings complaining the page variable > passed to flush_dcache_page() is not used. > > In file included from crypto/scompress.c:12: > include/crypto/scatterwalk.h: In function 'scatterwalk_pagedone': > include/crypto/scatterwalk.h:76:30: warning: variable 'page' set but not used [-Wunused-but-set-variable] > 76 | struct page *page; > | ^~~~ > crypto/scompress.c: In function 'scomp_acomp_comp_decomp': > >> crypto/scompress.c:174:38: warning: unused variable 'dst_page' [-Wunused-variable] > 174 | struct page *dst_page = sg_page(req->dst); > | > > The issue was originally reported on LoongArch by kernel test > robot (Huacai fixed it on LoongArch), then reported by Guenter > and me on xtensa. > > This patch also removes lots of redundant macros which have > been defined by asm-generic/cacheflush.h. > > Cc: Huacai Chen <chenhuacai@loongson.cn> > Cc: Herbert Xu <herbert@gondor.apana.org.au> > Reported-by: kernel test robot <lkp@intel.com> > Closes: https://lore.kernel.org/oe-kbuild-all/202403091614.NeUw5zcv-lkp@intel.com/ > Reported-by: Barry Song <v-songbaohua@oppo.com> > Closes: https://lore.kernel.org/all/CAGsJ_4yDk1+axbte7FKQEwD7X2oxUCFrEc9M5YOS1BobfDFXPA@mail.gmail.com/ > Reported-by: Guenter Roeck <linux@roeck-us.net>
Hi Guenter, I am not a xtensa guy, so I will need your help for a full test. if turns out it is a too big(ambitious) fix, a minimal fix might be:
diff --git a/arch/xtensa/include/asm/cacheflush.h b/arch/xtensa/include/asm/cacheflush.h index 38bcecb0e457..fdc692cf2b78 100644 --- a/arch/xtensa/include/asm/cacheflush.h +++ b/arch/xtensa/include/asm/cacheflush.h @@ -145,7 +145,7 @@ void local_flush_cache_page(struct vm_area_struct *vma, #define flush_cache_vunmap(start,end) do { } while (0)
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 -#define flush_dcache_page(page) do { } while (0) +#define flush_dcache_page(page) do { (void)(page); } while (0)
#define flush_icache_range local_flush_icache_range #define flush_cache_page(vma, addr, pfn) do { } while (0)
> Closes: https://lore.kernel.org/all/aaa8b7d7-5abe-47bf-93f6-407942436472@roeck-us.net/ > Fixes: 77292bb8ca69 ("crypto: scomp - remove memcpy if sg_nents is 1 and pages are lowmem") > Signed-off-by: Barry Song <v-songbaohua@oppo.com> > --- > -v2: include asm-generic/cacheflush.h and remove lots of redundant macros > > arch/xtensa/include/asm/cacheflush.h | 24 ++++++++---------------- > 1 file changed, 8 insertions(+), 16 deletions(-) > > diff --git a/arch/xtensa/include/asm/cacheflush.h b/arch/xtensa/include/asm/cacheflush.h > index 38bcecb0e457..a2b6bb5429f5 100644 > --- a/arch/xtensa/include/asm/cacheflush.h > +++ b/arch/xtensa/include/asm/cacheflush.h > @@ -100,6 +100,10 @@ void flush_cache_range(struct vm_area_struct*, ulong, ulong); > void flush_icache_range(unsigned long start, unsigned long end); > void flush_cache_page(struct vm_area_struct*, > unsigned long, unsigned long); > +#define flush_cache_all flush_cache_all > +#define flush_cache_range flush_cache_range > +#define flush_icache_range flush_icache_range > +#define flush_cache_page flush_cache_page > #else > #define flush_cache_all local_flush_cache_all > #define flush_cache_range local_flush_cache_range > @@ -136,20 +140,7 @@ void local_flush_cache_page(struct vm_area_struct *vma, > > #else > > -#define flush_cache_all() do { } while (0) > -#define flush_cache_mm(mm) do { } while (0) > -#define flush_cache_dup_mm(mm) do { } while (0) > - > -#define flush_cache_vmap(start,end) do { } while (0) > -#define flush_cache_vmap_early(start,end) do { } while (0) > -#define flush_cache_vunmap(start,end) do { } while (0) > - > -#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 > -#define flush_dcache_page(page) do { } while (0) > - > #define flush_icache_range local_flush_icache_range > -#define flush_cache_page(vma, addr, pfn) do { } while (0) > -#define flush_cache_range(vma, start, end) do { } while (0) > > #endif > > @@ -162,15 +153,14 @@ void local_flush_cache_page(struct vm_area_struct *vma, > __invalidate_icache_range(start,(end) - (start)); \ > } while (0) > > -#define flush_dcache_mmap_lock(mapping) do { } while (0) > -#define flush_dcache_mmap_unlock(mapping) do { } while (0) > - > #if defined(CONFIG_MMU) && (DCACHE_WAY_SIZE > PAGE_SIZE) > > extern void copy_to_user_page(struct vm_area_struct*, struct page*, > unsigned long, void*, const void*, unsigned long); > extern void copy_from_user_page(struct vm_area_struct*, struct page*, > unsigned long, void*, const void*, unsigned long); > +#define copy_to_user_page copy_to_user_page > +#define copy_from_user_page copy_from_user_page > > #else > > @@ -186,4 +176,6 @@ extern void copy_from_user_page(struct vm_area_struct*, struct page*, > > #endif > > +#include <asm-generic/cacheflush.h> > + > #endif /* _XTENSA_CACHEFLUSH_H */ > -- > 2.34.1 >
Thanks Barry
| |