[PATCH v4] riscv: Use PUD/P4D/PGD pages for the linear mapping
kernel test robot
lkp at intel.com
Mon Jan 23 16:19:14 PST 2023
Hi Alexandre,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on robh/for-next]
[also build test ERROR on linus/master v6.2-rc5 next-20230123]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Alexandre-Ghiti/riscv-Use-PUD-P4D-PGD-pages-for-the-linear-mapping/20230123-192952
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
patch link: https://lore.kernel.org/r/20230123112803.817534-1-alexghiti%40rivosinc.com
patch subject: [PATCH v4] riscv: Use PUD/P4D/PGD pages for the linear mapping
config: riscv-nommu_virt_defconfig (https://download.01.org/0day-ci/archive/20230124/202301240847.k2H9qZVL-lkp@intel.com/config)
compiler: riscv64-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/b0cdf20b21efcc85ec67bffa6a10894dedd0d12e
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Alexandre-Ghiti/riscv-Use-PUD-P4D-PGD-pages-for-the-linear-mapping/20230123-192952
git checkout b0cdf20b21efcc85ec67bffa6a10894dedd0d12e
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=riscv olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash arch/riscv/mm/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
arch/riscv/mm/init.c: In function 'setup_bootmem':
>> arch/riscv/mm/init.c:222:9: error: 'riscv_pfn_base' undeclared (first use in this function)
222 | riscv_pfn_base = PFN_DOWN(phys_ram_base);
| ^~~~~~~~~~~~~~
arch/riscv/mm/init.c:222:9: note: each undeclared identifier is reported only once for each function it appears in
vim +/riscv_pfn_base +222 arch/riscv/mm/init.c
187
188 static void __init setup_bootmem(void)
189 {
190 phys_addr_t vmlinux_end = __pa_symbol(&_end);
191 phys_addr_t max_mapped_addr;
192 phys_addr_t phys_ram_end, vmlinux_start;
193
194 if (IS_ENABLED(CONFIG_XIP_KERNEL))
195 vmlinux_start = __pa_symbol(&_sdata);
196 else
197 vmlinux_start = __pa_symbol(&_start);
198
199 memblock_enforce_memory_limit(memory_limit);
200
201 /*
202 * Make sure we align the reservation on PMD_SIZE since we will
203 * map the kernel in the linear mapping as read-only: we do not want
204 * any allocation to happen between _end and the next pmd aligned page.
205 */
206 if (IS_ENABLED(CONFIG_64BIT) && IS_ENABLED(CONFIG_STRICT_KERNEL_RWX))
207 vmlinux_end = (vmlinux_end + PMD_SIZE - 1) & PMD_MASK;
208 /*
209 * Reserve from the start of the kernel to the end of the kernel
210 */
211 memblock_reserve(vmlinux_start, vmlinux_end - vmlinux_start);
212
213 phys_ram_end = memblock_end_of_DRAM();
214 if (!IS_ENABLED(CONFIG_XIP_KERNEL))
215 phys_ram_base = memblock_start_of_DRAM();
216
217 /*
218 * Any use of __va/__pa before this point is wrong as we did not know the
219 * start of DRAM before.
220 */
221 kernel_map.va_pa_offset = PAGE_OFFSET - phys_ram_base;
> 222 riscv_pfn_base = PFN_DOWN(phys_ram_base);
223
224 /*
225 * memblock allocator is not aware of the fact that last 4K bytes of
226 * the addressable memory can not be mapped because of IS_ERR_VALUE
227 * macro. Make sure that last 4k bytes are not usable by memblock
228 * if end of dram is equal to maximum addressable memory. For 64-bit
229 * kernel, this problem can't happen here as the end of the virtual
230 * address space is occupied by the kernel mapping then this check must
231 * be done as soon as the kernel mapping base address is determined.
232 */
233 if (!IS_ENABLED(CONFIG_64BIT)) {
234 max_mapped_addr = __pa(~(ulong)0);
235 if (max_mapped_addr == (phys_ram_end - 1))
236 memblock_set_current_limit(max_mapped_addr - 4096);
237 }
238
239 min_low_pfn = PFN_UP(phys_ram_base);
240 max_low_pfn = max_pfn = PFN_DOWN(phys_ram_end);
241 high_memory = (void *)(__va(PFN_PHYS(max_low_pfn)));
242
243 dma32_phys_limit = min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_low_pfn));
244 set_max_mapnr(max_low_pfn - ARCH_PFN_OFFSET);
245
246 reserve_initrd_mem();
247 /*
248 * If DTB is built in, no need to reserve its memblock.
249 * Otherwise, do reserve it but avoid using
250 * early_init_fdt_reserve_self() since __pa() does
251 * not work for DTB pointers that are fixmap addresses
252 */
253 if (!IS_ENABLED(CONFIG_BUILTIN_DTB)) {
254 /*
255 * In case the DTB is not located in a memory region we won't
256 * be able to locate it later on via the linear mapping and
257 * get a segfault when accessing it via __va(dtb_early_pa).
258 * To avoid this situation copy DTB to a memory region.
259 * Note that memblock_phys_alloc will also reserve DTB region.
260 */
261 if (!memblock_is_memory(dtb_early_pa)) {
262 size_t fdt_size = fdt_totalsize(dtb_early_va);
263 phys_addr_t new_dtb_early_pa = memblock_phys_alloc(fdt_size, PAGE_SIZE);
264 void *new_dtb_early_va = early_memremap(new_dtb_early_pa, fdt_size);
265
266 memcpy(new_dtb_early_va, dtb_early_va, fdt_size);
267 early_memunmap(new_dtb_early_va, fdt_size);
268 _dtb_early_pa = new_dtb_early_pa;
269 } else
270 memblock_reserve(dtb_early_pa, fdt_totalsize(dtb_early_va));
271 }
272
273 dma_contiguous_reserve(dma32_phys_limit);
274 if (IS_ENABLED(CONFIG_64BIT))
275 hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT);
276 memblock_allow_resize();
277 }
278
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
More information about the linux-riscv
mailing list