diff mbox series

Kconfig-induced build errors: CONFIG_PAGE_OFFSET

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

Commit Message

Randy Dunlap Jan. 28, 2021, 3:18 a.m. UTC
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@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(+)

Comments

Atish Patra Jan. 28, 2021, 8:07 p.m. UTC | #1
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
Randy Dunlap Jan. 28, 2021, 8:40 p.m. UTC | #2
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>
Geert Uytterhoeven Jan. 29, 2021, 1:52 p.m. UTC | #3
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
Palmer Dabbelt Feb. 3, 2021, 2:27 a.m. UTC | #4
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.
Palmer Dabbelt Feb. 3, 2021, 2:35 a.m. UTC | #5
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!
diff mbox series

Patch

--- 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