* Re: [PATCH v3] RISC-V: Add CONFIG_{NON,}PORTABLE
2022-05-21 19:33 [PATCH v3] RISC-V: Add CONFIG_{NON,}PORTABLE Palmer Dabbelt
@ 2022-05-22 8:09 ` Atish Patra
2022-05-22 8:57 ` Damien Le Moal
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Atish Patra @ 2022-05-22 8:09 UTC (permalink / raw)
To: Palmer Dabbelt
Cc: linux-riscv, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Randy Dunlap, Arnd Bergmann, Anup Patel, Alexandre Ghiti,
damien.lemoal, Atish Patra, axboe, Guo Ren, Mayuresh Chitale,
linux-kernel@vger.kernel.org List, linux
On Sat, May 21, 2022 at 1:47 PM Palmer Dabbelt <palmer@rivosinc.com> wrote:
>
> From: Palmer Dabbelt <palmer@rivosinc.com>
>
> The RISC-V port has collected a handful of options that are
> fundamentally non-portable. To prevent users from shooting themselves
> in the foot, hide them all behind a config entry that explicitly calls
> out that non-portable binaries may be produced.
>
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
> ---
> Changes since v2:
>
> * Update the nommu and rv32 defconfigs. I'm still getting some ugliness
> like
>
> $ make.riscv rv32_defconfig
> *** Default configuration is based on 'defconfig'
> #
> # configuration written to .config
> #
> Using .config as base
> Merging ./arch/riscv/configs/32-bit.config
> Value of CONFIG_PORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config:
> Previous value: CONFIG_PORTABLE=y
> New value: # CONFIG_PORTABLE is not set
>
> Value of CONFIG_NONPORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config:
> Previous value: # CONFIG_NONPORTABLE is not set
> New value: CONFIG_NONPORTABLE=y
>
> #
> # merged configuration written to .config (needs make)
> #
> .config:3831:warning: override: ARCH_RV32I changes choice state
> #
> # configuration written to .config
> #
>
> not sure if there's a better way to do this.
>
> Changes since v1:
>
> * Fix a bunch of spelling mistakes.
> * Move NONPORTABLE under the "Platform type" sub-heading.
> * Fix the rv32i dependency.
>
> ---
> arch/riscv/Kconfig | 28 +++++++++++++++++--
> arch/riscv/configs/32-bit.config | 2 ++
> arch/riscv/configs/nommu_k210_defconfig | 1 +
> .../riscv/configs/nommu_k210_sdcard_defconfig | 1 +
> arch/riscv/configs/nommu_virt_defconfig | 1 +
> arch/riscv/configs/rv32_defconfig | 1 +
> 6 files changed, 32 insertions(+), 2 deletions(-)
>
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index f863065b478c..cd67b09a80f5 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -222,6 +222,21 @@ source "arch/riscv/Kconfig.erratas"
>
> menu "Platform type"
>
> +config NONPORTABLE
> + bool "Allow configurations that result in non-portable kernels"
> + help
> + RISC-V kernel binaries are compatible between all known systems
> + whenever possible, but there are some use cases that can only be
> + satisfied by configurations that result in kernel binaries that are
> + not portable between systems.
> +
> + Selecting N does not guarantee kernels will be portable to all known
> + systems. Selecting any of the options guarded by NONPORTABLE will
> + result in kernel binaries that are unlikely to be portable between
> + systems.
> +
> + If unsure, say N.
> +
> choice
> prompt "Base ISA"
> default ARCH_RV64I
> @@ -231,6 +246,7 @@ choice
>
> config ARCH_RV32I
> bool "RV32I"
> + depends on NONPORTABLE
> select 32BIT
> select GENERIC_LIB_ASHLDI3
> select GENERIC_LIB_ASHRDI3
> @@ -541,6 +557,7 @@ config STACKPROTECTOR_PER_TASK
>
> config PHYS_RAM_BASE_FIXED
> bool "Explicitly specified physical RAM address"
> + depends on NONPORTABLE
> default n
>
> config PHYS_RAM_BASE
> @@ -554,7 +571,7 @@ config PHYS_RAM_BASE
>
> config XIP_KERNEL
> bool "Kernel Execute-In-Place from ROM"
> - depends on MMU && SPARSEMEM
> + depends on MMU && SPARSEMEM && NONPORTABLE
> # This prevents XIP from being enabled by all{yes,mod}config, which
> # fail to build since XIP doesn't support large kernels.
> depends on !COMPILE_TEST
> @@ -594,9 +611,16 @@ endmenu
>
> config BUILTIN_DTB
> bool
> - depends on OF
> + depends on OF && NONPORTABLE
> default y if XIP_KERNEL
>
> +config PORTABLE
> + bool
> + default !NONPORTABLE
> + select EFI
> + select OF
> + select MMU
> +
> menu "Power management options"
>
> source "kernel/power/Kconfig"
> diff --git a/arch/riscv/configs/32-bit.config b/arch/riscv/configs/32-bit.config
> index 43f41323b67e..f6af0f708df4 100644
> --- a/arch/riscv/configs/32-bit.config
> +++ b/arch/riscv/configs/32-bit.config
> @@ -1,2 +1,4 @@
> CONFIG_ARCH_RV32I=y
> CONFIG_32BIT=y
> +# CONFIG_PORTABLE is not set
> +CONFIG_NONPORTABLE=y
> diff --git a/arch/riscv/configs/nommu_k210_defconfig b/arch/riscv/configs/nommu_k210_defconfig
> index 2438fa39f8ae..96fe8def644c 100644
> --- a/arch/riscv/configs/nommu_k210_defconfig
> +++ b/arch/riscv/configs/nommu_k210_defconfig
> @@ -28,6 +28,7 @@ CONFIG_EMBEDDED=y
> CONFIG_SLOB=y
> # CONFIG_MMU is not set
> CONFIG_SOC_CANAAN=y
> +CONFIG_NONPORTABLE=y
> CONFIG_SMP=y
> CONFIG_NR_CPUS=2
> CONFIG_CMDLINE="earlycon console=ttySIF0"
> diff --git a/arch/riscv/configs/nommu_k210_sdcard_defconfig b/arch/riscv/configs/nommu_k210_sdcard_defconfig
> index 9a133e63ae5b..379740654373 100644
> --- a/arch/riscv/configs/nommu_k210_sdcard_defconfig
> +++ b/arch/riscv/configs/nommu_k210_sdcard_defconfig
> @@ -20,6 +20,7 @@ CONFIG_EMBEDDED=y
> CONFIG_SLOB=y
> # CONFIG_MMU is not set
> CONFIG_SOC_CANAAN=y
> +CONFIG_NONPORTABLE=y
> CONFIG_SMP=y
> CONFIG_NR_CPUS=2
> CONFIG_CMDLINE="earlycon console=ttySIF0 root=/dev/mmcblk0p1 rootwait ro"
> diff --git a/arch/riscv/configs/nommu_virt_defconfig b/arch/riscv/configs/nommu_virt_defconfig
> index 5269fbb6b4fc..1a56eda5ce46 100644
> --- a/arch/riscv/configs/nommu_virt_defconfig
> +++ b/arch/riscv/configs/nommu_virt_defconfig
> @@ -25,6 +25,7 @@ CONFIG_EXPERT=y
> CONFIG_SLOB=y
> # CONFIG_MMU is not set
> CONFIG_SOC_VIRT=y
> +CONFIG_NONPORTABLE=y
> CONFIG_SMP=y
> CONFIG_CMDLINE="root=/dev/vda rw earlycon=uart8250,mmio,0x10000000,115200n8 console=ttyS0"
> CONFIG_CMDLINE_FORCE=y
> diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig
> index 7e5efdc3829d..77bdb1d05a88 100644
> --- a/arch/riscv/configs/rv32_defconfig
> +++ b/arch/riscv/configs/rv32_defconfig
> @@ -18,6 +18,7 @@ CONFIG_EXPERT=y
> CONFIG_PROFILING=y
> CONFIG_SOC_SIFIVE=y
> CONFIG_SOC_VIRT=y
> +CONFIG_NONPORTABLE=y
> CONFIG_ARCH_RV32I=y
> CONFIG_SMP=y
> CONFIG_HOTPLUG_CPU=y
> --
> 2.34.1
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
Reviewed-by: Atish Patra <atishp@rivosinc.com>
--
Regards,
Atish
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH v3] RISC-V: Add CONFIG_{NON,}PORTABLE
2022-05-21 19:33 [PATCH v3] RISC-V: Add CONFIG_{NON,}PORTABLE Palmer Dabbelt
2022-05-22 8:09 ` Atish Patra
@ 2022-05-22 8:57 ` Damien Le Moal
2022-05-22 12:27 ` Guo Ren
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Damien Le Moal @ 2022-05-22 8:57 UTC (permalink / raw)
To: Palmer Dabbelt, linux-riscv
Cc: Paul Walmsley, Palmer Dabbelt, aou, rdunlap, Arnd Bergmann, anup,
alexandre.ghiti, Atish Patra, axboe, guoren, mchitale,
linux-kernel, linux
On 5/22/22 04:33, Palmer Dabbelt wrote:
> From: Palmer Dabbelt <palmer@rivosinc.com>
>
> The RISC-V port has collected a handful of options that are
> fundamentally non-portable. To prevent users from shooting themselves
> in the foot, hide them all behind a config entry that explicitly calls
> out that non-portable binaries may be produced.
>
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
--
Damien Le Moal
Western Digital Research
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH v3] RISC-V: Add CONFIG_{NON,}PORTABLE
2022-05-21 19:33 [PATCH v3] RISC-V: Add CONFIG_{NON,}PORTABLE Palmer Dabbelt
2022-05-22 8:09 ` Atish Patra
2022-05-22 8:57 ` Damien Le Moal
@ 2022-05-22 12:27 ` Guo Ren
2022-07-14 21:26 ` Palmer Dabbelt
2022-07-15 7:47 ` Geert Uytterhoeven
4 siblings, 0 replies; 6+ messages in thread
From: Guo Ren @ 2022-05-22 12:27 UTC (permalink / raw)
To: Palmer Dabbelt
Cc: linux-riscv, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Randy Dunlap, Arnd Bergmann, Anup Patel, Alexandre Ghiti,
damien.lemoal, Atish Patra, Jens Axboe, Mayuresh Chitale,
Linux Kernel Mailing List, linux
Reviewed-by: Guo Ren <guoren@kernel.org>
On Sun, May 22, 2022 at 4:46 AM Palmer Dabbelt <palmer@rivosinc.com> wrote:
>
> From: Palmer Dabbelt <palmer@rivosinc.com>
>
> The RISC-V port has collected a handful of options that are
> fundamentally non-portable. To prevent users from shooting themselves
> in the foot, hide them all behind a config entry that explicitly calls
> out that non-portable binaries may be produced.
>
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
> ---
> Changes since v2:
>
> * Update the nommu and rv32 defconfigs. I'm still getting some ugliness
> like
>
> $ make.riscv rv32_defconfig
> *** Default configuration is based on 'defconfig'
> #
> # configuration written to .config
> #
> Using .config as base
> Merging ./arch/riscv/configs/32-bit.config
> Value of CONFIG_PORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config:
> Previous value: CONFIG_PORTABLE=y
> New value: # CONFIG_PORTABLE is not set
>
> Value of CONFIG_NONPORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config:
> Previous value: # CONFIG_NONPORTABLE is not set
> New value: CONFIG_NONPORTABLE=y
>
> #
> # merged configuration written to .config (needs make)
> #
> .config:3831:warning: override: ARCH_RV32I changes choice state
> #
> # configuration written to .config
> #
>
> not sure if there's a better way to do this.
>
> Changes since v1:
>
> * Fix a bunch of spelling mistakes.
> * Move NONPORTABLE under the "Platform type" sub-heading.
> * Fix the rv32i dependency.
>
> ---
> arch/riscv/Kconfig | 28 +++++++++++++++++--
> arch/riscv/configs/32-bit.config | 2 ++
> arch/riscv/configs/nommu_k210_defconfig | 1 +
> .../riscv/configs/nommu_k210_sdcard_defconfig | 1 +
> arch/riscv/configs/nommu_virt_defconfig | 1 +
> arch/riscv/configs/rv32_defconfig | 1 +
> 6 files changed, 32 insertions(+), 2 deletions(-)
>
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index f863065b478c..cd67b09a80f5 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -222,6 +222,21 @@ source "arch/riscv/Kconfig.erratas"
>
> menu "Platform type"
>
> +config NONPORTABLE
> + bool "Allow configurations that result in non-portable kernels"
> + help
> + RISC-V kernel binaries are compatible between all known systems
> + whenever possible, but there are some use cases that can only be
> + satisfied by configurations that result in kernel binaries that are
> + not portable between systems.
> +
> + Selecting N does not guarantee kernels will be portable to all known
> + systems. Selecting any of the options guarded by NONPORTABLE will
> + result in kernel binaries that are unlikely to be portable between
> + systems.
> +
> + If unsure, say N.
> +
> choice
> prompt "Base ISA"
> default ARCH_RV64I
> @@ -231,6 +246,7 @@ choice
>
> config ARCH_RV32I
> bool "RV32I"
> + depends on NONPORTABLE
> select 32BIT
> select GENERIC_LIB_ASHLDI3
> select GENERIC_LIB_ASHRDI3
> @@ -541,6 +557,7 @@ config STACKPROTECTOR_PER_TASK
>
> config PHYS_RAM_BASE_FIXED
> bool "Explicitly specified physical RAM address"
> + depends on NONPORTABLE
> default n
>
> config PHYS_RAM_BASE
> @@ -554,7 +571,7 @@ config PHYS_RAM_BASE
>
> config XIP_KERNEL
> bool "Kernel Execute-In-Place from ROM"
> - depends on MMU && SPARSEMEM
> + depends on MMU && SPARSEMEM && NONPORTABLE
> # This prevents XIP from being enabled by all{yes,mod}config, which
> # fail to build since XIP doesn't support large kernels.
> depends on !COMPILE_TEST
> @@ -594,9 +611,16 @@ endmenu
>
> config BUILTIN_DTB
> bool
> - depends on OF
> + depends on OF && NONPORTABLE
> default y if XIP_KERNEL
>
> +config PORTABLE
> + bool
> + default !NONPORTABLE
> + select EFI
> + select OF
> + select MMU
> +
> menu "Power management options"
>
> source "kernel/power/Kconfig"
> diff --git a/arch/riscv/configs/32-bit.config b/arch/riscv/configs/32-bit.config
> index 43f41323b67e..f6af0f708df4 100644
> --- a/arch/riscv/configs/32-bit.config
> +++ b/arch/riscv/configs/32-bit.config
> @@ -1,2 +1,4 @@
> CONFIG_ARCH_RV32I=y
> CONFIG_32BIT=y
> +# CONFIG_PORTABLE is not set
> +CONFIG_NONPORTABLE=y
> diff --git a/arch/riscv/configs/nommu_k210_defconfig b/arch/riscv/configs/nommu_k210_defconfig
> index 2438fa39f8ae..96fe8def644c 100644
> --- a/arch/riscv/configs/nommu_k210_defconfig
> +++ b/arch/riscv/configs/nommu_k210_defconfig
> @@ -28,6 +28,7 @@ CONFIG_EMBEDDED=y
> CONFIG_SLOB=y
> # CONFIG_MMU is not set
> CONFIG_SOC_CANAAN=y
> +CONFIG_NONPORTABLE=y
> CONFIG_SMP=y
> CONFIG_NR_CPUS=2
> CONFIG_CMDLINE="earlycon console=ttySIF0"
> diff --git a/arch/riscv/configs/nommu_k210_sdcard_defconfig b/arch/riscv/configs/nommu_k210_sdcard_defconfig
> index 9a133e63ae5b..379740654373 100644
> --- a/arch/riscv/configs/nommu_k210_sdcard_defconfig
> +++ b/arch/riscv/configs/nommu_k210_sdcard_defconfig
> @@ -20,6 +20,7 @@ CONFIG_EMBEDDED=y
> CONFIG_SLOB=y
> # CONFIG_MMU is not set
> CONFIG_SOC_CANAAN=y
> +CONFIG_NONPORTABLE=y
> CONFIG_SMP=y
> CONFIG_NR_CPUS=2
> CONFIG_CMDLINE="earlycon console=ttySIF0 root=/dev/mmcblk0p1 rootwait ro"
> diff --git a/arch/riscv/configs/nommu_virt_defconfig b/arch/riscv/configs/nommu_virt_defconfig
> index 5269fbb6b4fc..1a56eda5ce46 100644
> --- a/arch/riscv/configs/nommu_virt_defconfig
> +++ b/arch/riscv/configs/nommu_virt_defconfig
> @@ -25,6 +25,7 @@ CONFIG_EXPERT=y
> CONFIG_SLOB=y
> # CONFIG_MMU is not set
> CONFIG_SOC_VIRT=y
> +CONFIG_NONPORTABLE=y
> CONFIG_SMP=y
> CONFIG_CMDLINE="root=/dev/vda rw earlycon=uart8250,mmio,0x10000000,115200n8 console=ttyS0"
> CONFIG_CMDLINE_FORCE=y
> diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig
> index 7e5efdc3829d..77bdb1d05a88 100644
> --- a/arch/riscv/configs/rv32_defconfig
> +++ b/arch/riscv/configs/rv32_defconfig
> @@ -18,6 +18,7 @@ CONFIG_EXPERT=y
> CONFIG_PROFILING=y
> CONFIG_SOC_SIFIVE=y
> CONFIG_SOC_VIRT=y
> +CONFIG_NONPORTABLE=y
> CONFIG_ARCH_RV32I=y
> CONFIG_SMP=y
> CONFIG_HOTPLUG_CPU=y
> --
> 2.34.1
>
--
Best Regards
Guo Ren
ML: https://lore.kernel.org/linux-csky/
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH v3] RISC-V: Add CONFIG_{NON,}PORTABLE
2022-05-21 19:33 [PATCH v3] RISC-V: Add CONFIG_{NON,}PORTABLE Palmer Dabbelt
` (2 preceding siblings ...)
2022-05-22 12:27 ` Guo Ren
@ 2022-07-14 21:26 ` Palmer Dabbelt
2022-07-15 7:47 ` Geert Uytterhoeven
4 siblings, 0 replies; 6+ messages in thread
From: Palmer Dabbelt @ 2022-07-14 21:26 UTC (permalink / raw)
To: linux-riscv
Cc: Paul Walmsley, aou, rdunlap, Arnd Bergmann, anup,
alexandre.ghiti, damien.lemoal, Atish Patra, axboe, guoren,
mchitale, linux-riscv, linux-kernel, linux
On Sat, 21 May 2022 12:33:57 PDT (-0700), Palmer Dabbelt wrote:
> From: Palmer Dabbelt <palmer@rivosinc.com>
>
> The RISC-V port has collected a handful of options that are
> fundamentally non-portable. To prevent users from shooting themselves
> in the foot, hide them all behind a config entry that explicitly calls
> out that non-portable binaries may be produced.
>
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
> ---
> Changes since v2:
>
> * Update the nommu and rv32 defconfigs. I'm still getting some ugliness
> like
>
> $ make.riscv rv32_defconfig
> *** Default configuration is based on 'defconfig'
> #
> # configuration written to .config
> #
> Using .config as base
> Merging ./arch/riscv/configs/32-bit.config
> Value of CONFIG_PORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config:
> Previous value: CONFIG_PORTABLE=y
> New value: # CONFIG_PORTABLE is not set
>
> Value of CONFIG_NONPORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config:
> Previous value: # CONFIG_NONPORTABLE is not set
> New value: CONFIG_NONPORTABLE=y
>
> #
> # merged configuration written to .config (needs make)
> #
> .config:3831:warning: override: ARCH_RV32I changes choice state
> #
> # configuration written to .config
> #
>
> not sure if there's a better way to do this.
>
> Changes since v1:
>
> * Fix a bunch of spelling mistakes.
> * Move NONPORTABLE under the "Platform type" sub-heading.
> * Fix the rv32i dependency.
>
> ---
> arch/riscv/Kconfig | 28 +++++++++++++++++--
> arch/riscv/configs/32-bit.config | 2 ++
> arch/riscv/configs/nommu_k210_defconfig | 1 +
> .../riscv/configs/nommu_k210_sdcard_defconfig | 1 +
> arch/riscv/configs/nommu_virt_defconfig | 1 +
> arch/riscv/configs/rv32_defconfig | 1 +
> 6 files changed, 32 insertions(+), 2 deletions(-)
>
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index f863065b478c..cd67b09a80f5 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -222,6 +222,21 @@ source "arch/riscv/Kconfig.erratas"
>
> menu "Platform type"
>
> +config NONPORTABLE
> + bool "Allow configurations that result in non-portable kernels"
> + help
> + RISC-V kernel binaries are compatible between all known systems
> + whenever possible, but there are some use cases that can only be
> + satisfied by configurations that result in kernel binaries that are
> + not portable between systems.
> +
> + Selecting N does not guarantee kernels will be portable to all known
> + systems. Selecting any of the options guarded by NONPORTABLE will
> + result in kernel binaries that are unlikely to be portable between
> + systems.
> +
> + If unsure, say N.
> +
> choice
> prompt "Base ISA"
> default ARCH_RV64I
> @@ -231,6 +246,7 @@ choice
>
> config ARCH_RV32I
> bool "RV32I"
> + depends on NONPORTABLE
> select 32BIT
> select GENERIC_LIB_ASHLDI3
> select GENERIC_LIB_ASHRDI3
> @@ -541,6 +557,7 @@ config STACKPROTECTOR_PER_TASK
>
> config PHYS_RAM_BASE_FIXED
> bool "Explicitly specified physical RAM address"
> + depends on NONPORTABLE
> default n
>
> config PHYS_RAM_BASE
> @@ -554,7 +571,7 @@ config PHYS_RAM_BASE
>
> config XIP_KERNEL
> bool "Kernel Execute-In-Place from ROM"
> - depends on MMU && SPARSEMEM
> + depends on MMU && SPARSEMEM && NONPORTABLE
> # This prevents XIP from being enabled by all{yes,mod}config, which
> # fail to build since XIP doesn't support large kernels.
> depends on !COMPILE_TEST
> @@ -594,9 +611,16 @@ endmenu
>
> config BUILTIN_DTB
> bool
> - depends on OF
> + depends on OF && NONPORTABLE
> default y if XIP_KERNEL
>
> +config PORTABLE
> + bool
> + default !NONPORTABLE
> + select EFI
> + select OF
> + select MMU
> +
> menu "Power management options"
>
> source "kernel/power/Kconfig"
> diff --git a/arch/riscv/configs/32-bit.config b/arch/riscv/configs/32-bit.config
> index 43f41323b67e..f6af0f708df4 100644
> --- a/arch/riscv/configs/32-bit.config
> +++ b/arch/riscv/configs/32-bit.config
> @@ -1,2 +1,4 @@
> CONFIG_ARCH_RV32I=y
> CONFIG_32BIT=y
> +# CONFIG_PORTABLE is not set
> +CONFIG_NONPORTABLE=y
> diff --git a/arch/riscv/configs/nommu_k210_defconfig b/arch/riscv/configs/nommu_k210_defconfig
> index 2438fa39f8ae..96fe8def644c 100644
> --- a/arch/riscv/configs/nommu_k210_defconfig
> +++ b/arch/riscv/configs/nommu_k210_defconfig
> @@ -28,6 +28,7 @@ CONFIG_EMBEDDED=y
> CONFIG_SLOB=y
> # CONFIG_MMU is not set
> CONFIG_SOC_CANAAN=y
> +CONFIG_NONPORTABLE=y
> CONFIG_SMP=y
> CONFIG_NR_CPUS=2
> CONFIG_CMDLINE="earlycon console=ttySIF0"
> diff --git a/arch/riscv/configs/nommu_k210_sdcard_defconfig b/arch/riscv/configs/nommu_k210_sdcard_defconfig
> index 9a133e63ae5b..379740654373 100644
> --- a/arch/riscv/configs/nommu_k210_sdcard_defconfig
> +++ b/arch/riscv/configs/nommu_k210_sdcard_defconfig
> @@ -20,6 +20,7 @@ CONFIG_EMBEDDED=y
> CONFIG_SLOB=y
> # CONFIG_MMU is not set
> CONFIG_SOC_CANAAN=y
> +CONFIG_NONPORTABLE=y
> CONFIG_SMP=y
> CONFIG_NR_CPUS=2
> CONFIG_CMDLINE="earlycon console=ttySIF0 root=/dev/mmcblk0p1 rootwait ro"
> diff --git a/arch/riscv/configs/nommu_virt_defconfig b/arch/riscv/configs/nommu_virt_defconfig
> index 5269fbb6b4fc..1a56eda5ce46 100644
> --- a/arch/riscv/configs/nommu_virt_defconfig
> +++ b/arch/riscv/configs/nommu_virt_defconfig
> @@ -25,6 +25,7 @@ CONFIG_EXPERT=y
> CONFIG_SLOB=y
> # CONFIG_MMU is not set
> CONFIG_SOC_VIRT=y
> +CONFIG_NONPORTABLE=y
> CONFIG_SMP=y
> CONFIG_CMDLINE="root=/dev/vda rw earlycon=uart8250,mmio,0x10000000,115200n8 console=ttyS0"
> CONFIG_CMDLINE_FORCE=y
> diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig
> index 7e5efdc3829d..77bdb1d05a88 100644
> --- a/arch/riscv/configs/rv32_defconfig
> +++ b/arch/riscv/configs/rv32_defconfig
> @@ -18,6 +18,7 @@ CONFIG_EXPERT=y
> CONFIG_PROFILING=y
> CONFIG_SOC_SIFIVE=y
> CONFIG_SOC_VIRT=y
> +CONFIG_NONPORTABLE=y
> CONFIG_ARCH_RV32I=y
> CONFIG_SMP=y
> CONFIG_HOTPLUG_CPU=y
This is on for-next.
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH v3] RISC-V: Add CONFIG_{NON,}PORTABLE
2022-05-21 19:33 [PATCH v3] RISC-V: Add CONFIG_{NON,}PORTABLE Palmer Dabbelt
` (3 preceding siblings ...)
2022-07-14 21:26 ` Palmer Dabbelt
@ 2022-07-15 7:47 ` Geert Uytterhoeven
4 siblings, 0 replies; 6+ messages in thread
From: Geert Uytterhoeven @ 2022-07-15 7:47 UTC (permalink / raw)
To: Palmer Dabbelt
Cc: linux-riscv, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Randy Dunlap, Arnd Bergmann, Anup Patel, Alexandre Ghiti,
Damien Le Moal, Atish Patra, Jens Axboe, Guo Ren, mchitale,
Linux Kernel Mailing List, linux
Hi Palmer,
On Sat, May 21, 2022 at 10:49 PM Palmer Dabbelt <palmer@rivosinc.com> wrote:
> From: Palmer Dabbelt <palmer@rivosinc.com>
>
> The RISC-V port has collected a handful of options that are
> fundamentally non-portable. To prevent users from shooting themselves
> in the foot, hide them all behind a config entry that explicitly calls
> out that non-portable binaries may be produced.
>
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Thanks for your patch, which is now commit 44c1e84a38a03175 ("RISC-V:
Add CONFIG_{NON,}PORTABLE") in riscv/for-next
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -222,6 +222,21 @@ source "arch/riscv/Kconfig.erratas"
>
> menu "Platform type"
>
> +config NONPORTABLE
> + bool "Allow configurations that result in non-portable kernels"
> + help
> + RISC-V kernel binaries are compatible between all known systems
> + whenever possible, but there are some use cases that can only be
> + satisfied by configurations that result in kernel binaries that are
> + not portable between systems.
> +
> + Selecting N does not guarantee kernels will be portable to all known
> + systems. Selecting any of the options guarded by NONPORTABLE will
> + result in kernel binaries that are unlikely to be portable between
> + systems.
> +
> + If unsure, say N.
Doing it this way means allmodconfig will enable NONPORTABLE, which
may not be what we want?
> +
> choice
> prompt "Base ISA"
> default ARCH_RV64I
> @@ -554,7 +571,7 @@ config PHYS_RAM_BASE
>
> config XIP_KERNEL
> bool "Kernel Execute-In-Place from ROM"
> - depends on MMU && SPARSEMEM
> + depends on MMU && SPARSEMEM && NONPORTABLE
Nice! Would we get something like this on arm32 past rmk?
> # This prevents XIP from being enabled by all{yes,mod}config, which
> # fail to build since XIP doesn't support large kernels.
> depends on !COMPILE_TEST
> @@ -594,9 +611,16 @@ endmenu
>
> config BUILTIN_DTB
> bool
> - depends on OF
> + depends on OF && NONPORTABLE
> default y if XIP_KERNEL
>
> +config PORTABLE
> + bool
> + default !NONPORTABLE
> + select EFI
> + select OF
> + select MMU
> +
> menu "Power management options"
>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 6+ messages in thread