[PATCH] sandbox: Eliminate CONFIG_HOST_32/64BIT
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Fri Oct 14 14:58:23 CEST 2022
On 10/14/22 13:42, Michal Suchánek wrote:
> On Fri, Oct 14, 2022 at 01:33:33PM +0200, Heinrich Schuchardt wrote:
>> On 10/14/22 10:33, Michal Suchánek wrote:
>>> Hello,
>>>
>>> On Fri, Oct 14, 2022 at 08:40:52AM +0200, Heinrich Schuchardt wrote:
>>>> From: Heinrich Schuchardt <xypron.glpk at gmx.de>
>>>>
>>>> Building sandbox_defconfig on 32bit systems requires manual configuration.
>>>> we should void this.
>>>>
>>>> The compiler provides symbol __LP64__. This is enough to know if the host
>>>> is a 64bit or a 32bit system.
>>>>
>>>> Reported-by: Michal Suchanek <msuchanek at suse.de>
>>>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>>>> ---
>>>> arch/sandbox/Kconfig | 24 ------------------------
>>>> arch/sandbox/include/asm/posix_types.h | 8 +++++++-
>>>> drivers/misc/swap_case.c | 2 +-
>>>> include/linux/bitops.h | 2 +-
>>>> 4 files changed, 9 insertions(+), 27 deletions(-)
>>>>
>>>> diff --git a/arch/sandbox/Kconfig b/arch/sandbox/Kconfig
>>>> index 852a7c8bf2..c7668233b9 100644
>>>> --- a/arch/sandbox/Kconfig
>>>> +++ b/arch/sandbox/Kconfig
>>>> @@ -13,7 +13,6 @@ config SYS_CPU
>>>> config SANDBOX64
>>>> bool "Use 64-bit addresses"
>>>> select PHYS_64BIT
>>>> - select HOST_64BIT
>>>
>>> eliminating the Kconfig option makes it no longer possible SANDBOX64
>>> depend on building 64bit.
>>
>> Looking at include/linux/bitops.h and drivers/misc/swap_case.c it was always
>> wrong to use HOST_64BIT=y when building sandbox64_defconfig on an ILP32
>> system.
>
> And it will continue to be wrong when there is no config option that
> SANDBOX64 can depend on so it cannot be enabled on 32bit.
Before and after this patch you can build sandbox64 on ilp32. Kconfig is
not meant to stop you from building.
The raison d'etre of phys_addr_t is that it can be wider than void *.
sandbox64 can be booted on ilp32 but has bugs that need attention.
Best regards
Heinrich
>
> Thanks
>
> Michal
>
>>
>> Best regards
>>
>> Heinrich
>>
>>>
>>> Thanks
>>>
>>> Michal
>>>> config SANDBOX_RAM_SIZE_MB
>>>> int "RAM size in MiB"
>>>> @@ -41,24 +40,6 @@ config SYS_CONFIG_NAME
>>>> default "sandbox_spl" if SANDBOX_SPL
>>>> default "sandbox" if !SANDBOX_SPL
>>>> -choice
>>>> - prompt "Run sandbox on 32/64-bit host"
>>>> - default HOST_64BIT
>>>> - help
>>>> - Sandbox can be built on 32-bit and 64-bit hosts.
>>>> - The default is to build on a 64-bit host and run
>>>> - on a 64-bit host. If you want to run sandbox on
>>>> - a 32-bit host, change it here.
>>>> -
>>>> -config HOST_32BIT
>>>> - bool "32-bit host"
>>>> - depends on !PHYS_64BIT
>>>> -
>>>> -config HOST_64BIT
>>>> - bool "64-bit host"
>>>> -
>>>> -endchoice
>>>> -
>>>> config SANDBOX_CRASH_RESET
>>>> bool "Reset on crash"
>>>> help
>>>> @@ -68,11 +49,6 @@ config SANDBOX_CRASH_RESET
>>>> test suites like the UEFI self certification test which continue
>>>> with the next test after a crash.
>>>> -config SANDBOX_BITS_PER_LONG
>>>> - int
>>>> - default 32 if HOST_32BIT
>>>> - default 64 if HOST_64BIT
>>>> -
>>>> config SYS_FDT_LOAD_ADDR
>>>> hex "Address at which to load devicetree"
>>>> default 0x100
>>>> diff --git a/arch/sandbox/include/asm/posix_types.h b/arch/sandbox/include/asm/posix_types.h
>>>> index ec18ed7e3c..0129e91122 100644
>>>> --- a/arch/sandbox/include/asm/posix_types.h
>>>> +++ b/arch/sandbox/include/asm/posix_types.h
>>>> @@ -19,6 +19,12 @@
>>>> * assume GCC is being used.
>>>> */
>>>> +#ifdef __LP64__
>>>> +#define SANDBOX_BITS_PER_LONG 64
>>>> +#else
>>>> +#define SANDBOX_BITS_PER_LONG 32
>>>> +#endif
>>>> +
>>>> typedef unsigned short __kernel_dev_t;
>>>> typedef unsigned long __kernel_ino_t;
>>>> typedef unsigned short __kernel_mode_t;
>>>> @@ -28,7 +34,7 @@ typedef int __kernel_pid_t;
>>>> typedef unsigned short __kernel_ipc_pid_t;
>>>> typedef unsigned short __kernel_uid_t;
>>>> typedef unsigned short __kernel_gid_t;
>>>> -#if CONFIG_SANDBOX_BITS_PER_LONG == 32
>>>> +#if SANDBOX_BITS_PER_LONG == 32
>>>> typedef unsigned int __kernel_size_t;
>>>> typedef int __kernel_ssize_t;
>>>> typedef int __kernel_ptrdiff_t;
>>>> diff --git a/drivers/misc/swap_case.c b/drivers/misc/swap_case.c
>>>> index 7093ad1cd4..205ed81750 100644
>>>> --- a/drivers/misc/swap_case.c
>>>> +++ b/drivers/misc/swap_case.c
>>>> @@ -331,7 +331,7 @@ static int sandbox_swap_case_map_physmem(struct udevice *dev,
>>>> *ptrp = &pci_ea_bar2_magic;
>>>> *lenp = PCI_CAP_EA_SIZE_LO;
>>>> break;
>>>> -#ifdef CONFIG_HOST_64BIT
>>>> +#ifdef __LP64__
>>>> /*
>>>> * This cannot be work on a 32-bit machine since *lenp is ulong
>>>> * which is 32-bits, but it needs to have a 64-bit value
>>>> diff --git a/include/linux/bitops.h b/include/linux/bitops.h
>>>> index d2e5ca026e..6456f5ad45 100644
>>>> --- a/include/linux/bitops.h
>>>> +++ b/include/linux/bitops.h
>>>> @@ -28,7 +28,7 @@
>>>> */
>>>> #ifdef CONFIG_SANDBOX
>>>> #define GENMASK(h, l) \
>>>> - (((~0UL) << (l)) & (~0UL >> (CONFIG_SANDBOX_BITS_PER_LONG - 1 - (h))))
>>>> + (((~0UL) << (l)) & (~0UL >> (SANDBOX_BITS_PER_LONG - 1 - (h))))
>>>> #else
>>>> #define GENMASK(h, l) \
>>>> (((~0UL) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h))))
>>>> --
>>>> 2.37.2
>>>>
>>
More information about the U-Boot
mailing list