RISC-V build breaks on stable-rc 5.7 branch. build failed with gcc-8, gcc-9 and gcc-9. On Mon, 20 Jul 2020 at 21:46, Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > > From: Atish Patra <atish.patra@xxxxxxx> > > commit 0e2c09011d4de4161f615ff860a605a9186cf62a upstream. > > As per walk_page_range documentation, mmap lock should be acquired by the > caller before invoking walk_page_range. mmap_assert_locked gets triggered > without that. The details can be found here. > > http://lists.infradead.org/pipermail/linux-riscv/2020-June/010335.html > > Fixes: 395a21ff859c(riscv: add ARCH_HAS_SET_DIRECT_MAP support) > Signed-off-by: Atish Patra <atish.patra@xxxxxxx> > Reviewed-by: Michel Lespinasse <walken@xxxxxxxxxx> > Reviewed-by: Zong Li <zong.li@xxxxxxxxxx> > Signed-off-by: Palmer Dabbelt <palmerdabbelt@xxxxxxxxxx> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > > --- > arch/riscv/mm/pageattr.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > --- a/arch/riscv/mm/pageattr.c > +++ b/arch/riscv/mm/pageattr.c > @@ -151,6 +151,7 @@ int set_memory_nx(unsigned long addr, in > > int set_direct_map_invalid_noflush(struct page *page) > { > + int ret; > unsigned long start = (unsigned long)page_address(page); > unsigned long end = start + PAGE_SIZE; > struct pageattr_masks masks = { > @@ -158,11 +159,16 @@ int set_direct_map_invalid_noflush(struc > .clear_mask = __pgprot(_PAGE_PRESENT) > }; > > - return walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); > + mmap_read_lock(&init_mm); > + ret = walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); > + mmap_read_unlock(&init_mm); make -sk KBUILD_BUILD_USER=TuxBuild -C/linux ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- HOSTCC=gcc CC="sccache riscv64-linux-gnu-gcc" O=build defconfig # # make -sk KBUILD_BUILD_USER=TuxBuild -C/linux -j32 ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- HOSTCC=gcc CC="sccache riscv64-linux-gnu-gcc" O=build # ../arch/riscv/mm/pageattr.c: In function ‘set_direct_map_invalid_noflush’: ../arch/riscv/mm/pageattr.c:162:2: error: implicit declaration of function ‘mmap_read_lock’; did you mean ‘_raw_read_lock’? [-Werror=implicit-function-declaration] 162 | mmap_read_lock(&init_mm); | ^~~~~~~~~~~~~~ | _raw_read_lock ../arch/riscv/mm/pageattr.c:164:2: error: implicit declaration of function ‘mmap_read_unlock’; did you mean ‘_raw_read_unlock’? [-Werror=implicit-function-declaration] 164 | mmap_read_unlock(&init_mm); | ^~~~~~~~~~~~~~~~ | _raw_read_unlock cc1: some warnings being treated as errors > + > + return ret; > } > > int set_direct_map_default_noflush(struct page *page) > { > + int ret; > unsigned long start = (unsigned long)page_address(page); > unsigned long end = start + PAGE_SIZE; > struct pageattr_masks masks = { > @@ -170,7 +176,11 @@ int set_direct_map_default_noflush(struc > .clear_mask = __pgprot(0) > }; > > - return walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); > + mmap_read_lock(&init_mm); > + ret = walk_page_range(&init_mm, start, end, &pageattr_ops, &masks); > + mmap_read_unlock(&init_mm); > + > + return ret; > } > > void __kernel_map_pages(struct page *page, int numpages, int enable) > ref: full build log with default config. https://gitlab.com/Linaro/lkft/kernel-runs/-/jobs/647154950 -- Linaro LKFT https://lkft.linaro.org