config ARCH_WANTS_DYNAMIC_TASK_STRUCT
        bool
 
+config ARCH_32BIT_OFF_T
+       bool
+       depends on !64BIT
+       help
+         All new 32-bit architectures should have 64-bit off_t type on
+         userspace side which corresponds to the loff_t kernel type. This
+         is the requirement for modern ABIs. Some existing architectures
+         still support 32-bit off_t. This option is enabled for all such
+         architectures explicitly.
+
 config HAVE_REGS_AND_STACK_ACCESS_API
        bool
        help
 
        select ARCH_HAS_SYNC_DMA_FOR_CPU
        select ARCH_HAS_SYNC_DMA_FOR_DEVICE
        select ARCH_SUPPORTS_ATOMIC_RMW if ARC_HAS_LLSC
+       select ARCH_32BIT_OFF_T
        select BUILDTIME_EXTABLE_SORT
        select CLONE_BACKWARDS
        select COMMON_CLK
 
 config ARM
        bool
        default y
+       select ARCH_32BIT_OFF_T
        select ARCH_CLOCKSOURCE_DATA
        select ARCH_DISCARD_MEMBLOCK if !HAVE_ARCH_PFN_VALID && !KEXEC
        select ARCH_HAS_DEBUG_VIRTUAL if MMU
 
 
 config C6X
        def_bool y
+       select ARCH_32BIT_OFF_T
        select ARCH_HAS_SYNC_DMA_FOR_CPU
        select ARCH_HAS_SYNC_DMA_FOR_DEVICE
        select CLKDEV_LOOKUP
 
 config CSKY
        def_bool y
+       select ARCH_32BIT_OFF_T
        select ARCH_HAS_SYNC_DMA_FOR_CPU
        select ARCH_HAS_SYNC_DMA_FOR_DEVICE
        select ARCH_USE_BUILTIN_BSWAP
 
 # SPDX-License-Identifier: GPL-2.0
 config H8300
         def_bool y
+       select ARCH_32BIT_OFF_T
        select GENERIC_ATOMIC64
        select HAVE_UID16
        select VIRT_TO_BUS
 
 
 config HEXAGON
        def_bool y
+       select ARCH_32BIT_OFF_T
        select ARCH_HAS_SYNC_DMA_FOR_DEVICE
        select ARCH_NO_PREEMPT
        select HAVE_OPROFILE
 
 config M68K
        bool
        default y
+       select ARCH_32BIT_OFF_T
        select ARCH_HAS_SYNC_DMA_FOR_DEVICE if HAS_DMA
        select ARCH_MIGHT_HAVE_PC_PARPORT if ISA
        select ARCH_NO_COHERENT_DMA_MMAP if !MMU
 
 config MICROBLAZE
        def_bool y
+       select ARCH_32BIT_OFF_T
        select ARCH_NO_SWAP
        select ARCH_HAS_DMA_COHERENT_TO_PFN if MMU
        select ARCH_HAS_GCOV_PROFILE_ALL
 
 config MIPS
        bool
        default y
+       select ARCH_32BIT_OFF_T if !64BIT
        select ARCH_BINFMT_ELF_STATE if MIPS_FP_SUPPORT
        select ARCH_CLOCKSOURCE_DATA
        select ARCH_DISCARD_MEMBLOCK
 
 
 config NDS32
         def_bool y
+       select ARCH_32BIT_OFF_T
        select ARCH_HAS_SYNC_DMA_FOR_CPU
        select ARCH_HAS_SYNC_DMA_FOR_DEVICE
        select ARCH_WANT_FRAME_POINTERS if FTRACE
 
 # SPDX-License-Identifier: GPL-2.0
 config NIOS2
        def_bool y
+       select ARCH_32BIT_OFF_T
        select ARCH_HAS_SYNC_DMA_FOR_CPU
        select ARCH_HAS_SYNC_DMA_FOR_DEVICE
        select ARCH_NO_SWAP
 
 
 config OPENRISC
        def_bool y
+       select ARCH_32BIT_OFF_T
        select ARCH_HAS_SYNC_DMA_FOR_DEVICE
        select OF
        select OF_EARLY_FLATTREE
 
 # SPDX-License-Identifier: GPL-2.0
 config PARISC
        def_bool y
+       select ARCH_32BIT_OFF_T if !64BIT
        select ARCH_MIGHT_HAVE_PC_PARPORT
        select HAVE_IDE
        select HAVE_OPROFILE
 
        #
        # Please keep this list sorted alphabetically.
        #
+       select ARCH_32BIT_OFF_T if PPC32
        select ARCH_HAS_DEBUG_VIRTUAL
        select ARCH_HAS_DEVMEM_IS_ALLOWED
        select ARCH_HAS_DMA_SET_COHERENT_MASK
 
 
 config RISCV
        def_bool y
+       select ARCH_32BIT_OFF_T if !64BIT
        # even on 32-bit, physical (and DMA) addresses are > 32-bits
        select PHYS_ADDR_T_64BIT
        select OF
 
 
 config SUPERH32
        def_bool "$(ARCH)" = "sh"
+       select ARCH_32BIT_OFF_T
        select HAVE_KPROBES
        select HAVE_KRETPROBES
        select HAVE_IOREMAP_PROT if MMU && !X2TLB
 
 
 config SPARC32
        def_bool !64BIT
+       select ARCH_32BIT_OFF_T
        select ARCH_HAS_SYNC_DMA_FOR_CPU
        select GENERIC_ATOMIC64
        select CLZ_TAB
 
 # SPDX-License-Identifier: GPL-2.0
 config UNICORE32
        def_bool y
+       select ARCH_32BIT_OFF_T
        select ARCH_HAS_DEVMEM_IS_ALLOWED
        select ARCH_MIGHT_HAVE_PC_PARPORT
        select ARCH_MIGHT_HAVE_PC_SERIO
 
        select ACPI_LEGACY_TABLES_LOOKUP        if ACPI
        select ACPI_SYSTEM_POWER_STATES_SUPPORT if ACPI
        select ANON_INODES
+       select ARCH_32BIT_OFF_T                 if X86_32
        select ARCH_CLOCKSOURCE_DATA
        select ARCH_CLOCKSOURCE_INIT
        select ARCH_DISCARD_MEMBLOCK
 
 config X86_32
        def_bool !64BIT
        select HAVE_AOUT
+       select ARCH_32BIT_OFF_T
        select ARCH_WANT_IPC_PARSE_VERSION
        select MODULES_USE_ELF_REL
        select CLONE_BACKWARDS
 
 # SPDX-License-Identifier: GPL-2.0
 config XTENSA
        def_bool y
+       select ARCH_32BIT_OFF_T
        select ARCH_HAS_SYNC_DMA_FOR_CPU
        select ARCH_HAS_SYNC_DMA_FOR_DEVICE
        select ARCH_NO_COHERENT_DMA_MMAP if !MMU
 
         O_NOATIME | O_CLOEXEC | O_PATH | __O_TMPFILE)
 
 #ifndef force_o_largefile
-#define force_o_largefile() (BITS_PER_LONG != 32)
+#define force_o_largefile() (!IS_ENABLED(CONFIG_ARCH_32BIT_OFF_T))
 #endif
 
 #if BITS_PER_LONG == 32