Message ID | b67f8941-6624-d814-e6d3-2ddfdfbdf7dd@infradead.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Kconfig-induced build errors: CONFIG_PAGE_OFFSET | expand |
On Wed, Jan 27, 2021 at 7:18 PM Randy Dunlap <rdunlap@infradead.org> wrote: > > 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. Because, RV32 doesn't support 2GB physical memory yet. The compilation errors can be fixed by not allowing MAXPHYSMEM_2GB for RV32 and MAXPHYSMEM_1GB for RV64. How about this ? --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -253,8 +253,10 @@ choice default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY config MAXPHYSMEM_1GB + depends on 32BIT bool "1GiB" config MAXPHYSMEM_2GB + depends on 64BIT && CMODEL_MEDLOW bool "2GiB" config MAXPHYSMEM_128GB depends on 64BIT && CMODEL_MEDANY > 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@infradead.org> > > 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@infradead.org> > --- > 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@infradead.org> > > > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv
On 1/28/21 12:07 PM, Atish Patra wrote: > On Wed, Jan 27, 2021 at 7:18 PM Randy Dunlap <rdunlap@infradead.org> wrote: >> >> 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. > > Because, RV32 doesn't support 2GB physical memory yet. > > The compilation errors can be fixed by not allowing MAXPHYSMEM_2GB for RV32 and > MAXPHYSMEM_1GB for RV64. How about this ? > > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -253,8 +253,10 @@ choice > default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY > > config MAXPHYSMEM_1GB > + depends on 32BIT > bool "1GiB" > config MAXPHYSMEM_2GB > + depends on 64BIT && CMODEL_MEDLOW > bool "2GiB" > config MAXPHYSMEM_128GB > depends on 64BIT && CMODEL_MEDANY Looks good. Thanks. Acked-by: Randy Dunlap <rdunlap@infradead.org>
Hi Atish, On Thu, Jan 28, 2021 at 9:09 PM Atish Patra <atishp@atishpatra.org> wrote: > On Wed, Jan 27, 2021 at 7:18 PM Randy Dunlap <rdunlap@infradead.org> wrote: > > 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. > > Because, RV32 doesn't support 2GB physical memory yet. > > The compilation errors can be fixed by not allowing MAXPHYSMEM_2GB for RV32 and > MAXPHYSMEM_1GB for RV64. How about this ? > > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -253,8 +253,10 @@ choice > default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY > > config MAXPHYSMEM_1GB > + depends on 32BIT > bool "1GiB" > config MAXPHYSMEM_2GB > + depends on 64BIT && CMODEL_MEDLOW > bool "2GiB" > config MAXPHYSMEM_128GB > depends on 64BIT && CMODEL_MEDANY Thanks, works fine on litex-vexriscv. Tested-by: Geert Uytterhoeven <geert@linux-m68k.org> Gr{oetje,eeting}s, Geert
On Fri, 29 Jan 2021 05:52:51 PST (-0800), geert@linux-m68k.org wrote: > Hi Atish, > > On Thu, Jan 28, 2021 at 9:09 PM Atish Patra <atishp@atishpatra.org> wrote: >> On Wed, Jan 27, 2021 at 7:18 PM Randy Dunlap <rdunlap@infradead.org> wrote: >> > 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. >> >> Because, RV32 doesn't support 2GB physical memory yet. >> >> The compilation errors can be fixed by not allowing MAXPHYSMEM_2GB for RV32 and >> MAXPHYSMEM_1GB for RV64. How about this ? >> >> --- a/arch/riscv/Kconfig >> +++ b/arch/riscv/Kconfig >> @@ -253,8 +253,10 @@ choice >> default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY >> >> config MAXPHYSMEM_1GB >> + depends on 32BIT >> bool "1GiB" >> config MAXPHYSMEM_2GB >> + depends on 64BIT && CMODEL_MEDLOW >> bool "2GiB" >> config MAXPHYSMEM_128GB >> depends on 64BIT && CMODEL_MEDANY > > Thanks, works fine on litex-vexriscv. > Tested-by: Geert Uytterhoeven <geert@linux-m68k.org> Atish: did I miss an actual patch? I just see diff here.
On Tue, 02 Feb 2021 18:27:42 PST (-0800), Palmer Dabbelt wrote: > On Fri, 29 Jan 2021 05:52:51 PST (-0800), geert@linux-m68k.org wrote: >> Hi Atish, >> >> On Thu, Jan 28, 2021 at 9:09 PM Atish Patra <atishp@atishpatra.org> wrote: >>> On Wed, Jan 27, 2021 at 7:18 PM Randy Dunlap <rdunlap@infradead.org> wrote: >>> > 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. >>> >>> Because, RV32 doesn't support 2GB physical memory yet. >>> >>> The compilation errors can be fixed by not allowing MAXPHYSMEM_2GB for RV32 and >>> MAXPHYSMEM_1GB for RV64. How about this ? >>> >>> --- a/arch/riscv/Kconfig >>> +++ b/arch/riscv/Kconfig >>> @@ -253,8 +253,10 @@ choice >>> default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY >>> >>> config MAXPHYSMEM_1GB >>> + depends on 32BIT >>> bool "1GiB" >>> config MAXPHYSMEM_2GB >>> + depends on 64BIT && CMODEL_MEDLOW >>> bool "2GiB" >>> config MAXPHYSMEM_128GB >>> depends on 64BIT && CMODEL_MEDANY >> >> Thanks, works fine on litex-vexriscv. >> Tested-by: Geert Uytterhoeven <geert@linux-m68k.org> > > Atish: did I miss an actual patch? I just see diff here. Never mind, I found it. Thanks!
--- 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