Kconfig-induced build errors: CONFIG_PAGE_OFFSET

From: Randy Dunlap
Date: Wed Jan 27 2021 - 22:19:05 EST


Hi,

I took a riscv-32 .config from kernel test robot (it was for a clang build)
and did a "make olddefconfig" (using gcc tools) and got build errors
due to this config item from arch/riscv/Kconfig;


config PAGE_OFFSET
hex
default 0xC0000000 if 32BIT && MAXPHYSMEM_1GB
default 0x80000000 if 64BIT && !MMU
default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB
default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB

PAGE_OFFSET is undefined for the case of 32BIT && MAXPHYSMEM_2GB.
That causes lots of errors when _AC() is used to paste
CONFIG_PAGE_OFFSET to "UL", like these:

In file included from ../include/vdso/const.h:5,
from ../include/linux/const.h:4,
from ../include/linux/bits.h:5,
from ../include/linux/bitops.h:6,
from ../include/linux/kernel.h:11,
from ../init/do_mounts_initrd.c:3:
../arch/riscv/include/asm/uaccess.h: In function '__access_ok':
../arch/riscv/include/asm/page.h:34:46: error: 'UL' undeclared (first use in this function)
34 | #define PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL)
| ^~
../include/uapi/linux/const.h:20:23: note: in definition of macro '__AC'
20 | #define __AC(X,Y) (X##Y)
| ^
../arch/riscv/include/asm/page.h:34:22: note: in expansion of macro '_AC'
34 | #define PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL)
| ^~~
../arch/riscv/include/asm/pgtable.h:26:27: note: in expansion of macro 'PAGE_OFFSET'
26 | #define VMALLOC_START (PAGE_OFFSET - VMALLOC_SIZE)
| ^~~~~~~~~~~
../arch/riscv/include/asm/pgtable.h:41:24: note: in expansion of macro 'VMALLOC_START'
41 | #define VMEMMAP_START (VMALLOC_START - VMEMMAP_SIZE)
| ^~~~~~~~~~~~~
../arch/riscv/include/asm/pgtable.h:50:26: note: in expansion of macro 'VMEMMAP_START'
50 | #define PCI_IO_END VMEMMAP_START
| ^~~~~~~~~~~~~
../arch/riscv/include/asm/pgtable.h:51:27: note: in expansion of macro 'PCI_IO_END'
51 | #define PCI_IO_START (PCI_IO_END - PCI_IO_SIZE)
| ^~~~~~~~~~
../arch/riscv/include/asm/pgtable.h:53:26: note: in expansion of macro 'PCI_IO_START'
53 | #define FIXADDR_TOP PCI_IO_START
| ^~~~~~~~~~~~
../arch/riscv/include/asm/pgtable.h:59:27: note: in expansion of macro 'FIXADDR_TOP'
59 | #define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
| ^~~~~~~~~~~
../arch/riscv/include/asm/pgtable.h:471:19: note: in expansion of macro 'FIXADDR_START'
471 | #define TASK_SIZE FIXADDR_START
| ^~~~~~~~~~~~~
../arch/riscv/include/asm/uaccess.h:56:17: note: in expansion of macro 'TASK_SIZE'
56 | return size <= TASK_SIZE && addr <= TASK_SIZE - size;


I suppose that it wants something like this, but someone else can
fix/use the correct default value here:

---

From: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>

Provide a default value for PAGE_OFFSET for the case of
32BIT and MAXPHYSMEM_2GB.

Fixes many build errors.

Signed-off-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
---
arch/riscv/Kconfig | 1 +
1 file changed, 1 insertion(+)

--- linux-next-20210125.orig/arch/riscv/Kconfig
+++ linux-next-20210125/arch/riscv/Kconfig
@@ -143,6 +143,7 @@ config PA_BITS
config PAGE_OFFSET
hex
default 0xC0000000 if 32BIT && MAXPHYSMEM_1GB
+ default 0x80000000 if 32BIT && MAXPHYSMEM_2GB
default 0x80000000 if 64BIT && !MMU
default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB
default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB



--
~Randy
Reported-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>