diff --git a/target/linux/uml/Makefile b/target/linux/uml/Makefile index 00f19fce5bd..d3f32629753 100644 --- a/target/linux/uml/Makefile +++ b/target/linux/uml/Makefile @@ -15,6 +15,7 @@ FEATURES:=audio ext4 rootfs-part squashfs SUBTARGETS:=generic KERNEL_PATCHVER:=6.6 +KERNEL_TESTING_PATCHVER:=6.12 include $(INCLUDE_DIR)/target.mk diff --git a/target/linux/uml/config-6.6 b/target/linux/uml/config-6.12 similarity index 94% rename from target/linux/uml/config-6.6 rename to target/linux/uml/config-6.12 index 60d1ce0713f..273c10ea4f2 100644 --- a/target/linux/uml/config-6.6 +++ b/target/linux/uml/config-6.12 @@ -1,7 +1,6 @@ CONFIG_3_LEVEL_PGTABLES=y CONFIG_64BIT=y CONFIG_ARCH_DMA_ADDR_T_64BIT=y -CONFIG_ARCH_NO_PREEMPT=y CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_BLK_DEV_COW_COMMON=y CONFIG_BLK_DEV_LOOP=y @@ -15,6 +14,7 @@ CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 # CONFIG_COMPAT_32BIT_TIME is not set CONFIG_CON_CHAN="xterm" CONFIG_CON_ZERO_CHAN="fd:0,fd:1" +CONFIG_CPU_MITIGATIONS=y CONFIG_CPU_SUP_AMD=y CONFIG_CPU_SUP_CENTAUR=y CONFIG_CPU_SUP_HYGON=y @@ -30,6 +30,7 @@ CONFIG_CRYPTO_LIB_SHA1=y CONFIG_CRYPTO_LIB_UTILS=y CONFIG_CRYPTO_SHA1=y CONFIG_DCACHE_WORD_ACCESS=y +# CONFIG_DEBUG_INFO is not set CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_GZIP=y CONFIG_DNOTIFY=y @@ -38,13 +39,14 @@ CONFIG_EXCLUSIVE_SYSTEM_RAM=y CONFIG_EXT4_FS=y CONFIG_F2FS_FS=y CONFIG_FAILOVER=y +CONFIG_FORCE_NR_CPUS=y CONFIG_FS_IOMAP=y CONFIG_FS_MBCACHE=y CONFIG_FUNCTION_ALIGNMENT=0 CONFIG_FW_LOADER_PAGED_BUF=y CONFIG_FW_LOADER_SYSFS=y CONFIG_GENERIC_CLOCKEVENTS=y -# CONFIG_GENERIC_CPU is not set +CONFIG_GENERIC_CPU=y CONFIG_GENERIC_CPU_DEVICES=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GPIO_CDEV=y @@ -61,13 +63,14 @@ CONFIG_JBD2=y # CONFIG_JFFS2_FS is not set CONFIG_KALLSYMS=y CONFIG_KERNEL_STACK_ORDER=2 +CONFIG_LD_SCRIPT_DYN_RPATH=y CONFIG_LOCK_DEBUGGING_SUPPORT=y # CONFIG_MATOM is not set CONFIG_MAY_HAVE_RUNTIME_DEPS=y CONFIG_MCONSOLE=y # CONFIG_MCORE2 is not set CONFIG_MIGRATION=y -CONFIG_MK8=y +# CONFIG_MK8 is not set # CONFIG_MMAPPER is not set CONFIG_MMU_LAZY_TLB_REFCOUNT=y CONFIG_MODULES_USE_ELF_RELA=y @@ -84,6 +87,7 @@ CONFIG_NO_DMA=y CONFIG_NO_IOMEM=y CONFIG_NO_IOPORT_MAP=y CONFIG_NR_CPUS=1 +# CONFIG_NSM is not set CONFIG_NULL_CHAN=y # CONFIG_OF is not set CONFIG_PAGE_POOL=y @@ -95,7 +99,6 @@ CONFIG_PHYS_ADDR_T_64BIT=y CONFIG_PORT_CHAN=y CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE_SYSCTL=y -CONFIG_PREEMPT_NONE_BUILD=y # CONFIG_PROCESSOR_SELECT is not set CONFIG_PROC_PAGE_MONITOR=y CONFIG_PTP_1588_CLOCK_OPTIONAL=y @@ -122,7 +125,6 @@ CONFIG_UML_NET_DAEMON_DEFAULT_SOCK="/tmp/uml.ctl" CONFIG_UML_NET_DETERMINISTIC_MAC=y CONFIG_UML_NET_ETHERTAP=y CONFIG_UML_NET_MCAST=y -# CONFIG_UML_NET_PCAP is not set CONFIG_UML_NET_SLIP=y CONFIG_UML_NET_SLIRP=y CONFIG_UML_NET_TUNTAP=y @@ -138,6 +140,7 @@ CONFIG_VIRTIO=y CONFIG_VIRTIO_ANCHOR=y CONFIG_VIRTIO_BLK=y CONFIG_VIRTIO_CONSOLE=y +# CONFIG_VIRTIO_DEBUG is not set CONFIG_VIRTIO_NET=y CONFIG_VIRTIO_UML=y CONFIG_VMAP_STACK=y @@ -146,12 +149,11 @@ CONFIG_WATCHDOG_CORE=y CONFIG_X86_64=y CONFIG_X86_CMOV=y CONFIG_X86_CMPXCHG64=y -CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_HAVE_PAE=y CONFIG_X86_INTERNODE_CACHE_SHIFT=6 CONFIG_X86_L1_CACHE_SHIFT=6 CONFIG_X86_MINIMUM_CPU_FAMILY=64 CONFIG_X86_TSC=y -CONFIG_X86_USE_PPRO_CHECKSUM=y CONFIG_X86_VMX_FEATURE_NAMES=y CONFIG_XTERM_CHAN=y CONFIG_XTERM_CHAN_DEFAULT_EMULATOR="xterm" diff --git a/target/linux/uml/patches-6.12/000-v6.13-asm-generic-io.h-rework-split-ioread64-iowrite64-hel.patch b/target/linux/uml/patches-6.12/000-v6.13-asm-generic-io.h-rework-split-ioread64-iowrite64-hel.patch new file mode 100644 index 00000000000..f4092aad3ff --- /dev/null +++ b/target/linux/uml/patches-6.12/000-v6.13-asm-generic-io.h-rework-split-ioread64-iowrite64-hel.patch @@ -0,0 +1,301 @@ +From dc90c890363d3e4b0ec73cd21b5be592692723fd Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Mon, 3 Feb 2025 15:07:30 +0100 +Subject: [PATCH] asm-generic/io.h: rework split ioread64/iowrite64 helpers + +There are two incompatible sets of definitions of these eight functions: +On 64-bit architectures setting CONFIG_HAS_IOPORT, they turn into +either pair of 32-bit PIO (inl/outl) accesses or a single 64-bit MMIO +(readq/writeq). On other 64-bit architectures, they are always split +into 32-bit accesses. + +Depending on which header gets included in a driver, there are +additionally definitions for ioread64()/iowrite64() that are +expected to produce a 64-bit register MMIO access on all 64-bit +architectures. + +To separate the conflicting definitions, make the version in +include/linux/io-64-nonatomic-*.h visible on all architectures +but pick the one from lib/iomap.c on architectures that set +CONFIG_GENERIC_IOMAP in place of the default fallback. + +Acked-by: Andy Shevchenko +Signed-off-by: Arnd Bergmann +--- + include/asm-generic/iomap.h | 36 ++++++------------------ + include/linux/io-64-nonatomic-hi-lo.h | 16 +++++++++++ + include/linux/io-64-nonatomic-lo-hi.h | 16 +++++++++++ + lib/iomap.c | 40 +++++++++++++-------------- + 4 files changed, 60 insertions(+), 48 deletions(-) + +diff --git a/include/asm-generic/iomap.h b/include/asm-generic/iomap.h +index 196087a8126e..9f3f25d7fc58 100644 +--- a/include/asm-generic/iomap.h ++++ b/include/asm-generic/iomap.h +@@ -31,42 +31,22 @@ extern unsigned int ioread16(const void __iomem *); + extern unsigned int ioread16be(const void __iomem *); + extern unsigned int ioread32(const void __iomem *); + extern unsigned int ioread32be(const void __iomem *); +-#ifdef CONFIG_64BIT +-extern u64 ioread64(const void __iomem *); +-extern u64 ioread64be(const void __iomem *); +-#endif + +-#ifdef readq +-#define ioread64_lo_hi ioread64_lo_hi +-#define ioread64_hi_lo ioread64_hi_lo +-#define ioread64be_lo_hi ioread64be_lo_hi +-#define ioread64be_hi_lo ioread64be_hi_lo +-extern u64 ioread64_lo_hi(const void __iomem *addr); +-extern u64 ioread64_hi_lo(const void __iomem *addr); +-extern u64 ioread64be_lo_hi(const void __iomem *addr); +-extern u64 ioread64be_hi_lo(const void __iomem *addr); +-#endif ++extern u64 __ioread64_lo_hi(const void __iomem *addr); ++extern u64 __ioread64_hi_lo(const void __iomem *addr); ++extern u64 __ioread64be_lo_hi(const void __iomem *addr); ++extern u64 __ioread64be_hi_lo(const void __iomem *addr); + + extern void iowrite8(u8, void __iomem *); + extern void iowrite16(u16, void __iomem *); + extern void iowrite16be(u16, void __iomem *); + extern void iowrite32(u32, void __iomem *); + extern void iowrite32be(u32, void __iomem *); +-#ifdef CONFIG_64BIT +-extern void iowrite64(u64, void __iomem *); +-extern void iowrite64be(u64, void __iomem *); +-#endif + +-#ifdef writeq +-#define iowrite64_lo_hi iowrite64_lo_hi +-#define iowrite64_hi_lo iowrite64_hi_lo +-#define iowrite64be_lo_hi iowrite64be_lo_hi +-#define iowrite64be_hi_lo iowrite64be_hi_lo +-extern void iowrite64_lo_hi(u64 val, void __iomem *addr); +-extern void iowrite64_hi_lo(u64 val, void __iomem *addr); +-extern void iowrite64be_lo_hi(u64 val, void __iomem *addr); +-extern void iowrite64be_hi_lo(u64 val, void __iomem *addr); +-#endif ++extern void __iowrite64_lo_hi(u64 val, void __iomem *addr); ++extern void __iowrite64_hi_lo(u64 val, void __iomem *addr); ++extern void __iowrite64be_lo_hi(u64 val, void __iomem *addr); ++extern void __iowrite64be_hi_lo(u64 val, void __iomem *addr); + + /* + * "string" versions of the above. Note that they +diff --git a/include/linux/io-64-nonatomic-hi-lo.h b/include/linux/io-64-nonatomic-hi-lo.h +index f32522bb3aa5..d3eade7cf663 100644 +--- a/include/linux/io-64-nonatomic-hi-lo.h ++++ b/include/linux/io-64-nonatomic-hi-lo.h +@@ -101,22 +101,38 @@ static inline void iowrite64be_hi_lo(u64 val, void __iomem *addr) + + #ifndef ioread64 + #define ioread64_is_nonatomic ++#if defined(CONFIG_GENERIC_IOMAP) && defined(CONFIG_64BIT) ++#define ioread64 __ioread64_hi_lo ++#else + #define ioread64 ioread64_hi_lo + #endif ++#endif + + #ifndef iowrite64 + #define iowrite64_is_nonatomic ++#if defined(CONFIG_GENERIC_IOMAP) && defined(CONFIG_64BIT) ++#define iowrite64 __iowrite64_hi_lo ++#else + #define iowrite64 iowrite64_hi_lo + #endif ++#endif + + #ifndef ioread64be + #define ioread64be_is_nonatomic ++#if defined(CONFIG_GENERIC_IOMAP) && defined(CONFIG_64BIT) ++#define ioread64be __ioread64be_hi_lo ++#else + #define ioread64be ioread64be_hi_lo + #endif ++#endif + + #ifndef iowrite64be + #define iowrite64be_is_nonatomic ++#if defined(CONFIG_GENERIC_IOMAP) && defined(CONFIG_64BIT) ++#define iowrite64be __iowrite64be_hi_lo ++#else + #define iowrite64be iowrite64be_hi_lo + #endif ++#endif + + #endif /* _LINUX_IO_64_NONATOMIC_HI_LO_H_ */ +diff --git a/include/linux/io-64-nonatomic-lo-hi.h b/include/linux/io-64-nonatomic-lo-hi.h +index 448a21435dba..94e676ec3d3f 100644 +--- a/include/linux/io-64-nonatomic-lo-hi.h ++++ b/include/linux/io-64-nonatomic-lo-hi.h +@@ -101,22 +101,38 @@ static inline void iowrite64be_lo_hi(u64 val, void __iomem *addr) + + #ifndef ioread64 + #define ioread64_is_nonatomic ++#if defined(CONFIG_GENERIC_IOMAP) && defined(CONFIG_64BIT) ++#define ioread64 __ioread64_lo_hi ++#else + #define ioread64 ioread64_lo_hi + #endif ++#endif + + #ifndef iowrite64 + #define iowrite64_is_nonatomic ++#if defined(CONFIG_GENERIC_IOMAP) && defined(CONFIG_64BIT) ++#define iowrite64 __iowrite64_lo_hi ++#else + #define iowrite64 iowrite64_lo_hi + #endif ++#endif + + #ifndef ioread64be + #define ioread64be_is_nonatomic ++#if defined(CONFIG_GENERIC_IOMAP) && defined(CONFIG_64BIT) ++#define ioread64be __ioread64be_lo_hi ++#else + #define ioread64be ioread64be_lo_hi + #endif ++#endif + + #ifndef iowrite64be + #define iowrite64be_is_nonatomic ++#if defined(CONFIG_GENERIC_IOMAP) && defined(CONFIG_64BIT) ++#define iowrite64be __iowrite64be_lo_hi ++#else + #define iowrite64be iowrite64be_lo_hi + #endif ++#endif + + #endif /* _LINUX_IO_64_NONATOMIC_LO_HI_H_ */ +diff --git a/lib/iomap.c b/lib/iomap.c +index 4f8b31baa575..a65717cd86f7 100644 +--- a/lib/iomap.c ++++ b/lib/iomap.c +@@ -111,7 +111,7 @@ EXPORT_SYMBOL(ioread16be); + EXPORT_SYMBOL(ioread32); + EXPORT_SYMBOL(ioread32be); + +-#ifdef readq ++#ifdef CONFIG_64BIT + static u64 pio_read64_lo_hi(unsigned long port) + { + u64 lo, hi; +@@ -153,21 +153,21 @@ static u64 pio_read64be_hi_lo(unsigned long port) + } + + __no_kmsan_checks +-u64 ioread64_lo_hi(const void __iomem *addr) ++u64 __ioread64_lo_hi(const void __iomem *addr) + { + IO_COND(addr, return pio_read64_lo_hi(port), return readq(addr)); + return 0xffffffffffffffffULL; + } + + __no_kmsan_checks +-u64 ioread64_hi_lo(const void __iomem *addr) ++u64 __ioread64_hi_lo(const void __iomem *addr) + { + IO_COND(addr, return pio_read64_hi_lo(port), return readq(addr)); + return 0xffffffffffffffffULL; + } + + __no_kmsan_checks +-u64 ioread64be_lo_hi(const void __iomem *addr) ++u64 __ioread64be_lo_hi(const void __iomem *addr) + { + IO_COND(addr, return pio_read64be_lo_hi(port), + return mmio_read64be(addr)); +@@ -175,19 +175,19 @@ u64 ioread64be_lo_hi(const void __iomem *addr) + } + + __no_kmsan_checks +-u64 ioread64be_hi_lo(const void __iomem *addr) ++u64 __ioread64be_hi_lo(const void __iomem *addr) + { + IO_COND(addr, return pio_read64be_hi_lo(port), + return mmio_read64be(addr)); + return 0xffffffffffffffffULL; + } + +-EXPORT_SYMBOL(ioread64_lo_hi); +-EXPORT_SYMBOL(ioread64_hi_lo); +-EXPORT_SYMBOL(ioread64be_lo_hi); +-EXPORT_SYMBOL(ioread64be_hi_lo); ++EXPORT_SYMBOL(__ioread64_lo_hi); ++EXPORT_SYMBOL(__ioread64_hi_lo); ++EXPORT_SYMBOL(__ioread64be_lo_hi); ++EXPORT_SYMBOL(__ioread64be_hi_lo); + +-#endif /* readq */ ++#endif /* CONFIG_64BIT */ + + #ifndef pio_write16be + #define pio_write16be(val,port) outw(swab16(val),port) +@@ -236,7 +236,7 @@ EXPORT_SYMBOL(iowrite16be); + EXPORT_SYMBOL(iowrite32); + EXPORT_SYMBOL(iowrite32be); + +-#ifdef writeq ++#ifdef CONFIG_64BIT + static void pio_write64_lo_hi(u64 val, unsigned long port) + { + outl(val, port); +@@ -261,7 +261,7 @@ static void pio_write64be_hi_lo(u64 val, unsigned long port) + pio_write32be(val, port + sizeof(u32)); + } + +-void iowrite64_lo_hi(u64 val, void __iomem *addr) ++void __iowrite64_lo_hi(u64 val, void __iomem *addr) + { + /* Make sure uninitialized memory isn't copied to devices. */ + kmsan_check_memory(&val, sizeof(val)); +@@ -269,7 +269,7 @@ void iowrite64_lo_hi(u64 val, void __iomem *addr) + writeq(val, addr)); + } + +-void iowrite64_hi_lo(u64 val, void __iomem *addr) ++void __iowrite64_hi_lo(u64 val, void __iomem *addr) + { + /* Make sure uninitialized memory isn't copied to devices. */ + kmsan_check_memory(&val, sizeof(val)); +@@ -277,7 +277,7 @@ void iowrite64_hi_lo(u64 val, void __iomem *addr) + writeq(val, addr)); + } + +-void iowrite64be_lo_hi(u64 val, void __iomem *addr) ++void __iowrite64be_lo_hi(u64 val, void __iomem *addr) + { + /* Make sure uninitialized memory isn't copied to devices. */ + kmsan_check_memory(&val, sizeof(val)); +@@ -285,7 +285,7 @@ void iowrite64be_lo_hi(u64 val, void __iomem *addr) + mmio_write64be(val, addr)); + } + +-void iowrite64be_hi_lo(u64 val, void __iomem *addr) ++void __iowrite64be_hi_lo(u64 val, void __iomem *addr) + { + /* Make sure uninitialized memory isn't copied to devices. */ + kmsan_check_memory(&val, sizeof(val)); +@@ -293,12 +293,12 @@ void iowrite64be_hi_lo(u64 val, void __iomem *addr) + mmio_write64be(val, addr)); + } + +-EXPORT_SYMBOL(iowrite64_lo_hi); +-EXPORT_SYMBOL(iowrite64_hi_lo); +-EXPORT_SYMBOL(iowrite64be_lo_hi); +-EXPORT_SYMBOL(iowrite64be_hi_lo); ++EXPORT_SYMBOL(__iowrite64_lo_hi); ++EXPORT_SYMBOL(__iowrite64_hi_lo); ++EXPORT_SYMBOL(__iowrite64be_lo_hi); ++EXPORT_SYMBOL(__iowrite64be_hi_lo); + +-#endif /* readq */ ++#endif /* CONFIG_64BIT */ + + /* + * These are the "repeat MMIO read/write" functions. +-- +2.49.0 + diff --git a/target/linux/uml/patches-6.6/101-mconsole-exec.patch b/target/linux/uml/patches-6.12/101-mconsole-exec.patch similarity index 99% rename from target/linux/uml/patches-6.6/101-mconsole-exec.patch rename to target/linux/uml/patches-6.12/101-mconsole-exec.patch index 0afd777836b..9ba4523a16a 100644 --- a/target/linux/uml/patches-6.6/101-mconsole-exec.patch +++ b/target/linux/uml/patches-6.12/101-mconsole-exec.patch @@ -123,7 +123,7 @@ }; --- a/arch/um/os-Linux/file.c +++ b/arch/um/os-Linux/file.c -@@ -560,6 +560,8 @@ int os_create_unix_socket(const char *fi +@@ -578,6 +578,8 @@ int os_create_unix_socket(const char *fi addr.sun_family = AF_UNIX; diff --git a/target/linux/uml/patches-6.6/102-pseudo-random-mac.patch b/target/linux/uml/patches-6.12/102-pseudo-random-mac.patch similarity index 100% rename from target/linux/uml/patches-6.6/102-pseudo-random-mac.patch rename to target/linux/uml/patches-6.12/102-pseudo-random-mac.patch