diff --git a/.github/workflows/kernel-arm-debug.config b/.github/workflows/kernel-arm-debug.config index 8f72fd45fde2d5..f9703641b6730c 100644 --- a/.github/workflows/kernel-arm-debug.config +++ b/.github/workflows/kernel-arm-debug.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 5.12.0-rc4 Kernel Configuration +# Linux/arm 5.13.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 11.1.0" CONFIG_GCC_VERSION=0 @@ -41,9 +41,11 @@ CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" # CONFIG_SWAP is not set # CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set CONFIG_CROSS_MEMORY_ATTACH=y # CONFIG_USELIB is not set +# CONFIG_AUDIT is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y # @@ -86,6 +88,16 @@ CONFIG_CONTEXT_TRACKING=y CONFIG_HIGH_RES_TIMERS=y # end of Timers subsystem +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y + +# +# BPF subsystem +# +# CONFIG_BPF_SYSCALL is not set +# CONFIG_BPF_JIT is not set +# end of BPF subsystem + CONFIG_PREEMPT_NONE=y # CONFIG_PREEMPT_VOLUNTARY is not set # CONFIG_PREEMPT is not set @@ -98,6 +110,7 @@ CONFIG_VIRT_CPU_ACCOUNTING=y CONFIG_VIRT_CPU_ACCOUNTING_GEN=y # CONFIG_IRQ_TIME_ACCOUNTING is not set # CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set # CONFIG_PSI is not set # end of CPU/Task time and stats accounting @@ -132,6 +145,7 @@ CONFIG_NAMESPACES=y CONFIG_UTS_NS=y # CONFIG_USER_NS is not set CONFIG_PID_NS=y +CONFIG_NET_NS=y # CONFIG_CHECKPOINT_RESTORE is not set # CONFIG_SCHED_AUTOGROUP is not set # CONFIG_SYSFS_DEPRECATED is not set @@ -176,7 +190,6 @@ CONFIG_MEMBARRIER=y CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_BASE_RELATIVE=y -# CONFIG_BPF_SYSCALL is not set # CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y CONFIG_RSEQ=y @@ -315,7 +328,7 @@ CONFIG_ARCH_BCM2835=y # CONFIG_ARCH_ROCKCHIP is not set # CONFIG_ARCH_S5PV210 is not set # CONFIG_ARCH_RENESAS is not set -# CONFIG_ARCH_SOCFPGA is not set +# CONFIG_ARCH_INTEL_SOCFPGA is not set # CONFIG_PLAT_SPEAR is not set # CONFIG_ARCH_STI is not set # CONFIG_ARCH_STM32 is not set @@ -573,6 +586,8 @@ CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_HAVE_ARCH_SECCOMP=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +# CONFIG_SECCOMP_CACHE_DEBUG is not set CONFIG_HAVE_STACKPROTECTOR=y CONFIG_STACKPROTECTOR=y CONFIG_STACKPROTECTOR_STRONG=y @@ -621,8 +636,12 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y # CONFIG_BLK_DEV_BSG is not set @@ -691,13 +710,13 @@ CONFIG_COMPACTION=y # CONFIG_PAGE_REPORTING is not set CONFIG_MIGRATION=y CONFIG_CONTIG_ALLOC=y -CONFIG_BOUNCE=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 # CONFIG_CLEANCACHE is not set CONFIG_CMA=y # CONFIG_CMA_DEBUG is not set # CONFIG_CMA_DEBUGFS is not set +# CONFIG_CMA_SYSFS is not set CONFIG_CMA_AREAS=7 # CONFIG_ZPOOL is not set # CONFIG_ZBUD is not set @@ -708,8 +727,64 @@ CONFIG_GENERIC_EARLY_IOREMAP=y # CONFIG_GUP_TEST is not set # end of Memory Management options -# CONFIG_NET is not set -CONFIG_HAVE_EBPF_JIT=y +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_UNIX is not set +# CONFIG_INET is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_QRTR is not set +# CONFIG_PCPU_DEV_REFCNT is not set +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_BT is not set +# CONFIG_WIRELESS is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +# CONFIG_FAILOVER is not set +# CONFIG_ETHTOOL_NETLINK is not set # # Device Drivers @@ -760,6 +835,7 @@ CONFIG_GENERIC_ARCH_TOPOLOGY=y # CONFIG_MHI_BUS is not set # end of Bus devices +# CONFIG_CONNECTOR is not set # CONFIG_GNSS is not set # CONFIG_MTD is not set CONFIG_DTC=y @@ -770,6 +846,7 @@ CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_KOBJ=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y +CONFIG_OF_NET=y CONFIG_OF_RESERVED_MEM=y # CONFIG_OF_OVERLAY is not set CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y @@ -781,8 +858,10 @@ CONFIG_BLK_DEV=y # # DRBD disabled because PROC_FS or INET not selected # +# CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set # # NVME Support @@ -797,7 +876,6 @@ CONFIG_BLK_DEV=y # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_SRAM is not set # CONFIG_XILINX_SDFEC is not set -# CONFIG_PVPANIC is not set # CONFIG_C2PORT is not set # @@ -809,12 +887,14 @@ CONFIG_BLK_DEV=y # # Texas Instruments shared transport line discipline # +# CONFIG_TI_ST is not set # end of Texas Instruments shared transport line discipline # # Altera FPGA firmware download module (requires I2C) # # CONFIG_ECHO is not set +# CONFIG_PVPANIC is not set # end of Misc devices # @@ -828,6 +908,38 @@ CONFIG_SCSI_MOD=y # CONFIG_ATA is not set # CONFIG_MD is not set # CONFIG_TARGET_CORE is not set +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_DUMMY is not set +CONFIG_DUMMY_RS=m +# CONFIG_EQUALIZER is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +# CONFIG_NLMON is not set +# CONFIG_ETHERNET is not set +# CONFIG_PHYLIB is not set +# CONFIG_MDIO_DEVICE is not set + +# +# PCS device drivers +# +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Host-side USB support is needed for USB Network Adapter support +# +# CONFIG_WLAN is not set +# CONFIG_WAN is not set +# CONFIG_WWAN is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set # CONFIG_NVM is not set # @@ -923,8 +1035,8 @@ CONFIG_CONSOLE_POLL=y # end of Serial drivers # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set # CONFIG_NULL_TTY is not set -# CONFIG_TRACE_SINK is not set # CONFIG_HVC_DCC is not set # CONFIG_SERIAL_DEV_BUS is not set # CONFIG_VIRTIO_CONSOLE is not set @@ -938,7 +1050,6 @@ CONFIG_HW_RANDOM_IPROC_RNG200=y # CONFIG_HW_RANDOM_CCTRNG is not set # CONFIG_HW_RANDOM_XIPHERA is not set CONFIG_DEVMEM=y -# CONFIG_DEVKMEM is not set # CONFIG_RAW_DRIVER is not set # CONFIG_TCG_TPM is not set # CONFIG_XILLYBUS is not set @@ -961,6 +1072,7 @@ CONFIG_DEVMEM=y # # PTP clock support # +# CONFIG_PTP_1588_CLOCK is not set # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. @@ -1050,6 +1162,7 @@ CONFIG_POWER_SUPPLY=y # CONFIG_CHARGER_MAX8903 is not set # CONFIG_CHARGER_GPIO is not set # CONFIG_CHARGER_LT3651 is not set +# CONFIG_BATTERY_GOLDFISH is not set # CONFIG_HWMON is not set # CONFIG_THERMAL is not set # CONFIG_WATCHDOG is not set @@ -1072,7 +1185,6 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_PM8XXX is not set # CONFIG_MFD_SM501 is not set -# CONFIG_ABX500_CORE is not set CONFIG_MFD_SYSCON=y # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_T7L66XB is not set @@ -1159,7 +1271,9 @@ CONFIG_CHARLCD_BL_FLASH=y # CONFIG_VIRT_DRIVERS is not set CONFIG_VIRTIO_MENU=y # CONFIG_VIRTIO_MMIO is not set +# CONFIG_VDPA is not set CONFIG_VHOST_MENU=y +# CONFIG_VHOST_NET is not set # CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set # @@ -1168,6 +1282,7 @@ CONFIG_VHOST_MENU=y # end of Microsoft Hyper-V guest support # CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set # CONFIG_STAGING is not set # CONFIG_GOLDFISH is not set # CONFIG_CHROME_PLATFORMS is not set @@ -1419,6 +1534,7 @@ CONFIG_SYSFS=y # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NLS is not set # CONFIG_UNICODE is not set CONFIG_IO_WQ=y @@ -1467,6 +1583,7 @@ CONFIG_BITREVERSE=y CONFIG_HAVE_ARCH_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y @@ -1524,8 +1641,11 @@ CONFIG_DMA_REMAP=y # CONFIG_DMA_API_DEBUG is not set # CONFIG_DMA_MAP_BENCHMARK is not set # CONFIG_CPUMASK_OFFSTACK is not set +CONFIG_CPU_RMAP=y +CONFIG_DQL=y CONFIG_GLOB=y # CONFIG_GLOB_SELFTEST is not set +CONFIG_NLATTR=y # CONFIG_IRQ_POLL is not set CONFIG_LIBFDT=y CONFIG_STACKDEPOT=y @@ -1564,6 +1684,7 @@ CONFIG_DEBUG_INFO=y # CONFIG_DEBUG_INFO_SPLIT is not set CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y # CONFIG_DEBUG_INFO_DWARF4 is not set +# CONFIG_DEBUG_INFO_DWARF5 is not set # CONFIG_DEBUG_INFO_BTF is not set # CONFIG_GDB_SCRIPTS is not set CONFIG_FRAME_WARN=1024 @@ -1655,8 +1776,7 @@ CONFIG_KASAN=y CONFIG_KASAN_GENERIC=y CONFIG_KASAN_OUTLINE=y # CONFIG_KASAN_INLINE is not set -# CONFIG_KASAN_STACK_ENABLE is not set -CONFIG_KASAN_STACK=0 +# CONFIG_KASAN_STACK is not set # CONFIG_KASAN_MODULE_TEST is not set # end of Memory Debugging @@ -1703,6 +1823,11 @@ CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y CONFIG_DEBUG_RWSEMS=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_LOCKDEP=y +CONFIG_LOCKDEP_BITS=15 +CONFIG_LOCKDEP_CHAINS_BITS=16 +CONFIG_LOCKDEP_STACK_TRACE_BITS=19 +CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14 +CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12 # CONFIG_DEBUG_LOCKDEP is not set # CONFIG_DEBUG_ATOMIC_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set @@ -1808,6 +1933,7 @@ CONFIG_ARCH_HAS_KCOV=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set # CONFIG_RUNTIME_TESTING_MENU is not set +CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage diff --git a/.github/workflows/kernel-arm-release.config b/.github/workflows/kernel-arm-release.config index afa7b02dd464e2..f526500d5cc72d 100644 --- a/.github/workflows/kernel-arm-release.config +++ b/.github/workflows/kernel-arm-release.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 5.12.0-rc4 Kernel Configuration +# Linux/arm 5.13.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 11.1.0" CONFIG_GCC_VERSION=0 @@ -15,6 +15,7 @@ CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y +CONFIG_CONSTRUCTORS=y CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y @@ -40,9 +41,11 @@ CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" # CONFIG_SWAP is not set # CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set CONFIG_CROSS_MEMORY_ATTACH=y # CONFIG_USELIB is not set +# CONFIG_AUDIT is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y # @@ -85,6 +88,16 @@ CONFIG_CONTEXT_TRACKING=y CONFIG_HIGH_RES_TIMERS=y # end of Timers subsystem +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y + +# +# BPF subsystem +# +# CONFIG_BPF_SYSCALL is not set +# CONFIG_BPF_JIT is not set +# end of BPF subsystem + CONFIG_PREEMPT_NONE=y # CONFIG_PREEMPT_VOLUNTARY is not set # CONFIG_PREEMPT is not set @@ -96,6 +109,7 @@ CONFIG_VIRT_CPU_ACCOUNTING=y CONFIG_VIRT_CPU_ACCOUNTING_GEN=y # CONFIG_IRQ_TIME_ACCOUNTING is not set # CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set # CONFIG_PSI is not set # end of CPU/Task time and stats accounting @@ -130,6 +144,7 @@ CONFIG_NAMESPACES=y CONFIG_UTS_NS=y # CONFIG_USER_NS is not set CONFIG_PID_NS=y +CONFIG_NET_NS=y # CONFIG_CHECKPOINT_RESTORE is not set # CONFIG_SCHED_AUTOGROUP is not set # CONFIG_SYSFS_DEPRECATED is not set @@ -174,7 +189,6 @@ CONFIG_MEMBARRIER=y CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_ALL is not set CONFIG_KALLSYMS_BASE_RELATIVE=y -# CONFIG_BPF_SYSCALL is not set # CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y CONFIG_RSEQ=y @@ -312,7 +326,7 @@ CONFIG_ARCH_BCM2835=y # CONFIG_ARCH_ROCKCHIP is not set # CONFIG_ARCH_S5PV210 is not set # CONFIG_ARCH_RENESAS is not set -# CONFIG_ARCH_SOCFPGA is not set +# CONFIG_ARCH_INTEL_SOCFPGA is not set # CONFIG_PLAT_SPEAR is not set # CONFIG_ARCH_STI is not set # CONFIG_ARCH_STM32 is not set @@ -567,6 +581,8 @@ CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_HAVE_ARCH_SECCOMP=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +# CONFIG_SECCOMP_CACHE_DEBUG is not set CONFIG_HAVE_STACKPROTECTOR=y CONFIG_STACKPROTECTOR=y CONFIG_STACKPROTECTOR_STRONG=y @@ -615,8 +631,12 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y # CONFIG_BLK_DEV_BSG is not set @@ -689,13 +709,13 @@ CONFIG_COMPACTION=y # CONFIG_PAGE_REPORTING is not set CONFIG_MIGRATION=y CONFIG_CONTIG_ALLOC=y -CONFIG_BOUNCE=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 # CONFIG_CLEANCACHE is not set CONFIG_CMA=y # CONFIG_CMA_DEBUG is not set # CONFIG_CMA_DEBUGFS is not set +# CONFIG_CMA_SYSFS is not set CONFIG_CMA_AREAS=7 # CONFIG_ZPOOL is not set # CONFIG_ZBUD is not set @@ -706,8 +726,64 @@ CONFIG_GENERIC_EARLY_IOREMAP=y # CONFIG_GUP_TEST is not set # end of Memory Management options -# CONFIG_NET is not set -CONFIG_HAVE_EBPF_JIT=y +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_UNIX is not set +# CONFIG_INET is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_QRTR is not set +# CONFIG_PCPU_DEV_REFCNT is not set +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_BT is not set +# CONFIG_WIRELESS is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +# CONFIG_FAILOVER is not set +# CONFIG_ETHTOOL_NETLINK is not set # # Device Drivers @@ -758,6 +834,7 @@ CONFIG_GENERIC_ARCH_TOPOLOGY=y # CONFIG_MHI_BUS is not set # end of Bus devices +# CONFIG_CONNECTOR is not set # CONFIG_GNSS is not set # CONFIG_MTD is not set CONFIG_DTC=y @@ -768,6 +845,7 @@ CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_KOBJ=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y +CONFIG_OF_NET=y CONFIG_OF_RESERVED_MEM=y # CONFIG_OF_OVERLAY is not set CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y @@ -779,8 +857,10 @@ CONFIG_BLK_DEV=y # # DRBD disabled because PROC_FS or INET not selected # +# CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_RAM is not set # CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set # # NVME Support @@ -795,7 +875,6 @@ CONFIG_BLK_DEV=y # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_SRAM is not set # CONFIG_XILINX_SDFEC is not set -# CONFIG_PVPANIC is not set # CONFIG_C2PORT is not set # @@ -807,12 +886,14 @@ CONFIG_BLK_DEV=y # # Texas Instruments shared transport line discipline # +# CONFIG_TI_ST is not set # end of Texas Instruments shared transport line discipline # # Altera FPGA firmware download module (requires I2C) # # CONFIG_ECHO is not set +# CONFIG_PVPANIC is not set # end of Misc devices # @@ -826,6 +907,38 @@ CONFIG_SCSI_MOD=y # CONFIG_ATA is not set # CONFIG_MD is not set # CONFIG_TARGET_CORE is not set +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_DUMMY is not set +CONFIG_DUMMY_RS=m +# CONFIG_EQUALIZER is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +# CONFIG_NLMON is not set +# CONFIG_ETHERNET is not set +# CONFIG_PHYLIB is not set +# CONFIG_MDIO_DEVICE is not set + +# +# PCS device drivers +# +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Host-side USB support is needed for USB Network Adapter support +# +# CONFIG_WLAN is not set +# CONFIG_WAN is not set +# CONFIG_WWAN is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set # CONFIG_NVM is not set # @@ -919,8 +1032,8 @@ CONFIG_SERIAL_CORE_CONSOLE=y # end of Serial drivers # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set # CONFIG_NULL_TTY is not set -# CONFIG_TRACE_SINK is not set # CONFIG_HVC_DCC is not set # CONFIG_SERIAL_DEV_BUS is not set # CONFIG_VIRTIO_CONSOLE is not set @@ -934,7 +1047,6 @@ CONFIG_HW_RANDOM_IPROC_RNG200=y # CONFIG_HW_RANDOM_CCTRNG is not set # CONFIG_HW_RANDOM_XIPHERA is not set CONFIG_DEVMEM=y -# CONFIG_DEVKMEM is not set # CONFIG_RAW_DRIVER is not set # CONFIG_TCG_TPM is not set # CONFIG_XILLYBUS is not set @@ -957,6 +1069,7 @@ CONFIG_DEVMEM=y # # PTP clock support # +# CONFIG_PTP_1588_CLOCK is not set # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. @@ -1046,6 +1159,7 @@ CONFIG_POWER_SUPPLY=y # CONFIG_CHARGER_MAX8903 is not set # CONFIG_CHARGER_GPIO is not set # CONFIG_CHARGER_LT3651 is not set +# CONFIG_BATTERY_GOLDFISH is not set # CONFIG_HWMON is not set # CONFIG_THERMAL is not set # CONFIG_WATCHDOG is not set @@ -1068,7 +1182,6 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_PM8XXX is not set # CONFIG_MFD_SM501 is not set -# CONFIG_ABX500_CORE is not set CONFIG_MFD_SYSCON=y # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_T7L66XB is not set @@ -1155,7 +1268,9 @@ CONFIG_CHARLCD_BL_FLASH=y # CONFIG_VIRT_DRIVERS is not set CONFIG_VIRTIO_MENU=y # CONFIG_VIRTIO_MMIO is not set +# CONFIG_VDPA is not set CONFIG_VHOST_MENU=y +# CONFIG_VHOST_NET is not set # CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set # @@ -1164,6 +1279,7 @@ CONFIG_VHOST_MENU=y # end of Microsoft Hyper-V guest support # CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set # CONFIG_STAGING is not set # CONFIG_GOLDFISH is not set # CONFIG_CHROME_PLATFORMS is not set @@ -1415,6 +1531,7 @@ CONFIG_SYSFS=y # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NLS is not set # CONFIG_UNICODE is not set CONFIG_IO_WQ=y @@ -1462,6 +1579,7 @@ CONFIG_BITREVERSE=y CONFIG_HAVE_ARCH_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y @@ -1518,8 +1636,11 @@ CONFIG_DMA_REMAP=y # CONFIG_DMA_CMA is not set # CONFIG_DMA_API_DEBUG is not set # CONFIG_DMA_MAP_BENCHMARK is not set +CONFIG_CPU_RMAP=y +CONFIG_DQL=y CONFIG_GLOB=y # CONFIG_GLOB_SELFTEST is not set +CONFIG_NLATTR=y # CONFIG_IRQ_POLL is not set CONFIG_LIBFDT=y CONFIG_SBITMAP=y @@ -1735,6 +1856,7 @@ CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_TEST_LIST_SORT is not set # CONFIG_TEST_MIN_HEAP is not set # CONFIG_TEST_SORT is not set +# CONFIG_TEST_DIV64 is not set # CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_RBTREE_TEST is not set # CONFIG_REED_SOLOMON_TEST is not set @@ -1757,6 +1879,8 @@ CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_TEST_BITOPS is not set # CONFIG_TEST_VMALLOC is not set # CONFIG_TEST_USER_COPY is not set +# CONFIG_TEST_BPF is not set +# CONFIG_TEST_BLACKHOLE_DEV is not set # CONFIG_FIND_BIT_BENCHMARK is not set # CONFIG_TEST_FIRMWARE is not set # CONFIG_TEST_SYSCTL is not set @@ -1766,6 +1890,7 @@ CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_TEST_STACKINIT is not set # CONFIG_TEST_MEMINIT is not set # CONFIG_TEST_FREE_PAGES is not set +CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage diff --git a/.github/workflows/kernel-arm64-debug.config b/.github/workflows/kernel-arm64-debug.config index f7b4a6d37e8562..3ebbf5283b5965 100644 --- a/.github/workflows/kernel-arm64-debug.config +++ b/.github/workflows/kernel-arm64-debug.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 5.12.0-rc4 Kernel Configuration +# Linux/arm64 5.13.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 11.0.0 (https://github.com/llvm/llvm-project.git 176249bd6732a8044d457092ed932768724a6f06)" CONFIG_GCC_VERSION=0 @@ -11,10 +11,9 @@ CONFIG_LD_VERSION=23000 CONFIG_LLD_VERSION=0 CONFIG_HAS_RUST=y CONFIG_RUSTC_VERSION=15200 -CONFIG_CC_CAN_LINK=y -CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y @@ -31,9 +30,11 @@ CONFIG_BUILD_SALT="" CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" # CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set # CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_USELIB is not set +# CONFIG_AUDIT is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y # @@ -55,7 +56,6 @@ CONFIG_SPARSE_IRQ=y # CONFIG_GENERIC_IRQ_DEBUGFS is not set # end of IRQ subsystem -CONFIG_GENERIC_IRQ_MULTI_HANDLER=y CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_ARCH_HAS_TICK_BROADCAST=y @@ -73,6 +73,17 @@ CONFIG_NO_HZ_IDLE=y CONFIG_HIGH_RES_TIMERS=y # end of Timers subsystem +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y + +# +# BPF subsystem +# +# CONFIG_BPF_SYSCALL is not set +# CONFIG_BPF_JIT is not set +# end of BPF subsystem + # CONFIG_PREEMPT_NONE is not set # CONFIG_PREEMPT_VOLUNTARY is not set CONFIG_PREEMPT=y @@ -159,8 +170,6 @@ CONFIG_BUG=y CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_BASE_RELATIVE=y -# CONFIG_BPF_SYSCALL is not set -CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y # CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y # CONFIG_KCMP is not set @@ -212,24 +221,21 @@ CONFIG_GENERIC_CSUM=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_ZONE_DMA=y # CONFIG_ZONE_DMA32 is not set -CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y -CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y CONFIG_SMP=y CONFIG_KERNEL_MODE_NEON=y CONFIG_FIX_EARLYCON_MEM=y CONFIG_PGTABLE_LEVELS=3 CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_ARCH_PROC_KCORE_TEXT=y -CONFIG_BROKEN_GAS_INST=y # # Platform selection # # CONFIG_ARCH_ACTIONS is not set -# CONFIG_ARCH_AGILEX is not set -# CONFIG_ARCH_N5X is not set # CONFIG_ARCH_SUNXI is not set # CONFIG_ARCH_ALPINE is not set +# CONFIG_ARCH_APPLE is not set # CONFIG_ARCH_BCM2835 is not set # CONFIG_ARCH_BCM4908 is not set # CONFIG_ARCH_BCM_IPROC is not set @@ -253,7 +259,7 @@ CONFIG_BROKEN_GAS_INST=y # CONFIG_ARCH_ROCKCHIP is not set # CONFIG_ARCH_S32 is not set # CONFIG_ARCH_SEATTLE is not set -# CONFIG_ARCH_STRATIX10 is not set +# CONFIG_ARCH_INTEL_SOCFPGA is not set # CONFIG_ARCH_SYNQUACER is not set # CONFIG_ARCH_TEGRA is not set # CONFIG_ARCH_SPRD is not set @@ -279,6 +285,7 @@ CONFIG_BROKEN_GAS_INST=y # CONFIG_ARM64_ERRATUM_819472 is not set # CONFIG_ARM64_ERRATUM_832075 is not set # CONFIG_ARM64_ERRATUM_843419 is not set +CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y # CONFIG_ARM64_ERRATUM_1024718 is not set CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT=y # CONFIG_ARM64_ERRATUM_1165522 is not set @@ -299,6 +306,7 @@ CONFIG_ARM64_ERRATUM_1319367=y # CONFIG_QCOM_FALKOR_ERRATUM_1009 is not set # CONFIG_QCOM_QDF2400_ERRATUM_0065 is not set # CONFIG_QCOM_FALKOR_ERRATUM_E1041 is not set +CONFIG_NVIDIA_CARMEL_CNP_ERRATUM=y # CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set # end of ARM errata workarounds via the alternatives framework @@ -312,7 +320,6 @@ CONFIG_ARM64_VA_BITS=48 CONFIG_ARM64_PA_BITS_48=y # CONFIG_ARM64_PA_BITS_52 is not set CONFIG_ARM64_PA_BITS=48 -# CONFIG_CPU_BIG_ENDIAN is not set CONFIG_CPU_LITTLE_ENDIAN=y CONFIG_SCHED_MC=y # CONFIG_SCHED_SMT is not set @@ -327,12 +334,8 @@ CONFIG_HZ_1000=y CONFIG_HZ=1000 CONFIG_SCHED_HRTICK=y CONFIG_ARCH_SPARSEMEM_ENABLE=y -CONFIG_ARCH_SPARSEMEM_DEFAULT=y -CONFIG_ARCH_SELECT_MEMORY_MODEL=y -CONFIG_ARCH_FLATMEM_ENABLE=y -CONFIG_SYS_SUPPORTS_HUGETLBFS=y -CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y -CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y +CONFIG_ARCH_HAS_FILTER_PGPROT=y +CONFIG_CC_HAVE_SHADOW_CALL_STACK=y # CONFIG_PARAVIRT is not set # CONFIG_PARAVIRT_TIME_ACCOUNTING is not set # CONFIG_KEXEC_FILE is not set @@ -350,8 +353,9 @@ CONFIG_RODATA_FULL_DEFAULT_ENABLED=y # # CONFIG_ARM64_HW_AFDBM is not set # CONFIG_ARM64_PAN is not set +CONFIG_AS_HAS_LDAPR=y +CONFIG_AS_HAS_LSE_ATOMICS=y # CONFIG_ARM64_USE_LSE_ATOMICS is not set -# CONFIG_ARM64_VHE is not set # end of ARMv8.1 architectural features # @@ -365,22 +369,37 @@ CONFIG_RODATA_FULL_DEFAULT_ENABLED=y # # ARMv8.3 architectural features # +CONFIG_ARM64_PTR_AUTH=y +CONFIG_CC_HAS_BRANCH_PROT_PAC_RET=y +CONFIG_CC_HAS_SIGN_RETURN_ADDRESS=y +CONFIG_AS_HAS_PAC=y +CONFIG_AS_HAS_CFI_NEGATE_RA_STATE=y # end of ARMv8.3 architectural features # # ARMv8.4 architectural features # # CONFIG_ARM64_AMU_EXTN is not set +CONFIG_AS_HAS_ARMV8_4=y +CONFIG_ARM64_TLB_RANGE=y # end of ARMv8.4 architectural features # # ARMv8.5 architectural features # +CONFIG_AS_HAS_ARMV8_5=y # CONFIG_ARM64_BTI is not set +CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI=y # CONFIG_ARM64_E0PD is not set # CONFIG_ARCH_RANDOM is not set +CONFIG_ARM64_AS_HAS_MTE=y # end of ARMv8.5 architectural features +# +# ARMv8.7 architectural features +# +# end of ARMv8.7 architectural features + # CONFIG_ARM64_SVE is not set CONFIG_ARM64_MODULE_PLTS=y # CONFIG_ARM64_PSEUDO_NMI is not set @@ -395,8 +414,6 @@ CONFIG_CMDLINE="" # CONFIG_EFI is not set # end of Boot options -CONFIG_ARCH_ENABLE_THP_MIGRATION=y - # # Power management options # @@ -483,9 +500,12 @@ CONFIG_HAVE_ARCH_STACKLEAK=y CONFIG_HAVE_STACKPROTECTOR=y CONFIG_STACKPROTECTOR=y CONFIG_STACKPROTECTOR_STRONG=y +CONFIG_ARCH_SUPPORTS_SHADOW_CALL_STACK=y +# CONFIG_SHADOW_CALL_STACK is not set CONFIG_ARCH_SUPPORTS_LTO_CLANG=y CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y CONFIG_LTO_NONE=y +CONFIG_ARCH_SUPPORTS_CFI_CLANG=y CONFIG_HAVE_CONTEXT_TRACKING=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y @@ -503,6 +523,8 @@ CONFIG_CLONE_BACKWARDS=y # CONFIG_COMPAT_32BIT_TIME is not set CONFIG_HAVE_ARCH_VMAP_STACK=y CONFIG_VMAP_STACK=y +CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y +# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_STRICT_KERNEL_RWX=y CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y @@ -532,8 +554,12 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" # CONFIG_TRIM_UNUSED_KSYMS is not set CONFIG_MODULES_TREE_LOOKUP=y # CONFIG_BLOCK is not set @@ -565,20 +591,21 @@ CONFIG_BINFMT_SCRIPT=y # # Memory Management options # -CONFIG_SELECT_MEMORY_MODEL=y -# CONFIG_FLATMEM_MANUAL is not set -CONFIG_SPARSEMEM_MANUAL=y CONFIG_SPARSEMEM=y CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSEMEM_VMEMMAP=y CONFIG_HAVE_FAST_GUP=y CONFIG_ARCH_KEEP_MEMBLOCK=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y # CONFIG_MEMORY_HOTPLUG is not set +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y CONFIG_COMPACTION=y # CONFIG_PAGE_REPORTING is not set CONFIG_MIGRATION=y +CONFIG_ARCH_ENABLE_THP_MIGRATION=y CONFIG_PHYS_ADDR_T_64BIT=y CONFIG_KSM=y CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -594,14 +621,67 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y # CONFIG_ZSMALLOC is not set CONFIG_GENERIC_EARLY_IOREMAP=y # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_ARCH_HAS_PTE_DEVMAP=y # CONFIG_PERCPU_STATS is not set # CONFIG_GUP_TEST is not set CONFIG_ARCH_HAS_PTE_SPECIAL=y # end of Memory Management options -# CONFIG_NET is not set -CONFIG_HAVE_EBPF_JIT=y +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_UNIX is not set +# CONFIG_INET is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_QRTR is not set +# CONFIG_PCPU_DEV_REFCNT is not set +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_NET_RX_BUSY_POLL=y + +# +# Network testing +# +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_BT is not set +# CONFIG_WIRELESS is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +# CONFIG_FAILOVER is not set +# CONFIG_ETHTOOL_NETLINK is not set # # Device Drivers @@ -643,6 +723,7 @@ CONFIG_GENERIC_ARCH_TOPOLOGY=y # CONFIG_MHI_BUS is not set # end of Bus devices +# CONFIG_CONNECTOR is not set # CONFIG_GNSS is not set # CONFIG_MTD is not set CONFIG_DTC=y @@ -652,6 +733,7 @@ CONFIG_OF_FLATTREE=y CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y +CONFIG_OF_NET=y CONFIG_OF_RESERVED_MEM=y # CONFIG_OF_OVERLAY is not set # CONFIG_PARPORT is not set @@ -668,7 +750,6 @@ CONFIG_OF_RESERVED_MEM=y # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_SRAM is not set # CONFIG_XILINX_SDFEC is not set -# CONFIG_PVPANIC is not set # CONFIG_C2PORT is not set # @@ -686,6 +767,7 @@ CONFIG_OF_RESERVED_MEM=y # Altera FPGA firmware download module (requires I2C) # # CONFIG_ECHO is not set +# CONFIG_PVPANIC is not set # end of Misc devices # @@ -695,6 +777,38 @@ CONFIG_SCSI_MOD=y # end of SCSI device support CONFIG_HAVE_PATA_PLATFORM=y +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_DUMMY is not set +CONFIG_DUMMY_RS=m +# CONFIG_EQUALIZER is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +# CONFIG_NLMON is not set +# CONFIG_ETHERNET is not set +# CONFIG_PHYLIB is not set +# CONFIG_MDIO_DEVICE is not set + +# +# PCS device drivers +# +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Host-side USB support is needed for USB Network Adapter support +# +# CONFIG_WLAN is not set +# CONFIG_WAN is not set +# CONFIG_WWAN is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set # # Input device support @@ -748,8 +862,8 @@ CONFIG_SERIAL_CORE_CONSOLE=y # end of Serial drivers # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set # CONFIG_NULL_TTY is not set -# CONFIG_TRACE_SINK is not set # CONFIG_HVC_DCC is not set # CONFIG_SERIAL_DEV_BUS is not set # CONFIG_TTY_PRINTK is not set @@ -801,6 +915,7 @@ CONFIG_POWER_SUPPLY=y # CONFIG_BATTERY_DS2781 is not set # CONFIG_BATTERY_BQ27XXX is not set # CONFIG_CHARGER_MAX8903 is not set +# CONFIG_BATTERY_GOLDFISH is not set # CONFIG_HWMON is not set # CONFIG_THERMAL is not set # CONFIG_WATCHDOG is not set @@ -820,7 +935,6 @@ CONFIG_BCMA_POSSIBLE=y # CONFIG_MFD_KEMPLD is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_SM501 is not set -# CONFIG_ABX500_CORE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_TQMX86 is not set @@ -879,6 +993,7 @@ CONFIG_EDAC_SUPPORT=y # CONFIG_VFIO is not set # CONFIG_VIRT_DRIVERS is not set # CONFIG_VIRTIO_MENU is not set +# CONFIG_VDPA is not set # CONFIG_VHOST_MENU is not set # @@ -886,6 +1001,7 @@ CONFIG_EDAC_SUPPORT=y # # end of Microsoft Hyper-V guest support +# CONFIG_COMEDI is not set # CONFIG_STAGING is not set # CONFIG_GOLDFISH is not set # CONFIG_CHROME_PLATFORMS is not set @@ -1072,12 +1188,14 @@ CONFIG_DCACHE_WORD_ACCESS=y # CONFIG_PROC_FS is not set # CONFIG_PROC_CHILDREN is not set # CONFIG_SYSFS is not set +CONFIG_ARCH_SUPPORTS_HUGETLBFS=y # CONFIG_HUGETLBFS is not set CONFIG_ARCH_HAS_GIGANTIC_PAGE=y # CONFIG_CONFIGFS_FS is not set # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NLS is not set # CONFIG_UNICODE is not set # end of File systems @@ -1124,6 +1242,8 @@ CONFIG_BITREVERSE=y CONFIG_HAVE_ARCH_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y +CONFIG_GENERIC_FIND_FIRST_BIT=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y @@ -1173,6 +1293,7 @@ CONFIG_DMA_DIRECT_REMAP=y # CONFIG_CPUMASK_OFFSTACK is not set CONFIG_GLOB=y # CONFIG_GLOB_SELFTEST is not set +CONFIG_NLATTR=y # CONFIG_IRQ_POLL is not set CONFIG_LIBFDT=y CONFIG_HAVE_GENERIC_VDSO=y @@ -1214,6 +1335,7 @@ CONFIG_DEBUG_INFO=y # CONFIG_DEBUG_INFO_SPLIT is not set # CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set CONFIG_DEBUG_INFO_DWARF4=y +# CONFIG_DEBUG_INFO_DWARF5 is not set # CONFIG_DEBUG_INFO_BTF is not set # CONFIG_GDB_SCRIPTS is not set CONFIG_FRAME_WARN=2048 @@ -1225,6 +1347,7 @@ CONFIG_SECTION_MISMATCH_WARN_ONLY=y # CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B is not set CONFIG_ARCH_WANT_FRAME_POINTERS=y CONFIG_FRAME_POINTER=y +# CONFIG_VMLINUX_MAP is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set # end of Compile-time checks and compiler options @@ -1306,6 +1429,7 @@ CONFIG_DEBUG_MEMORY_INIT=y CONFIG_DEBUG_PER_CPU_MAPS=y CONFIG_HAVE_ARCH_KASAN=y CONFIG_HAVE_ARCH_KASAN_SW_TAGS=y +CONFIG_HAVE_ARCH_KASAN_VMALLOC=y CONFIG_CC_HAS_KASAN_GENERIC=y CONFIG_CC_HAS_KASAN_SW_TAGS=y CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y @@ -1354,6 +1478,11 @@ CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y CONFIG_DEBUG_RWSEMS=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_LOCKDEP=y +CONFIG_LOCKDEP_BITS=15 +CONFIG_LOCKDEP_CHAINS_BITS=16 +CONFIG_LOCKDEP_STACK_TRACE_BITS=19 +CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14 +CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12 # CONFIG_DEBUG_LOCKDEP is not set # CONFIG_DEBUG_ATOMIC_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set @@ -1369,7 +1498,6 @@ CONFIG_STACKTRACE=y # CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set CONFIG_DEBUG_KOBJECT=y CONFIG_DEBUG_KOBJECT_RELEASE=y -CONFIG_HAVE_DEBUG_BUGVERBOSE=y # # Debug kernel data structures @@ -1413,14 +1541,12 @@ CONFIG_TRACING=y CONFIG_TRACING_SUPPORT=y # CONFIG_FTRACE is not set CONFIG_SAMPLES=y -# CONFIG_SAMPLE_AUXDISPLAY is not set # CONFIG_SAMPLE_TRACE_EVENTS is not set # CONFIG_SAMPLE_TRACE_PRINTK is not set # CONFIG_SAMPLE_TRACE_ARRAY is not set # CONFIG_SAMPLE_KOBJECT is not set # CONFIG_SAMPLE_KPROBES is not set # CONFIG_SAMPLE_KFIFO is not set -# CONFIG_SAMPLE_WATCHDOG is not set CONFIG_SAMPLES_RUST=y CONFIG_SAMPLE_RUST_MINIMAL=m CONFIG_SAMPLE_RUST_PRINT=m @@ -1452,6 +1578,7 @@ CONFIG_ARCH_HAS_KCOV=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set # CONFIG_RUNTIME_TESTING_MENU is not set +CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage diff --git a/.github/workflows/kernel-arm64-release.config b/.github/workflows/kernel-arm64-release.config index 49b53b9722e689..ebff8f21730a46 100644 --- a/.github/workflows/kernel-arm64-release.config +++ b/.github/workflows/kernel-arm64-release.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 5.12.0-rc4 Kernel Configuration +# Linux/arm64 5.13.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 11.0.0 (https://github.com/llvm/llvm-project.git 176249bd6732a8044d457092ed932768724a6f06)" CONFIG_GCC_VERSION=0 @@ -11,10 +11,9 @@ CONFIG_LD_VERSION=23000 CONFIG_LLD_VERSION=0 CONFIG_HAS_RUST=y CONFIG_RUSTC_VERSION=15200 -CONFIG_CC_CAN_LINK=y -CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y @@ -31,9 +30,11 @@ CONFIG_BUILD_SALT="" CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" # CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set # CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_USELIB is not set +# CONFIG_AUDIT is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y # @@ -54,7 +55,6 @@ CONFIG_IRQ_FORCED_THREADING=y CONFIG_SPARSE_IRQ=y # end of IRQ subsystem -CONFIG_GENERIC_IRQ_MULTI_HANDLER=y CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_ARCH_HAS_TICK_BROADCAST=y @@ -72,6 +72,17 @@ CONFIG_NO_HZ_IDLE=y CONFIG_HIGH_RES_TIMERS=y # end of Timers subsystem +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y + +# +# BPF subsystem +# +# CONFIG_BPF_SYSCALL is not set +# CONFIG_BPF_JIT is not set +# end of BPF subsystem + # CONFIG_PREEMPT_NONE is not set # CONFIG_PREEMPT_VOLUNTARY is not set CONFIG_PREEMPT=y @@ -156,8 +167,6 @@ CONFIG_BUG=y # CONFIG_ADVISE_SYSCALLS is not set # CONFIG_MEMBARRIER is not set # CONFIG_KALLSYMS is not set -# CONFIG_BPF_SYSCALL is not set -CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y # CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y # CONFIG_KCMP is not set @@ -208,24 +217,21 @@ CONFIG_GENERIC_CSUM=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_ZONE_DMA=y # CONFIG_ZONE_DMA32 is not set -CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y -CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y CONFIG_SMP=y CONFIG_KERNEL_MODE_NEON=y CONFIG_FIX_EARLYCON_MEM=y CONFIG_PGTABLE_LEVELS=3 CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_ARCH_PROC_KCORE_TEXT=y -CONFIG_BROKEN_GAS_INST=y # # Platform selection # # CONFIG_ARCH_ACTIONS is not set -# CONFIG_ARCH_AGILEX is not set -# CONFIG_ARCH_N5X is not set # CONFIG_ARCH_SUNXI is not set # CONFIG_ARCH_ALPINE is not set +# CONFIG_ARCH_APPLE is not set # CONFIG_ARCH_BCM2835 is not set # CONFIG_ARCH_BCM4908 is not set # CONFIG_ARCH_BCM_IPROC is not set @@ -249,7 +255,7 @@ CONFIG_BROKEN_GAS_INST=y # CONFIG_ARCH_ROCKCHIP is not set # CONFIG_ARCH_S32 is not set # CONFIG_ARCH_SEATTLE is not set -# CONFIG_ARCH_STRATIX10 is not set +# CONFIG_ARCH_INTEL_SOCFPGA is not set # CONFIG_ARCH_SYNQUACER is not set # CONFIG_ARCH_TEGRA is not set # CONFIG_ARCH_SPRD is not set @@ -275,6 +281,7 @@ CONFIG_BROKEN_GAS_INST=y # CONFIG_ARM64_ERRATUM_819472 is not set # CONFIG_ARM64_ERRATUM_832075 is not set # CONFIG_ARM64_ERRATUM_843419 is not set +CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y # CONFIG_ARM64_ERRATUM_1024718 is not set CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT=y # CONFIG_ARM64_ERRATUM_1165522 is not set @@ -295,6 +302,7 @@ CONFIG_ARM64_ERRATUM_1319367=y # CONFIG_QCOM_FALKOR_ERRATUM_1009 is not set # CONFIG_QCOM_QDF2400_ERRATUM_0065 is not set # CONFIG_QCOM_FALKOR_ERRATUM_E1041 is not set +CONFIG_NVIDIA_CARMEL_CNP_ERRATUM=y # CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set # end of ARM errata workarounds via the alternatives framework @@ -308,7 +316,6 @@ CONFIG_ARM64_VA_BITS=48 CONFIG_ARM64_PA_BITS_48=y # CONFIG_ARM64_PA_BITS_52 is not set CONFIG_ARM64_PA_BITS=48 -# CONFIG_CPU_BIG_ENDIAN is not set CONFIG_CPU_LITTLE_ENDIAN=y CONFIG_SCHED_MC=y # CONFIG_SCHED_SMT is not set @@ -323,12 +330,8 @@ CONFIG_HZ_1000=y CONFIG_HZ=1000 CONFIG_SCHED_HRTICK=y CONFIG_ARCH_SPARSEMEM_ENABLE=y -CONFIG_ARCH_SPARSEMEM_DEFAULT=y -CONFIG_ARCH_SELECT_MEMORY_MODEL=y -CONFIG_ARCH_FLATMEM_ENABLE=y -CONFIG_SYS_SUPPORTS_HUGETLBFS=y -CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y -CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y +CONFIG_ARCH_HAS_FILTER_PGPROT=y +CONFIG_CC_HAVE_SHADOW_CALL_STACK=y # CONFIG_PARAVIRT is not set # CONFIG_PARAVIRT_TIME_ACCOUNTING is not set # CONFIG_KEXEC_FILE is not set @@ -346,8 +349,9 @@ CONFIG_RODATA_FULL_DEFAULT_ENABLED=y # # CONFIG_ARM64_HW_AFDBM is not set # CONFIG_ARM64_PAN is not set +CONFIG_AS_HAS_LDAPR=y +CONFIG_AS_HAS_LSE_ATOMICS=y # CONFIG_ARM64_USE_LSE_ATOMICS is not set -# CONFIG_ARM64_VHE is not set # end of ARMv8.1 architectural features # @@ -361,22 +365,37 @@ CONFIG_RODATA_FULL_DEFAULT_ENABLED=y # # ARMv8.3 architectural features # +CONFIG_ARM64_PTR_AUTH=y +CONFIG_CC_HAS_BRANCH_PROT_PAC_RET=y +CONFIG_CC_HAS_SIGN_RETURN_ADDRESS=y +CONFIG_AS_HAS_PAC=y +CONFIG_AS_HAS_CFI_NEGATE_RA_STATE=y # end of ARMv8.3 architectural features # # ARMv8.4 architectural features # # CONFIG_ARM64_AMU_EXTN is not set +CONFIG_AS_HAS_ARMV8_4=y +CONFIG_ARM64_TLB_RANGE=y # end of ARMv8.4 architectural features # # ARMv8.5 architectural features # +CONFIG_AS_HAS_ARMV8_5=y # CONFIG_ARM64_BTI is not set +CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI=y # CONFIG_ARM64_E0PD is not set # CONFIG_ARCH_RANDOM is not set +CONFIG_ARM64_AS_HAS_MTE=y # end of ARMv8.5 architectural features +# +# ARMv8.7 architectural features +# +# end of ARMv8.7 architectural features + # CONFIG_ARM64_SVE is not set CONFIG_ARM64_MODULE_PLTS=y # CONFIG_ARM64_PSEUDO_NMI is not set @@ -391,8 +410,6 @@ CONFIG_CMDLINE="" # CONFIG_EFI is not set # end of Boot options -CONFIG_ARCH_ENABLE_THP_MIGRATION=y - # # Power management options # @@ -478,9 +495,12 @@ CONFIG_HAVE_ARCH_STACKLEAK=y CONFIG_HAVE_STACKPROTECTOR=y CONFIG_STACKPROTECTOR=y CONFIG_STACKPROTECTOR_STRONG=y +CONFIG_ARCH_SUPPORTS_SHADOW_CALL_STACK=y +# CONFIG_SHADOW_CALL_STACK is not set CONFIG_ARCH_SUPPORTS_LTO_CLANG=y CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y CONFIG_LTO_NONE=y +CONFIG_ARCH_SUPPORTS_CFI_CLANG=y CONFIG_HAVE_CONTEXT_TRACKING=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y @@ -498,6 +518,8 @@ CONFIG_CLONE_BACKWARDS=y # CONFIG_COMPAT_32BIT_TIME is not set CONFIG_HAVE_ARCH_VMAP_STACK=y CONFIG_VMAP_STACK=y +CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y +# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_STRICT_KERNEL_RWX=y CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y @@ -525,8 +547,12 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" # CONFIG_TRIM_UNUSED_KSYMS is not set # CONFIG_BLOCK is not set CONFIG_UNINLINE_SPIN_UNLOCK=y @@ -557,20 +583,21 @@ CONFIG_BINFMT_SCRIPT=y # # Memory Management options # -CONFIG_SELECT_MEMORY_MODEL=y -# CONFIG_FLATMEM_MANUAL is not set -CONFIG_SPARSEMEM_MANUAL=y CONFIG_SPARSEMEM=y CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSEMEM_VMEMMAP=y CONFIG_HAVE_FAST_GUP=y CONFIG_ARCH_KEEP_MEMBLOCK=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y # CONFIG_MEMORY_HOTPLUG is not set +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y CONFIG_COMPACTION=y # CONFIG_PAGE_REPORTING is not set CONFIG_MIGRATION=y +CONFIG_ARCH_ENABLE_THP_MIGRATION=y CONFIG_PHYS_ADDR_T_64BIT=y CONFIG_KSM=y CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -586,6 +613,7 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y # CONFIG_ZSMALLOC is not set CONFIG_GENERIC_EARLY_IOREMAP=y # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_ARCH_HAS_PTE_DEVMAP=y # CONFIG_PERCPU_STATS is not set @@ -595,8 +623,60 @@ CONFIG_ARCH_HAS_PTE_DEVMAP=y CONFIG_ARCH_HAS_PTE_SPECIAL=y # end of Memory Management options -# CONFIG_NET is not set -CONFIG_HAVE_EBPF_JIT=y +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_UNIX is not set +# CONFIG_INET is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_QRTR is not set +# CONFIG_PCPU_DEV_REFCNT is not set +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_NET_RX_BUSY_POLL=y + +# +# Network testing +# +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_BT is not set +# CONFIG_WIRELESS is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +# CONFIG_FAILOVER is not set +# CONFIG_ETHTOOL_NETLINK is not set # # Device Drivers @@ -638,6 +718,7 @@ CONFIG_GENERIC_ARCH_TOPOLOGY=y # CONFIG_MHI_BUS is not set # end of Bus devices +# CONFIG_CONNECTOR is not set # CONFIG_GNSS is not set # CONFIG_MTD is not set CONFIG_DTC=y @@ -647,6 +728,7 @@ CONFIG_OF_FLATTREE=y CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y +CONFIG_OF_NET=y CONFIG_OF_RESERVED_MEM=y # CONFIG_OF_OVERLAY is not set # CONFIG_PARPORT is not set @@ -663,7 +745,6 @@ CONFIG_OF_RESERVED_MEM=y # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_SRAM is not set # CONFIG_XILINX_SDFEC is not set -# CONFIG_PVPANIC is not set # CONFIG_C2PORT is not set # @@ -681,6 +762,7 @@ CONFIG_OF_RESERVED_MEM=y # Altera FPGA firmware download module (requires I2C) # # CONFIG_ECHO is not set +# CONFIG_PVPANIC is not set # end of Misc devices # @@ -690,6 +772,38 @@ CONFIG_SCSI_MOD=y # end of SCSI device support CONFIG_HAVE_PATA_PLATFORM=y +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_DUMMY is not set +CONFIG_DUMMY_RS=m +# CONFIG_EQUALIZER is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +# CONFIG_NLMON is not set +# CONFIG_ETHERNET is not set +# CONFIG_PHYLIB is not set +# CONFIG_MDIO_DEVICE is not set + +# +# PCS device drivers +# +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Host-side USB support is needed for USB Network Adapter support +# +# CONFIG_WLAN is not set +# CONFIG_WAN is not set +# CONFIG_WWAN is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set # # Input device support @@ -743,8 +857,8 @@ CONFIG_SERIAL_CORE_CONSOLE=y # end of Serial drivers # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set # CONFIG_NULL_TTY is not set -# CONFIG_TRACE_SINK is not set # CONFIG_HVC_DCC is not set # CONFIG_SERIAL_DEV_BUS is not set # CONFIG_TTY_PRINTK is not set @@ -796,6 +910,7 @@ CONFIG_POWER_SUPPLY=y # CONFIG_BATTERY_DS2781 is not set # CONFIG_BATTERY_BQ27XXX is not set # CONFIG_CHARGER_MAX8903 is not set +# CONFIG_BATTERY_GOLDFISH is not set # CONFIG_HWMON is not set # CONFIG_THERMAL is not set # CONFIG_WATCHDOG is not set @@ -815,7 +930,6 @@ CONFIG_BCMA_POSSIBLE=y # CONFIG_MFD_KEMPLD is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_SM501 is not set -# CONFIG_ABX500_CORE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_TQMX86 is not set @@ -874,6 +988,7 @@ CONFIG_EDAC_SUPPORT=y # CONFIG_VFIO is not set # CONFIG_VIRT_DRIVERS is not set # CONFIG_VIRTIO_MENU is not set +# CONFIG_VDPA is not set # CONFIG_VHOST_MENU is not set # @@ -881,6 +996,7 @@ CONFIG_EDAC_SUPPORT=y # # end of Microsoft Hyper-V guest support +# CONFIG_COMEDI is not set # CONFIG_STAGING is not set # CONFIG_GOLDFISH is not set # CONFIG_CHROME_PLATFORMS is not set @@ -1067,12 +1183,14 @@ CONFIG_DCACHE_WORD_ACCESS=y # CONFIG_PROC_FS is not set # CONFIG_PROC_CHILDREN is not set # CONFIG_SYSFS is not set +CONFIG_ARCH_SUPPORTS_HUGETLBFS=y # CONFIG_HUGETLBFS is not set CONFIG_ARCH_HAS_GIGANTIC_PAGE=y # CONFIG_CONFIGFS_FS is not set # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NLS is not set # CONFIG_UNICODE is not set # end of File systems @@ -1118,6 +1236,8 @@ CONFIG_BITREVERSE=y CONFIG_HAVE_ARCH_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y +CONFIG_GENERIC_FIND_FIRST_BIT=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y @@ -1163,6 +1283,7 @@ CONFIG_DMA_COHERENT_POOL=y CONFIG_DMA_REMAP=y CONFIG_DMA_DIRECT_REMAP=y # CONFIG_DMA_API_DEBUG is not set +CONFIG_NLATTR=y # CONFIG_IRQ_POLL is not set CONFIG_LIBFDT=y CONFIG_HAVE_GENERIC_VDSO=y @@ -1204,6 +1325,7 @@ CONFIG_SECTION_MISMATCH_WARN_ONLY=y # CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B is not set CONFIG_ARCH_WANT_FRAME_POINTERS=y CONFIG_FRAME_POINTER=y +# CONFIG_VMLINUX_MAP is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set # end of Compile-time checks and compiler options @@ -1247,6 +1369,7 @@ CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y # CONFIG_DEBUG_PER_CPU_MAPS is not set CONFIG_HAVE_ARCH_KASAN=y CONFIG_HAVE_ARCH_KASAN_SW_TAGS=y +CONFIG_HAVE_ARCH_KASAN_VMALLOC=y CONFIG_CC_HAS_KASAN_GENERIC=y CONFIG_CC_HAS_KASAN_SW_TAGS=y CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y @@ -1299,7 +1422,6 @@ CONFIG_LOCK_DEBUGGING_SUPPORT=y # CONFIG_STACKTRACE is not set # CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set # CONFIG_DEBUG_KOBJECT is not set -CONFIG_HAVE_DEBUG_BUGVERBOSE=y # # Debug kernel data structures @@ -1335,10 +1457,8 @@ CONFIG_HAVE_C_RECORDMCOUNT=y CONFIG_TRACING_SUPPORT=y # CONFIG_FTRACE is not set CONFIG_SAMPLES=y -# CONFIG_SAMPLE_AUXDISPLAY is not set # CONFIG_SAMPLE_KOBJECT is not set # CONFIG_SAMPLE_KFIFO is not set -# CONFIG_SAMPLE_WATCHDOG is not set CONFIG_SAMPLES_RUST=y CONFIG_SAMPLE_RUST_MINIMAL=m CONFIG_SAMPLE_RUST_PRINT=m @@ -1369,6 +1489,7 @@ CONFIG_ARCH_HAS_KCOV=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set # CONFIG_RUNTIME_TESTING_MENU is not set +CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage diff --git a/.github/workflows/kernel-ppc64le-debug.config b/.github/workflows/kernel-ppc64le-debug.config index 5cee6896c4946b..910f3d8e9ec537 100644 --- a/.github/workflows/kernel-ppc64le-debug.config +++ b/.github/workflows/kernel-ppc64le-debug.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/powerpc 5.12.0-rc4 Kernel Configuration +# Linux/powerpc 5.13.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 11.0.0 (https://github.com/llvm/llvm-project.git 176249bd6732a8044d457092ed932768724a6f06)" CONFIG_GCC_VERSION=0 @@ -11,10 +11,9 @@ CONFIG_LD_VERSION=23000 CONFIG_LLD_VERSION=0 CONFIG_HAS_RUST=y CONFIG_RUSTC_VERSION=15200 -CONFIG_CC_CAN_LINK=y -CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y @@ -35,9 +34,11 @@ CONFIG_KERNEL_GZIP=y CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" # CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set # CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_USELIB is not set +# CONFIG_AUDIT is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y # @@ -74,6 +75,16 @@ CONFIG_NO_HZ_IDLE=y # CONFIG_HIGH_RES_TIMERS is not set # end of Timers subsystem +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y + +# +# BPF subsystem +# +# CONFIG_BPF_SYSCALL is not set +# CONFIG_BPF_JIT is not set +# end of BPF subsystem + # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set @@ -162,7 +173,6 @@ CONFIG_BASE_FULL=y CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_BASE_RELATIVE=y -# CONFIG_BPF_SYSCALL is not set # CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_CALLBACKS=y CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y @@ -210,7 +220,6 @@ CONFIG_PPC_FPU_REGS=y CONFIG_PPC_FPU=y CONFIG_ALTIVEC=y CONFIG_VSX=y -CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y CONFIG_PPC_RADIX_MMU=y CONFIG_PPC_RADIX_MMU_DEFAULT=y CONFIG_PPC_HAVE_KUEP=y @@ -338,8 +347,6 @@ CONFIG_HZ=1000 CONFIG_HOTPLUG_CPU=y CONFIG_PPC_QUEUED_SPINLOCKS=y CONFIG_ARCH_CPU_PROBE_RELEASE=y -CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y -CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y # CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE is not set # CONFIG_KEXEC is not set # CONFIG_RELOCATABLE is not set @@ -351,7 +358,6 @@ CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_FLATMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_DEFAULT=y -CONFIG_SYS_SUPPORTS_HUGETLBFS=y CONFIG_ILLEGAL_POINTER_VALUE=0x5deadbeef0000000 # CONFIG_PPC_4K_PAGES is not set CONFIG_PPC_64K_PAGES=y @@ -416,6 +422,7 @@ CONFIG_HAVE_HARDLOCKUP_DETECTOR_ARCH=y CONFIG_HAVE_PERF_REGS=y CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y CONFIG_MMU_GATHER_TABLE_FREE=y CONFIG_MMU_GATHER_RCU_TABLE_FREE=y CONFIG_MMU_GATHER_PAGE_SIZE=y @@ -433,6 +440,7 @@ CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y CONFIG_HAVE_ARCH_HUGE_VMAP=y +CONFIG_HAVE_ARCH_HUGE_VMALLOC=y CONFIG_HAVE_ARCH_SOFT_DIRTY=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_RELA=y @@ -446,6 +454,9 @@ CONFIG_HAVE_ARCH_NVRAM_OPS=y CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND=y # CONFIG_COMPAT_32BIT_TIME is not set +CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +# CONFIG_STRICT_KERNEL_RWX is not set CONFIG_ARCH_HAS_PHYS_TO_DMA=y # CONFIG_LOCK_EVENT_COUNTS is not set CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y @@ -467,8 +478,12 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" # CONFIG_TRIM_UNUSED_KSYMS is not set CONFIG_MODULES_TREE_LOOKUP=y # CONFIG_BLOCK is not set @@ -507,7 +522,9 @@ CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSEMEM_VMEMMAP=y CONFIG_HAVE_FAST_GUP=y CONFIG_ARCH_KEEP_MEMBLOCK=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y # CONFIG_MEMORY_HOTPLUG is not set +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_COMPACTION=y # CONFIG_PAGE_REPORTING is not set @@ -533,8 +550,64 @@ CONFIG_ARCH_HAS_PTE_DEVMAP=y CONFIG_ARCH_HAS_PTE_SPECIAL=y # end of Memory Management options -# CONFIG_NET is not set -CONFIG_HAVE_EBPF_JIT=y +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_UNIX is not set +# CONFIG_INET is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_QRTR is not set +# CONFIG_PCPU_DEV_REFCNT is not set +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_BT is not set +# CONFIG_WIRELESS is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +# CONFIG_FAILOVER is not set +# CONFIG_ETHTOOL_NETLINK is not set # # Device Drivers @@ -632,7 +705,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y # CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set # CONFIG_PM_QOS_KUNIT_TEST is not set # CONFIG_TEST_ASYNC_DRIVER_PROBE is not set -# CONFIG_KUNIT_DRIVER_PE_TEST is not set +# CONFIG_DRIVER_PE_KUNIT_TEST is not set CONFIG_GENERIC_CPU_AUTOPROBE=y CONFIG_GENERIC_CPU_VULNERABILITIES=y # end of Generic Driver Options @@ -643,6 +716,7 @@ CONFIG_GENERIC_CPU_VULNERABILITIES=y # CONFIG_MHI_BUS is not set # end of Bus devices +# CONFIG_CONNECTOR is not set # CONFIG_GNSS is not set # CONFIG_MTD is not set CONFIG_DTC=y @@ -654,6 +728,7 @@ CONFIG_OF_KOBJ=y CONFIG_OF_DYNAMIC=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y +CONFIG_OF_NET=y CONFIG_OF_RESERVED_MEM=y # CONFIG_OF_OVERLAY is not set CONFIG_OF_DMA_DEFAULT_COHERENT=y @@ -675,9 +750,9 @@ CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_HP_ILO is not set # CONFIG_SRAM is not set +# CONFIG_DW_XDATA_PCIE is not set # CONFIG_PCI_ENDPOINT_TEST is not set # CONFIG_XILINX_SDFEC is not set -# CONFIG_PVPANIC is not set # CONFIG_C2PORT is not set # @@ -702,6 +777,7 @@ CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_MISC_ALCOR_PCI is not set # CONFIG_MISC_RTSX_PCI is not set # CONFIG_HABANA_AI is not set +# CONFIG_PVPANIC is not set # end of Misc devices CONFIG_HAVE_IDE=y @@ -722,6 +798,40 @@ CONFIG_SCSI_MOD=y # end of IEEE 1394 (FireWire) support # CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_DUMMY is not set +CONFIG_DUMMY_RS=m +# CONFIG_EQUALIZER is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +# CONFIG_NLMON is not set +# CONFIG_ARCNET is not set +# CONFIG_ETHERNET is not set +# CONFIG_FDDI is not set +# CONFIG_PHYLIB is not set +# CONFIG_MDIO_DEVICE is not set + +# +# PCS device drivers +# +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Host-side USB support is needed for USB Network Adapter support +# +# CONFIG_WLAN is not set +# CONFIG_WAN is not set +# CONFIG_WWAN is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set # # Input device support @@ -814,9 +924,9 @@ CONFIG_CONSOLE_POLL=y # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_PPC_EPAPR_HV_BYTECHAN is not set +# CONFIG_N_GSM is not set # CONFIG_NOZOMI is not set # CONFIG_NULL_TTY is not set -# CONFIG_TRACE_SINK is not set CONFIG_HVC_DRIVER=y CONFIG_HVC_IRQ=y CONFIG_HVC_CONSOLE=y @@ -832,7 +942,6 @@ CONFIG_HVC_CONSOLE=y # CONFIG_HW_RANDOM is not set # CONFIG_APPLICOM is not set # CONFIG_DEVMEM is not set -# CONFIG_DEVKMEM is not set # CONFIG_NVRAM is not set CONFIG_DEVPORT=y # CONFIG_HANGCHECK_TIMER is not set @@ -893,7 +1002,6 @@ CONFIG_BCMA_POSSIBLE=y # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_RDC321X is not set # CONFIG_MFD_SM501 is not set -# CONFIG_ABX500_CORE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_TQMX86 is not set @@ -975,6 +1083,7 @@ CONFIG_RTC_LIB=y # CONFIG_VFIO is not set # CONFIG_VIRT_DRIVERS is not set # CONFIG_VIRTIO_MENU is not set +# CONFIG_VDPA is not set # CONFIG_VHOST_MENU is not set # @@ -983,6 +1092,7 @@ CONFIG_RTC_LIB=y # end of Microsoft Hyper-V guest support # CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set # CONFIG_STAGING is not set # CONFIG_GOLDFISH is not set # CONFIG_COMMON_CLK is not set @@ -1078,7 +1188,6 @@ CONFIG_IRQCHIP=y # # CONFIG_GENERIC_PHY is not set # CONFIG_BCM_KONA_USB2_PHY is not set -# CONFIG_PHY_CADENCE_TORRENT is not set # CONFIG_PHY_CADENCE_DPHY is not set # CONFIG_PHY_CADENCE_SALVO is not set # CONFIG_PHY_FSL_IMX8MQ_USB is not set @@ -1158,12 +1267,14 @@ CONFIG_PROC_PAGE_MONITOR=y # CONFIG_PROC_CHILDREN is not set CONFIG_KERNFS=y CONFIG_SYSFS=y +CONFIG_ARCH_SUPPORTS_HUGETLBFS=y # CONFIG_HUGETLBFS is not set CONFIG_ARCH_HAS_GIGANTIC_PAGE=y # CONFIG_CONFIGFS_FS is not set # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NLS is not set # CONFIG_UNICODE is not set # end of File systems @@ -1211,6 +1322,7 @@ CONFIG_BINARY_PRINTF=y CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set CONFIG_GENERIC_PCI_IOMAP=y @@ -1250,16 +1362,21 @@ CONFIG_SWIOTLB=y # CONFIG_DMA_MAP_BENCHMARK is not set CONFIG_IOMMU_HELPER=y # CONFIG_CPUMASK_OFFSTACK is not set +CONFIG_CPU_RMAP=y +CONFIG_DQL=y CONFIG_GLOB=y # CONFIG_GLOB_SELFTEST is not set +CONFIG_NLATTR=y # CONFIG_IRQ_POLL is not set CONFIG_LIBFDT=y CONFIG_HAVE_GENERIC_VDSO=y CONFIG_GENERIC_GETTIMEOFDAY=y +CONFIG_GENERIC_VDSO_TIME_NS=y CONFIG_ARCH_HAS_PMEM_API=y CONFIG_ARCH_HAS_MEMREMAP_COMPAT_ALIGN=y CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y CONFIG_ARCH_HAS_COPY_MC=y +CONFIG_ARCH_STACKWALK=y # CONFIG_STRING_SELFTEST is not set # end of Library routines @@ -1299,6 +1416,7 @@ CONFIG_READABLE_ASM=y # CONFIG_DEBUG_SECTION_MISMATCH is not set # CONFIG_SECTION_MISMATCH_WARN_ONLY is not set CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B=y +# CONFIG_VMLINUX_MAP is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set # end of Compile-time checks and compiler options @@ -1354,10 +1472,12 @@ CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE=16000 CONFIG_DEBUG_KMEMLEAK_AUTO_SCAN=y CONFIG_DEBUG_STACK_USAGE=y CONFIG_SCHED_STACK_END_CHECK=y +CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y CONFIG_DEBUG_VM=y CONFIG_DEBUG_VM_VMACACHE=y CONFIG_DEBUG_VM_RB=y CONFIG_DEBUG_VM_PGFLAGS=y +CONFIG_DEBUG_VM_PGTABLE=y CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y CONFIG_DEBUG_VIRTUAL=y CONFIG_DEBUG_MEMORY_INIT=y @@ -1365,7 +1485,6 @@ CONFIG_DEBUG_PER_CPU_MAPS=y CONFIG_HAVE_DEBUG_STACKOVERFLOW=y # CONFIG_DEBUG_STACKOVERFLOW is not set CONFIG_CC_HAS_KASAN_GENERIC=y -CONFIG_CC_HAS_KASAN_SW_TAGS=y CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y # end of Memory Debugging @@ -1413,6 +1532,11 @@ CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y CONFIG_DEBUG_RWSEMS=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_LOCKDEP=y +CONFIG_LOCKDEP_BITS=15 +CONFIG_LOCKDEP_CHAINS_BITS=16 +CONFIG_LOCKDEP_STACK_TRACE_BITS=19 +CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14 +CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12 CONFIG_DEBUG_LOCKDEP=y CONFIG_DEBUG_ATOMIC_SLEEP=y # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set @@ -1472,7 +1596,6 @@ CONFIG_TRACING=y CONFIG_TRACING_SUPPORT=y # CONFIG_FTRACE is not set CONFIG_SAMPLES=y -# CONFIG_SAMPLE_AUXDISPLAY is not set # CONFIG_SAMPLE_TRACE_EVENTS is not set # CONFIG_SAMPLE_TRACE_PRINTK is not set # CONFIG_SAMPLE_TRACE_ARRAY is not set @@ -1480,7 +1603,6 @@ CONFIG_SAMPLES=y # CONFIG_SAMPLE_KPROBES is not set # CONFIG_SAMPLE_HW_BREAKPOINT is not set # CONFIG_SAMPLE_KFIFO is not set -# CONFIG_SAMPLE_WATCHDOG is not set CONFIG_SAMPLES_RUST=y CONFIG_SAMPLE_RUST_MINIMAL=m CONFIG_SAMPLE_RUST_PRINT=m @@ -1535,6 +1657,7 @@ CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_TEST_LIST_SORT is not set # CONFIG_TEST_MIN_HEAP is not set # CONFIG_TEST_SORT is not set +# CONFIG_TEST_DIV64 is not set # CONFIG_KPROBES_SANITY_TEST is not set # CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_RBTREE_TEST is not set @@ -1558,6 +1681,8 @@ CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_TEST_BITOPS is not set # CONFIG_TEST_VMALLOC is not set # CONFIG_TEST_USER_COPY is not set +# CONFIG_TEST_BPF is not set +# CONFIG_TEST_BLACKHOLE_DEV is not set # CONFIG_FIND_BIT_BENCHMARK is not set # CONFIG_TEST_SYSCTL is not set # CONFIG_BITFIELD_KUNIT is not set @@ -1574,6 +1699,7 @@ CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_TEST_STACKINIT is not set # CONFIG_TEST_MEMINIT is not set # CONFIG_TEST_FREE_PAGES is not set +CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage diff --git a/.github/workflows/kernel-ppc64le-release.config b/.github/workflows/kernel-ppc64le-release.config index b7c076cb1ac793..0253500b981050 100644 --- a/.github/workflows/kernel-ppc64le-release.config +++ b/.github/workflows/kernel-ppc64le-release.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/powerpc 5.12.0-rc4 Kernel Configuration +# Linux/powerpc 5.13.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 11.0.0 (https://github.com/llvm/llvm-project.git 176249bd6732a8044d457092ed932768724a6f06)" CONFIG_GCC_VERSION=0 @@ -11,10 +11,9 @@ CONFIG_LD_VERSION=23000 CONFIG_LLD_VERSION=0 CONFIG_HAS_RUST=y CONFIG_RUSTC_VERSION=15200 -CONFIG_CC_CAN_LINK=y -CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y @@ -36,9 +35,11 @@ CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SWAP=y # CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set # CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_USELIB is not set +# CONFIG_AUDIT is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y # @@ -74,6 +75,16 @@ CONFIG_NO_HZ_IDLE=y # CONFIG_HIGH_RES_TIMERS is not set # end of Timers subsystem +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y + +# +# BPF subsystem +# +# CONFIG_BPF_SYSCALL is not set +# CONFIG_BPF_JIT is not set +# end of BPF subsystem + # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set @@ -86,6 +97,7 @@ CONFIG_TICK_CPU_ACCOUNTING=y # CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set # CONFIG_IRQ_TIME_ACCOUNTING is not set # CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set # CONFIG_PSI is not set # end of CPU/Task time and stats accounting @@ -118,8 +130,10 @@ CONFIG_CC_HAS_INT128=y # CONFIG_CGROUPS is not set CONFIG_NAMESPACES=y # CONFIG_UTS_NS is not set +CONFIG_TIME_NS=y # CONFIG_USER_NS is not set # CONFIG_PID_NS is not set +CONFIG_NET_NS=y # CONFIG_CHECKPOINT_RESTORE is not set # CONFIG_SCHED_AUTOGROUP is not set # CONFIG_SYSFS_DEPRECATED is not set @@ -166,7 +180,6 @@ CONFIG_ADVISE_SYSCALLS=y CONFIG_MEMBARRIER=y CONFIG_KALLSYMS=y CONFIG_KALLSYMS_BASE_RELATIVE=y -# CONFIG_BPF_SYSCALL is not set # CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_CALLBACKS=y CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y @@ -210,7 +223,6 @@ CONFIG_PPC_FPU_REGS=y CONFIG_PPC_FPU=y CONFIG_ALTIVEC=y CONFIG_VSX=y -CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y CONFIG_PPC_RADIX_MMU=y CONFIG_PPC_RADIX_MMU_DEFAULT=y CONFIG_PPC_HAVE_KUEP=y @@ -333,8 +345,6 @@ CONFIG_HZ=1000 CONFIG_HOTPLUG_CPU=y CONFIG_PPC_QUEUED_SPINLOCKS=y CONFIG_ARCH_CPU_PROBE_RELEASE=y -CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y -CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y # CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE is not set # CONFIG_KEXEC is not set # CONFIG_RELOCATABLE is not set @@ -346,7 +356,6 @@ CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_FLATMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_DEFAULT=y -CONFIG_SYS_SUPPORTS_HUGETLBFS=y CONFIG_ILLEGAL_POINTER_VALUE=0x5deadbeef0000000 # CONFIG_PPC_4K_PAGES is not set CONFIG_PPC_64K_PAGES=y @@ -410,6 +419,7 @@ CONFIG_HAVE_HARDLOCKUP_DETECTOR_ARCH=y CONFIG_HAVE_PERF_REGS=y CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y CONFIG_MMU_GATHER_TABLE_FREE=y CONFIG_MMU_GATHER_RCU_TABLE_FREE=y CONFIG_MMU_GATHER_PAGE_SIZE=y @@ -427,6 +437,7 @@ CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y CONFIG_HAVE_ARCH_HUGE_VMAP=y +CONFIG_HAVE_ARCH_HUGE_VMALLOC=y CONFIG_HAVE_ARCH_SOFT_DIRTY=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_RELA=y @@ -440,6 +451,9 @@ CONFIG_HAVE_ARCH_NVRAM_OPS=y CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND=y # CONFIG_COMPAT_32BIT_TIME is not set +CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +# CONFIG_STRICT_KERNEL_RWX is not set CONFIG_ARCH_HAS_PHYS_TO_DMA=y CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y @@ -460,8 +474,12 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y # CONFIG_BLK_DEV_BSG is not set @@ -544,7 +562,9 @@ CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSEMEM_VMEMMAP=y CONFIG_HAVE_FAST_GUP=y CONFIG_ARCH_KEEP_MEMBLOCK=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y # CONFIG_MEMORY_HOTPLUG is not set +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_COMPACTION=y # CONFIG_PAGE_REPORTING is not set @@ -575,8 +595,64 @@ CONFIG_ARCH_HAS_PTE_DEVMAP=y CONFIG_ARCH_HAS_PTE_SPECIAL=y # end of Memory Management options -# CONFIG_NET is not set -CONFIG_HAVE_EBPF_JIT=y +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_UNIX is not set +# CONFIG_INET is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_QRTR is not set +# CONFIG_PCPU_DEV_REFCNT is not set +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_BT is not set +# CONFIG_WIRELESS is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +# CONFIG_FAILOVER is not set +# CONFIG_ETHTOOL_NETLINK is not set # # Device Drivers @@ -677,6 +753,7 @@ CONFIG_GENERIC_CPU_VULNERABILITIES=y # CONFIG_MHI_BUS is not set # end of Bus devices +# CONFIG_CONNECTOR is not set # CONFIG_GNSS is not set # CONFIG_MTD is not set CONFIG_DTC=y @@ -688,6 +765,7 @@ CONFIG_OF_KOBJ=y CONFIG_OF_DYNAMIC=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y +CONFIG_OF_NET=y CONFIG_OF_RESERVED_MEM=y # CONFIG_OF_OVERLAY is not set CONFIG_OF_DMA_DEFAULT_COHERENT=y @@ -712,9 +790,9 @@ CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_HP_ILO is not set # CONFIG_SRAM is not set +# CONFIG_DW_XDATA_PCIE is not set # CONFIG_PCI_ENDPOINT_TEST is not set # CONFIG_XILINX_SDFEC is not set -# CONFIG_PVPANIC is not set # CONFIG_C2PORT is not set # @@ -739,6 +817,7 @@ CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_MISC_ALCOR_PCI is not set # CONFIG_MISC_RTSX_PCI is not set # CONFIG_HABANA_AI is not set +# CONFIG_PVPANIC is not set # end of Misc devices CONFIG_HAVE_IDE=y @@ -765,6 +844,40 @@ CONFIG_SCSI_MOD=y # end of IEEE 1394 (FireWire) support # CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_DUMMY is not set +CONFIG_DUMMY_RS=m +# CONFIG_EQUALIZER is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +# CONFIG_NLMON is not set +# CONFIG_ARCNET is not set +# CONFIG_ETHERNET is not set +# CONFIG_FDDI is not set +# CONFIG_PHYLIB is not set +# CONFIG_MDIO_DEVICE is not set + +# +# PCS device drivers +# +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Host-side USB support is needed for USB Network Adapter support +# +# CONFIG_WLAN is not set +# CONFIG_WAN is not set +# CONFIG_WWAN is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set # CONFIG_NVM is not set # @@ -856,9 +969,9 @@ CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_PPC_EPAPR_HV_BYTECHAN is not set +# CONFIG_N_GSM is not set # CONFIG_NOZOMI is not set # CONFIG_NULL_TTY is not set -# CONFIG_TRACE_SINK is not set CONFIG_HVC_DRIVER=y CONFIG_HVC_IRQ=y CONFIG_HVC_CONSOLE=y @@ -873,7 +986,6 @@ CONFIG_HVC_CONSOLE=y # CONFIG_HW_RANDOM is not set # CONFIG_APPLICOM is not set # CONFIG_DEVMEM is not set -# CONFIG_DEVKMEM is not set # CONFIG_NVRAM is not set # CONFIG_RAW_DRIVER is not set CONFIG_DEVPORT=y @@ -900,6 +1012,7 @@ CONFIG_DEVPORT=y # # PTP clock support # +# CONFIG_PTP_1588_CLOCK is not set # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. @@ -935,7 +1048,6 @@ CONFIG_BCMA_POSSIBLE=y # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_RDC321X is not set # CONFIG_MFD_SM501 is not set -# CONFIG_ABX500_CORE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_TQMX86 is not set @@ -1017,6 +1129,7 @@ CONFIG_RTC_LIB=y # CONFIG_VFIO is not set # CONFIG_VIRT_DRIVERS is not set # CONFIG_VIRTIO_MENU is not set +# CONFIG_VDPA is not set # CONFIG_VHOST_MENU is not set # @@ -1025,6 +1138,7 @@ CONFIG_RTC_LIB=y # end of Microsoft Hyper-V guest support # CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set # CONFIG_STAGING is not set # CONFIG_GOLDFISH is not set # CONFIG_COMMON_CLK is not set @@ -1122,7 +1236,6 @@ CONFIG_IRQCHIP=y # # CONFIG_GENERIC_PHY is not set # CONFIG_BCM_KONA_USB2_PHY is not set -# CONFIG_PHY_CADENCE_TORRENT is not set # CONFIG_PHY_CADENCE_DPHY is not set # CONFIG_PHY_CADENCE_SALVO is not set # CONFIG_PHY_FSL_IMX8MQ_USB is not set @@ -1232,12 +1345,14 @@ CONFIG_PROC_PAGE_MONITOR=y CONFIG_KERNFS=y CONFIG_SYSFS=y # CONFIG_TMPFS is not set +CONFIG_ARCH_SUPPORTS_HUGETLBFS=y # CONFIG_HUGETLBFS is not set CONFIG_ARCH_HAS_GIGANTIC_PAGE=y # CONFIG_CONFIGFS_FS is not set # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NLS is not set # CONFIG_UNICODE is not set CONFIG_IO_WQ=y @@ -1285,6 +1400,7 @@ CONFIG_INIT_ON_FREE_DEFAULT_ON=y CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set CONFIG_GENERIC_PCI_IOMAP=y @@ -1322,14 +1438,19 @@ CONFIG_DMA_DECLARE_COHERENT=y CONFIG_SWIOTLB=y # CONFIG_DMA_API_DEBUG is not set CONFIG_IOMMU_HELPER=y +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_NLATTR=y # CONFIG_IRQ_POLL is not set CONFIG_LIBFDT=y CONFIG_HAVE_GENERIC_VDSO=y CONFIG_GENERIC_GETTIMEOFDAY=y +CONFIG_GENERIC_VDSO_TIME_NS=y CONFIG_ARCH_HAS_PMEM_API=y CONFIG_ARCH_HAS_MEMREMAP_COMPAT_ALIGN=y CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y CONFIG_ARCH_HAS_COPY_MC=y +CONFIG_ARCH_STACKWALK=y CONFIG_SBITMAP=y # CONFIG_STRING_SELFTEST is not set # end of Library routines @@ -1383,11 +1504,12 @@ CONFIG_HAVE_KCSAN_COMPILER=y # CONFIG_SLUB_DEBUG_ON is not set # CONFIG_SLUB_STATS is not set CONFIG_HAVE_DEBUG_KMEMLEAK=y +CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y +# CONFIG_DEBUG_VM_PGTABLE is not set CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_HAVE_DEBUG_STACKOVERFLOW=y CONFIG_CC_HAS_KASAN_GENERIC=y -CONFIG_CC_HAS_KASAN_SW_TAGS=y CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y # end of Memory Debugging @@ -1438,11 +1560,9 @@ CONFIG_HAVE_C_RECORDMCOUNT=y CONFIG_TRACING_SUPPORT=y # CONFIG_FTRACE is not set CONFIG_SAMPLES=y -# CONFIG_SAMPLE_AUXDISPLAY is not set # CONFIG_SAMPLE_KOBJECT is not set # CONFIG_SAMPLE_HW_BREAKPOINT is not set # CONFIG_SAMPLE_KFIFO is not set -# CONFIG_SAMPLE_WATCHDOG is not set CONFIG_SAMPLES_RUST=y CONFIG_SAMPLE_RUST_MINIMAL=m CONFIG_SAMPLE_RUST_PRINT=m @@ -1477,6 +1597,7 @@ CONFIG_ARCH_HAS_KCOV=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set # CONFIG_RUNTIME_TESTING_MENU is not set +CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage diff --git a/.github/workflows/kernel-riscv64-debug.config b/.github/workflows/kernel-riscv64-debug.config index b4e3c4fcd424f9..b535622919ea97 100644 --- a/.github/workflows/kernel-riscv64-debug.config +++ b/.github/workflows/kernel-riscv64-debug.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/riscv 5.12.0-rc4 Kernel Configuration +# Linux/riscv 5.13.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 11.0.0 (https://github.com/llvm/llvm-project.git 176249bd6732a8044d457092ed932768724a6f06)" CONFIG_GCC_VERSION=0 @@ -13,6 +13,7 @@ CONFIG_HAS_RUST=y CONFIG_RUSTC_VERSION=15200 CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_IRQ_WORK=y CONFIG_THREAD_INFO_IN_TASK=y @@ -29,9 +30,11 @@ CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" # CONFIG_SWAP is not set # CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set # CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_USELIB is not set +# CONFIG_AUDIT is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y # @@ -49,6 +52,8 @@ CONFIG_GENERIC_IRQ_MULTI_HANDLER=y CONFIG_ARCH_CLOCKSOURCE_INIT=y CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_ARCH_HAS_TICK_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y # # Timers subsystem @@ -62,6 +67,16 @@ CONFIG_NO_HZ_IDLE=y # CONFIG_HIGH_RES_TIMERS is not set # end of Timers subsystem +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y + +# +# BPF subsystem +# +# CONFIG_BPF_SYSCALL is not set +# CONFIG_BPF_JIT is not set +# end of BPF subsystem + # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set @@ -73,6 +88,7 @@ CONFIG_TICK_CPU_ACCOUNTING=y # CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set # CONFIG_IRQ_TIME_ACCOUNTING is not set # CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set # CONFIG_PSI is not set # end of CPU/Task time and stats accounting @@ -107,6 +123,7 @@ CONFIG_NAMESPACES=y # CONFIG_UTS_NS is not set # CONFIG_USER_NS is not set # CONFIG_PID_NS is not set +CONFIG_NET_NS=y # CONFIG_CHECKPOINT_RESTORE is not set # CONFIG_SCHED_AUTOGROUP is not set # CONFIG_SYSFS_DEPRECATED is not set @@ -149,7 +166,6 @@ CONFIG_MEMBARRIER=y CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_BASE_RELATIVE=y -# CONFIG_BPF_SYSCALL is not set # CONFIG_USERFAULTFD is not set # CONFIG_EMBEDDED is not set CONFIG_HAVE_PERF_EVENTS=y @@ -190,7 +206,6 @@ CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_WANT_GENERAL_HUGETLB=y CONFIG_ARCH_SUPPORTS_UPROBES=y -CONFIG_SYS_SUPPORTS_HUGETLBFS=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_GENERIC_BUG=y @@ -205,10 +220,18 @@ CONFIG_LOCKDEP_SUPPORT=y # # SoC selection # +# CONFIG_SOC_MICROCHIP_POLARFIRE is not set # CONFIG_SOC_SIFIVE is not set CONFIG_SOC_VIRT=y # end of SoC selection +# +# CPU errata selection +# +CONFIG_RISCV_ERRATA_ALTERNATIVE=y +# CONFIG_ERRATA_SIFIVE is not set +# end of CPU errata selection + # # Platform type # @@ -243,6 +266,8 @@ CONFIG_FPU=y CONFIG_HZ_1000=y CONFIG_HZ=1000 # CONFIG_RISCV_SBI_V01 is not set +# CONFIG_KEXEC is not set +# CONFIG_CRASH_DUMP is not set # end of Kernel features # @@ -250,6 +275,8 @@ CONFIG_HZ=1000 # CONFIG_CMDLINE="" # CONFIG_EFI is not set +# CONFIG_PHYS_RAM_BASE_FIXED is not set +# CONFIG_XIP_KERNEL is not set # end of Boot options # @@ -283,6 +310,7 @@ CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_CONTIGUOUS=y CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_ARCH_HAS_FORTIFY_SOURCE=y CONFIG_ARCH_HAS_SET_MEMORY=y CONFIG_ARCH_HAS_SET_DIRECT_MAP=y CONFIG_HAVE_ASM_MODVERSIONS=y @@ -314,6 +342,8 @@ CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_STRICT_MODULE_RWX=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y # @@ -334,8 +364,12 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y # CONFIG_BLK_DEV_BSG is not set @@ -430,8 +464,64 @@ CONFIG_GENERIC_EARLY_IOREMAP=y CONFIG_ARCH_HAS_PTE_SPECIAL=y # end of Memory Management options -# CONFIG_NET is not set -CONFIG_HAVE_EBPF_JIT=y +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_UNIX is not set +# CONFIG_INET is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_QRTR is not set +# CONFIG_PCPU_DEV_REFCNT is not set +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_BT is not set +# CONFIG_WIRELESS is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +# CONFIG_FAILOVER is not set +# CONFIG_ETHTOOL_NETLINK is not set # # Device Drivers @@ -474,6 +564,7 @@ CONFIG_GENERIC_ARCH_TOPOLOGY=y # CONFIG_MHI_BUS is not set # end of Bus devices +# CONFIG_CONNECTOR is not set # CONFIG_GNSS is not set # CONFIG_MTD is not set CONFIG_DTC=y @@ -484,6 +575,7 @@ CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_KOBJ=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y +CONFIG_OF_NET=y CONFIG_OF_RESERVED_MEM=y # CONFIG_OF_OVERLAY is not set # CONFIG_PARPORT is not set @@ -502,7 +594,6 @@ CONFIG_OF_RESERVED_MEM=y # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_SRAM is not set # CONFIG_XILINX_SDFEC is not set -# CONFIG_PVPANIC is not set # CONFIG_C2PORT is not set # @@ -520,6 +611,7 @@ CONFIG_OF_RESERVED_MEM=y # Altera FPGA firmware download module (requires I2C) # # CONFIG_ECHO is not set +# CONFIG_PVPANIC is not set # end of Misc devices # @@ -533,6 +625,38 @@ CONFIG_SCSI_MOD=y # CONFIG_ATA is not set # CONFIG_MD is not set # CONFIG_TARGET_CORE is not set +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_DUMMY is not set +CONFIG_DUMMY_RS=m +# CONFIG_EQUALIZER is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +# CONFIG_NLMON is not set +# CONFIG_ETHERNET is not set +# CONFIG_PHYLIB is not set +# CONFIG_MDIO_DEVICE is not set + +# +# PCS device drivers +# +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Host-side USB support is needed for USB Network Adapter support +# +# CONFIG_WLAN is not set +# CONFIG_WAN is not set +# CONFIG_WWAN is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set # CONFIG_NVM is not set # @@ -621,14 +745,13 @@ CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_GOLDFISH_TTY is not set +# CONFIG_N_GSM is not set # CONFIG_NULL_TTY is not set -# CONFIG_TRACE_SINK is not set # CONFIG_SERIAL_DEV_BUS is not set # CONFIG_VIRTIO_CONSOLE is not set # CONFIG_IPMI_HANDLER is not set # CONFIG_HW_RANDOM is not set # CONFIG_DEVMEM is not set -# CONFIG_DEVKMEM is not set # CONFIG_RAW_DRIVER is not set # CONFIG_TCG_TPM is not set # CONFIG_XILLYBUS is not set @@ -651,6 +774,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y # # PTP clock support # +# CONFIG_PTP_1588_CLOCK is not set # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. @@ -686,7 +810,6 @@ CONFIG_BCMA_POSSIBLE=y # CONFIG_MFD_KEMPLD is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_SM501 is not set -# CONFIG_ABX500_CORE is not set CONFIG_MFD_SYSCON=y # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_TQMX86 is not set @@ -762,6 +885,7 @@ CONFIG_EDAC_SUPPORT=y # CONFIG_VFIO is not set # CONFIG_VIRT_DRIVERS is not set # CONFIG_VIRTIO_MENU is not set +# CONFIG_VDPA is not set # CONFIG_VHOST_MENU is not set # @@ -770,6 +894,7 @@ CONFIG_EDAC_SUPPORT=y # end of Microsoft Hyper-V guest support # CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set # CONFIG_STAGING is not set CONFIG_GOLDFISH=y # CONFIG_GOLDFISH_PIPE is not set @@ -984,12 +1109,14 @@ CONFIG_PROC_PAGE_MONITOR=y CONFIG_KERNFS=y CONFIG_SYSFS=y # CONFIG_TMPFS is not set +CONFIG_ARCH_SUPPORTS_HUGETLBFS=y # CONFIG_HUGETLBFS is not set CONFIG_ARCH_HAS_GIGANTIC_PAGE=y # CONFIG_CONFIGFS_FS is not set # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NLS is not set # CONFIG_UNICODE is not set CONFIG_IO_WQ=y @@ -1005,6 +1132,7 @@ CONFIG_IO_WQ=y CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y CONFIG_HARDENED_USERCOPY=y CONFIG_HARDENED_USERCOPY_FALLBACK=y +# CONFIG_FORTIFY_SOURCE is not set # CONFIG_STATIC_USERMODEHELPER is not set CONFIG_DEFAULT_SECURITY_DAC=y CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf" @@ -1036,6 +1164,7 @@ CONFIG_INIT_ON_FREE_DEFAULT_ON=y CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y @@ -1065,6 +1194,9 @@ CONFIG_ARCH_DMA_ADDR_T_64BIT=y CONFIG_DMA_DECLARE_COHERENT=y CONFIG_SWIOTLB=y # CONFIG_DMA_API_DEBUG is not set +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_NLATTR=y # CONFIG_IRQ_POLL is not set CONFIG_LIBFDT=y CONFIG_HAVE_GENERIC_VDSO=y @@ -1105,6 +1237,7 @@ CONFIG_DEBUG_INFO=y # CONFIG_DEBUG_INFO_SPLIT is not set CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y # CONFIG_DEBUG_INFO_DWARF4 is not set +# CONFIG_DEBUG_INFO_DWARF5 is not set # CONFIG_DEBUG_INFO_BTF is not set # CONFIG_GDB_SCRIPTS is not set CONFIG_FRAME_WARN=2048 @@ -1222,6 +1355,11 @@ CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y CONFIG_DEBUG_RWSEMS=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_LOCKDEP=y +CONFIG_LOCKDEP_BITS=15 +CONFIG_LOCKDEP_CHAINS_BITS=16 +CONFIG_LOCKDEP_STACK_TRACE_BITS=19 +CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14 +CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12 # CONFIG_DEBUG_LOCKDEP is not set # CONFIG_DEBUG_ATOMIC_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set @@ -1265,8 +1403,6 @@ CONFIG_RCU_TRACE=y # CONFIG_LATENCYTOP is not set CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y -CONFIG_HAVE_DYNAMIC_FTRACE=y -CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_TRACE_CLOCK=y @@ -1302,6 +1438,7 @@ CONFIG_ARCH_HAS_KCOV=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set # CONFIG_RUNTIME_TESTING_MENU is not set +CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage diff --git a/.github/workflows/kernel-riscv64-release.config b/.github/workflows/kernel-riscv64-release.config index c0c43ade16999e..115c537d26d094 100644 --- a/.github/workflows/kernel-riscv64-release.config +++ b/.github/workflows/kernel-riscv64-release.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/riscv 5.12.0-rc4 Kernel Configuration +# Linux/riscv 5.13.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 11.0.0 (https://github.com/llvm/llvm-project.git 176249bd6732a8044d457092ed932768724a6f06)" CONFIG_GCC_VERSION=0 @@ -13,6 +13,7 @@ CONFIG_HAS_RUST=y CONFIG_RUSTC_VERSION=15200 CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_IRQ_WORK=y CONFIG_THREAD_INFO_IN_TASK=y @@ -29,9 +30,11 @@ CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" # CONFIG_SWAP is not set # CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set # CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_USELIB is not set +# CONFIG_AUDIT is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y # @@ -49,6 +52,8 @@ CONFIG_GENERIC_IRQ_MULTI_HANDLER=y CONFIG_ARCH_CLOCKSOURCE_INIT=y CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_ARCH_HAS_TICK_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y # # Timers subsystem @@ -62,6 +67,16 @@ CONFIG_NO_HZ_IDLE=y # CONFIG_HIGH_RES_TIMERS is not set # end of Timers subsystem +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y + +# +# BPF subsystem +# +# CONFIG_BPF_SYSCALL is not set +# CONFIG_BPF_JIT is not set +# end of BPF subsystem + # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set @@ -73,6 +88,7 @@ CONFIG_TICK_CPU_ACCOUNTING=y # CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set # CONFIG_IRQ_TIME_ACCOUNTING is not set # CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set # CONFIG_PSI is not set # end of CPU/Task time and stats accounting @@ -107,6 +123,7 @@ CONFIG_NAMESPACES=y # CONFIG_UTS_NS is not set # CONFIG_USER_NS is not set # CONFIG_PID_NS is not set +CONFIG_NET_NS=y # CONFIG_CHECKPOINT_RESTORE is not set # CONFIG_SCHED_AUTOGROUP is not set # CONFIG_SYSFS_DEPRECATED is not set @@ -148,7 +165,6 @@ CONFIG_ADVISE_SYSCALLS=y CONFIG_MEMBARRIER=y CONFIG_KALLSYMS=y CONFIG_KALLSYMS_BASE_RELATIVE=y -# CONFIG_BPF_SYSCALL is not set # CONFIG_USERFAULTFD is not set # CONFIG_EMBEDDED is not set CONFIG_HAVE_PERF_EVENTS=y @@ -188,7 +204,6 @@ CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_WANT_GENERAL_HUGETLB=y CONFIG_ARCH_SUPPORTS_UPROBES=y -CONFIG_SYS_SUPPORTS_HUGETLBFS=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_GENERIC_BUG=y @@ -203,10 +218,18 @@ CONFIG_LOCKDEP_SUPPORT=y # # SoC selection # +# CONFIG_SOC_MICROCHIP_POLARFIRE is not set # CONFIG_SOC_SIFIVE is not set CONFIG_SOC_VIRT=y # end of SoC selection +# +# CPU errata selection +# +CONFIG_RISCV_ERRATA_ALTERNATIVE=y +# CONFIG_ERRATA_SIFIVE is not set +# end of CPU errata selection + # # Platform type # @@ -241,6 +264,8 @@ CONFIG_FPU=y CONFIG_HZ_1000=y CONFIG_HZ=1000 # CONFIG_RISCV_SBI_V01 is not set +# CONFIG_KEXEC is not set +# CONFIG_CRASH_DUMP is not set # end of Kernel features # @@ -248,6 +273,8 @@ CONFIG_HZ=1000 # CONFIG_CMDLINE="" # CONFIG_EFI is not set +# CONFIG_PHYS_RAM_BASE_FIXED is not set +# CONFIG_XIP_KERNEL is not set # end of Boot options # @@ -281,6 +308,7 @@ CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_CONTIGUOUS=y CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_ARCH_HAS_FORTIFY_SOURCE=y CONFIG_ARCH_HAS_SET_MEMORY=y CONFIG_ARCH_HAS_SET_DIRECT_MAP=y CONFIG_HAVE_ASM_MODVERSIONS=y @@ -312,6 +340,8 @@ CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_STRICT_MODULE_RWX=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y # @@ -332,8 +362,12 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y # CONFIG_BLK_DEV_BSG is not set @@ -432,8 +466,64 @@ CONFIG_GENERIC_EARLY_IOREMAP=y CONFIG_ARCH_HAS_PTE_SPECIAL=y # end of Memory Management options -# CONFIG_NET is not set -CONFIG_HAVE_EBPF_JIT=y +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_UNIX is not set +# CONFIG_INET is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_QRTR is not set +# CONFIG_PCPU_DEV_REFCNT is not set +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_BT is not set +# CONFIG_WIRELESS is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +# CONFIG_FAILOVER is not set +# CONFIG_ETHTOOL_NETLINK is not set # # Device Drivers @@ -473,6 +563,7 @@ CONFIG_GENERIC_ARCH_TOPOLOGY=y # CONFIG_MHI_BUS is not set # end of Bus devices +# CONFIG_CONNECTOR is not set # CONFIG_GNSS is not set # CONFIG_MTD is not set CONFIG_DTC=y @@ -483,6 +574,7 @@ CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_KOBJ=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y +CONFIG_OF_NET=y CONFIG_OF_RESERVED_MEM=y # CONFIG_OF_OVERLAY is not set # CONFIG_PARPORT is not set @@ -501,7 +593,6 @@ CONFIG_OF_RESERVED_MEM=y # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_SRAM is not set # CONFIG_XILINX_SDFEC is not set -# CONFIG_PVPANIC is not set # CONFIG_C2PORT is not set # @@ -519,6 +610,7 @@ CONFIG_OF_RESERVED_MEM=y # Altera FPGA firmware download module (requires I2C) # # CONFIG_ECHO is not set +# CONFIG_PVPANIC is not set # end of Misc devices # @@ -532,6 +624,38 @@ CONFIG_SCSI_MOD=y # CONFIG_ATA is not set # CONFIG_MD is not set # CONFIG_TARGET_CORE is not set +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_DUMMY is not set +CONFIG_DUMMY_RS=m +# CONFIG_EQUALIZER is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +# CONFIG_NLMON is not set +# CONFIG_ETHERNET is not set +# CONFIG_PHYLIB is not set +# CONFIG_MDIO_DEVICE is not set + +# +# PCS device drivers +# +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Host-side USB support is needed for USB Network Adapter support +# +# CONFIG_WLAN is not set +# CONFIG_WAN is not set +# CONFIG_WWAN is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set # CONFIG_NVM is not set # @@ -620,14 +744,13 @@ CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_GOLDFISH_TTY is not set +# CONFIG_N_GSM is not set # CONFIG_NULL_TTY is not set -# CONFIG_TRACE_SINK is not set # CONFIG_SERIAL_DEV_BUS is not set # CONFIG_VIRTIO_CONSOLE is not set # CONFIG_IPMI_HANDLER is not set # CONFIG_HW_RANDOM is not set # CONFIG_DEVMEM is not set -# CONFIG_DEVKMEM is not set # CONFIG_RAW_DRIVER is not set # CONFIG_TCG_TPM is not set # CONFIG_XILLYBUS is not set @@ -650,6 +773,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y # # PTP clock support # +# CONFIG_PTP_1588_CLOCK is not set # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. @@ -685,7 +809,6 @@ CONFIG_BCMA_POSSIBLE=y # CONFIG_MFD_KEMPLD is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_SM501 is not set -# CONFIG_ABX500_CORE is not set CONFIG_MFD_SYSCON=y # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_TQMX86 is not set @@ -761,6 +884,7 @@ CONFIG_EDAC_SUPPORT=y # CONFIG_VFIO is not set # CONFIG_VIRT_DRIVERS is not set # CONFIG_VIRTIO_MENU is not set +# CONFIG_VDPA is not set # CONFIG_VHOST_MENU is not set # @@ -769,6 +893,7 @@ CONFIG_EDAC_SUPPORT=y # end of Microsoft Hyper-V guest support # CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set # CONFIG_STAGING is not set CONFIG_GOLDFISH=y # CONFIG_GOLDFISH_PIPE is not set @@ -983,12 +1108,14 @@ CONFIG_PROC_PAGE_MONITOR=y CONFIG_KERNFS=y CONFIG_SYSFS=y # CONFIG_TMPFS is not set +CONFIG_ARCH_SUPPORTS_HUGETLBFS=y # CONFIG_HUGETLBFS is not set CONFIG_ARCH_HAS_GIGANTIC_PAGE=y # CONFIG_CONFIGFS_FS is not set # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NLS is not set # CONFIG_UNICODE is not set CONFIG_IO_WQ=y @@ -1004,6 +1131,7 @@ CONFIG_IO_WQ=y CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y CONFIG_HARDENED_USERCOPY=y CONFIG_HARDENED_USERCOPY_FALLBACK=y +# CONFIG_FORTIFY_SOURCE is not set # CONFIG_STATIC_USERMODEHELPER is not set CONFIG_DEFAULT_SECURITY_DAC=y CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf" @@ -1035,6 +1163,7 @@ CONFIG_INIT_ON_FREE_DEFAULT_ON=y CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y @@ -1064,6 +1193,9 @@ CONFIG_ARCH_DMA_ADDR_T_64BIT=y CONFIG_DMA_DECLARE_COHERENT=y CONFIG_SWIOTLB=y # CONFIG_DMA_API_DEBUG is not set +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_NLATTR=y # CONFIG_IRQ_POLL is not set CONFIG_LIBFDT=y CONFIG_HAVE_GENERIC_VDSO=y @@ -1182,8 +1314,6 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=21 CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y -CONFIG_HAVE_DYNAMIC_FTRACE=y -CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_TRACING_SUPPORT=y @@ -1216,6 +1346,7 @@ CONFIG_ARCH_HAS_KCOV=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set # CONFIG_RUNTIME_TESTING_MENU is not set +CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage diff --git a/.github/workflows/kernel-x86_64-debug.config b/.github/workflows/kernel-x86_64-debug.config index 05ae0d5af161dc..93968f6d074689 100644 --- a/.github/workflows/kernel-x86_64-debug.config +++ b/.github/workflows/kernel-x86_64-debug.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 5.12.0-rc4 Kernel Configuration +# Linux/x86 5.13.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 11.0.0 (https://github.com/llvm/llvm-project.git 176249bd6732a8044d457092ed932768724a6f06)" CONFIG_GCC_VERSION=0 @@ -15,12 +15,14 @@ CONFIG_CC_CAN_LINK=y CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CONSTRUCTORS=y CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y CONFIG_THREAD_INFO_IN_TASK=y + # # General setup # @@ -46,9 +48,11 @@ CONFIG_KERNEL_GZIP=y CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" # CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set # CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_USELIB is not set +# CONFIG_AUDIT is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y # @@ -91,6 +95,17 @@ CONFIG_NO_HZ_IDLE=y # CONFIG_HIGH_RES_TIMERS is not set # end of Timers subsystem +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y + +# +# BPF subsystem +# +# CONFIG_BPF_SYSCALL is not set +# CONFIG_BPF_JIT is not set +# end of BPF subsystem + # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set @@ -179,8 +194,6 @@ CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y CONFIG_KALLSYMS_BASE_RELATIVE=y -# CONFIG_BPF_SYSCALL is not set -CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y # CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y # CONFIG_KCMP is not set @@ -228,7 +241,6 @@ CONFIG_GENERIC_BUG=y CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_ARCH_HAS_CPU_RELAX=y -CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_ARCH_HAS_FILTER_PGPROT=y CONFIG_HAVE_SETUP_PER_CPU_AREA=y CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y @@ -346,8 +358,7 @@ CONFIG_HAVE_LIVEPATCH=y # end of Processor type and features CONFIG_ARCH_HAS_ADD_PAGES=y -CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y -CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y +CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y # # Power management and ACPI options @@ -404,6 +415,7 @@ CONFIG_HAVE_KVM=y CONFIG_AS_AVX512=y CONFIG_AS_SHA1_NI=y CONFIG_AS_SHA256_NI=y +CONFIG_AS_TPAUSE=y # # General architecture-dependent options @@ -485,6 +497,8 @@ CONFIG_HAVE_RELIABLE_STACKTRACE=y # CONFIG_COMPAT_32BIT_TIME is not set CONFIG_HAVE_ARCH_VMAP_STACK=y CONFIG_VMAP_STACK=y +CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y +# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_STRICT_KERNEL_RWX=y CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y @@ -517,8 +531,12 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" # CONFIG_TRIM_UNUSED_KSYMS is not set CONFIG_MODULES_TREE_LOOKUP=y # CONFIG_BLOCK is not set @@ -555,8 +573,10 @@ CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSEMEM_VMEMMAP=y CONFIG_HAVE_FAST_GUP=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y # CONFIG_MEMORY_HOTPLUG is not set CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y CONFIG_COMPACTION=y # CONFIG_PAGE_REPORTING is not set CONFIG_MIGRATION=y @@ -574,6 +594,7 @@ CONFIG_ARCH_WANTS_THP_SWAP=y CONFIG_GENERIC_EARLY_IOREMAP=y # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set # CONFIG_IDLE_PAGE_TRACKING is not set +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_ARCH_HAS_PTE_DEVMAP=y # CONFIG_PERCPU_STATS is not set # CONFIG_GUP_TEST is not set @@ -581,8 +602,64 @@ CONFIG_ARCH_HAS_PTE_SPECIAL=y CONFIG_KMAP_LOCAL=y # end of Memory Management options -# CONFIG_NET is not set -CONFIG_HAVE_EBPF_JIT=y +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_UNIX is not set +# CONFIG_INET is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_QRTR is not set +# CONFIG_PCPU_DEV_REFCNT is not set +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_BT is not set +# CONFIG_WIRELESS is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +# CONFIG_FAILOVER is not set +# CONFIG_ETHTOOL_NETLINK is not set # # Device Drivers @@ -614,7 +691,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y # CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set # CONFIG_PM_QOS_KUNIT_TEST is not set # CONFIG_TEST_ASYNC_DRIVER_PROBE is not set -# CONFIG_KUNIT_DRIVER_PE_TEST is not set +# CONFIG_DRIVER_PE_KUNIT_TEST is not set CONFIG_GENERIC_CPU_AUTOPROBE=y CONFIG_GENERIC_CPU_VULNERABILITIES=y # end of Generic Driver Options @@ -625,6 +702,7 @@ CONFIG_GENERIC_CPU_VULNERABILITIES=y # CONFIG_MHI_BUS is not set # end of Bus devices +# CONFIG_CONNECTOR is not set # CONFIG_GNSS is not set # CONFIG_MTD is not set # CONFIG_OF is not set @@ -660,6 +738,7 @@ CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # Altera FPGA firmware download module (requires I2C) # # CONFIG_ECHO is not set +# CONFIG_PVPANIC is not set # end of Misc devices CONFIG_HAVE_IDE=y @@ -671,6 +750,38 @@ CONFIG_SCSI_MOD=y # end of SCSI device support # CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_DUMMY is not set +CONFIG_DUMMY_RS=m +# CONFIG_EQUALIZER is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +# CONFIG_NLMON is not set +# CONFIG_ETHERNET is not set +# CONFIG_PHYLIB is not set +# CONFIG_MDIO_DEVICE is not set + +# +# PCS device drivers +# +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Host-side USB support is needed for USB Network Adapter support +# +# CONFIG_WLAN is not set +# CONFIG_WAN is not set +# CONFIG_WWAN is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set # # Input device support @@ -754,8 +865,8 @@ CONFIG_CONSOLE_POLL=y # end of Serial drivers # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set # CONFIG_NULL_TTY is not set -# CONFIG_TRACE_SINK is not set # CONFIG_SERIAL_DEV_BUS is not set # CONFIG_TTY_PRINTK is not set # CONFIG_VIRTIO_CONSOLE is not set @@ -763,7 +874,6 @@ CONFIG_CONSOLE_POLL=y # CONFIG_HW_RANDOM is not set # CONFIG_MWAVE is not set # CONFIG_DEVMEM is not set -# CONFIG_DEVKMEM is not set # CONFIG_NVRAM is not set # CONFIG_HANGCHECK_TIMER is not set # CONFIG_TCG_TPM is not set @@ -814,7 +924,6 @@ CONFIG_BCMA_POSSIBLE=y # CONFIG_MFD_KEMPLD is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_SM501 is not set -# CONFIG_ABX500_CORE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_TQMX86 is not set @@ -893,6 +1002,7 @@ CONFIG_RTC_MC146818_LIB=y # CONFIG_VFIO is not set # CONFIG_VIRT_DRIVERS is not set # CONFIG_VIRTIO_MENU is not set +# CONFIG_VDPA is not set # CONFIG_VHOST_MENU is not set # @@ -901,6 +1011,7 @@ CONFIG_RTC_MC146818_LIB=y # end of Microsoft Hyper-V guest support # CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set # CONFIG_STAGING is not set # CONFIG_X86_PLATFORM_DEVICES is not set # CONFIG_CHROME_PLATFORMS is not set @@ -1069,6 +1180,7 @@ CONFIG_ARCH_HAS_GIGANTIC_PAGE=y # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NLS is not set # CONFIG_UNICODE is not set # end of File systems @@ -1098,8 +1210,8 @@ CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,appar # CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y -# CONFIG_INIT_STACK_NONE is not set -CONFIG_INIT_STACK_ALL_PATTERN=y +CONFIG_INIT_STACK_NONE=y +# CONFIG_INIT_STACK_ALL_PATTERN is not set # CONFIG_INIT_STACK_ALL_ZERO is not set CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y CONFIG_INIT_ON_FREE_DEFAULT_ON=y @@ -1117,6 +1229,7 @@ CONFIG_BINARY_PRINTF=y CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y CONFIG_GENERIC_FIND_FIRST_BIT=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set @@ -1152,8 +1265,11 @@ CONFIG_SWIOTLB=y # CONFIG_DMA_API_DEBUG is not set # CONFIG_DMA_MAP_BENCHMARK is not set # CONFIG_CPUMASK_OFFSTACK is not set +CONFIG_CPU_RMAP=y +CONFIG_DQL=y CONFIG_GLOB=y # CONFIG_GLOB_SELFTEST is not set +CONFIG_NLATTR=y # CONFIG_IRQ_POLL is not set CONFIG_HAVE_GENERIC_VDSO=y CONFIG_GENERIC_GETTIMEOFDAY=y @@ -1195,6 +1311,7 @@ CONFIG_DEBUG_INFO=y # CONFIG_DEBUG_INFO_SPLIT is not set # CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set CONFIG_DEBUG_INFO_DWARF4=y +# CONFIG_DEBUG_INFO_DWARF5 is not set # CONFIG_DEBUG_INFO_BTF is not set # CONFIG_GDB_SCRIPTS is not set CONFIG_FRAME_WARN=2048 @@ -1206,6 +1323,7 @@ CONFIG_READABLE_ASM=y CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B=y CONFIG_STACK_VALIDATION=y CONFIG_VMLINUX_VALIDATION=y +# CONFIG_VMLINUX_MAP is not set # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set # end of Compile-time checks and compiler options @@ -1235,7 +1353,7 @@ CONFIG_CC_HAS_UBSAN_BOUNDS=y CONFIG_CC_HAS_UBSAN_ARRAY_BOUNDS=y CONFIG_UBSAN_BOUNDS=y CONFIG_UBSAN_ARRAY_BOUNDS=y -CONFIG_UBSAN_LOCAL_BOUNDS=y +# CONFIG_UBSAN_LOCAL_BOUNDS is not set CONFIG_UBSAN_SHIFT=y CONFIG_UBSAN_DIV_ZERO=y CONFIG_UBSAN_OBJECT_SIZE=y @@ -1305,8 +1423,7 @@ CONFIG_KASAN=y CONFIG_KASAN_GENERIC=y CONFIG_KASAN_OUTLINE=y # CONFIG_KASAN_INLINE is not set -# CONFIG_KASAN_STACK_ENABLE is not set -CONFIG_KASAN_STACK=0 +CONFIG_KASAN_STACK=y CONFIG_KASAN_VMALLOC=y # CONFIG_KASAN_KUNIT_TEST is not set # CONFIG_KASAN_MODULE_TEST is not set @@ -1359,6 +1476,11 @@ CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y CONFIG_DEBUG_RWSEMS=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_LOCKDEP=y +CONFIG_LOCKDEP_BITS=15 +CONFIG_LOCKDEP_CHAINS_BITS=16 +CONFIG_LOCKDEP_STACK_TRACE_BITS=19 +CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14 +CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12 CONFIG_DEBUG_LOCKDEP=y CONFIG_DEBUG_ATOMIC_SLEEP=y # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set @@ -1489,6 +1611,7 @@ CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_TEST_LIST_SORT is not set # CONFIG_TEST_MIN_HEAP is not set # CONFIG_TEST_SORT is not set +# CONFIG_TEST_DIV64 is not set # CONFIG_KPROBES_SANITY_TEST is not set # CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_RBTREE_TEST is not set @@ -1512,6 +1635,8 @@ CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_TEST_BITOPS is not set # CONFIG_TEST_VMALLOC is not set # CONFIG_TEST_USER_COPY is not set +# CONFIG_TEST_BPF is not set +# CONFIG_TEST_BLACKHOLE_DEV is not set # CONFIG_FIND_BIT_BENCHMARK is not set # CONFIG_BITFIELD_KUNIT is not set # CONFIG_RESOURCE_KUNIT_TEST is not set @@ -1528,6 +1653,7 @@ CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_TEST_MEMINIT is not set # CONFIG_TEST_FREE_PAGES is not set # CONFIG_TEST_FPU is not set +CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage diff --git a/.github/workflows/kernel-x86_64-release.config b/.github/workflows/kernel-x86_64-release.config index f581b18e760500..f87ab88b4ed270 100644 --- a/.github/workflows/kernel-x86_64-release.config +++ b/.github/workflows/kernel-x86_64-release.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 5.12.0-rc4 Kernel Configuration +# Linux/x86 5.13.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 11.0.0 (https://github.com/llvm/llvm-project.git 176249bd6732a8044d457092ed932768724a6f06)" CONFIG_GCC_VERSION=0 @@ -15,7 +15,9 @@ CONFIG_CC_CAN_LINK=y CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y +CONFIG_CONSTRUCTORS=y CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y CONFIG_THREAD_INFO_IN_TASK=y @@ -46,9 +48,11 @@ CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" # CONFIG_SWAP is not set # CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set # CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_USELIB is not set +# CONFIG_AUDIT is not set CONFIG_HAVE_ARCH_AUDITSYSCALL=y # @@ -91,6 +95,17 @@ CONFIG_NO_HZ_IDLE=y # CONFIG_HIGH_RES_TIMERS is not set # end of Timers subsystem +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y + +# +# BPF subsystem +# +# CONFIG_BPF_SYSCALL is not set +# CONFIG_BPF_JIT is not set +# end of BPF subsystem + # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set @@ -102,6 +117,7 @@ CONFIG_TICK_CPU_ACCOUNTING=y # CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set # CONFIG_IRQ_TIME_ACCOUNTING is not set # CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set # CONFIG_PSI is not set # end of CPU/Task time and stats accounting @@ -140,6 +156,7 @@ CONFIG_NAMESPACES=y # CONFIG_TIME_NS is not set # CONFIG_USER_NS is not set # CONFIG_PID_NS is not set +CONFIG_NET_NS=y # CONFIG_CHECKPOINT_RESTORE is not set # CONFIG_SCHED_AUTOGROUP is not set # CONFIG_SYSFS_DEPRECATED is not set @@ -186,8 +203,6 @@ CONFIG_MEMBARRIER=y CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y CONFIG_KALLSYMS_BASE_RELATIVE=y -# CONFIG_BPF_SYSCALL is not set -CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y # CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y CONFIG_RSEQ=y @@ -232,7 +247,6 @@ CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_ARCH_HAS_CPU_RELAX=y -CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_ARCH_HAS_FILTER_PGPROT=y CONFIG_HAVE_SETUP_PER_CPU_AREA=y CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y @@ -358,9 +372,7 @@ CONFIG_HAVE_LIVEPATCH=y # end of Processor type and features CONFIG_ARCH_HAS_ADD_PAGES=y -CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y -CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y -CONFIG_ARCH_ENABLE_THP_MIGRATION=y +CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y # # Power management and ACPI options @@ -419,6 +431,7 @@ CONFIG_HAVE_KVM=y CONFIG_AS_AVX512=y CONFIG_AS_SHA1_NI=y CONFIG_AS_SHA256_NI=y +CONFIG_AS_TPAUSE=y # # General architecture-dependent options @@ -498,6 +511,8 @@ CONFIG_HAVE_RELIABLE_STACKTRACE=y # CONFIG_COMPAT_32BIT_TIME is not set CONFIG_HAVE_ARCH_VMAP_STACK=y CONFIG_VMAP_STACK=y +CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y +# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_STRICT_KERNEL_RWX=y CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y @@ -529,8 +544,12 @@ CONFIG_MODULE_UNLOAD=y # CONFIG_MODVERSIONS is not set # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y # CONFIG_BLK_DEV_BSG is not set @@ -596,13 +615,15 @@ CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSEMEM_VMEMMAP=y CONFIG_HAVE_FAST_GUP=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y # CONFIG_MEMORY_HOTPLUG is not set CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y CONFIG_COMPACTION=y # CONFIG_PAGE_REPORTING is not set CONFIG_MIGRATION=y +CONFIG_ARCH_ENABLE_THP_MIGRATION=y CONFIG_PHYS_ADDR_T_64BIT=y -CONFIG_BOUNCE=y CONFIG_VIRT_TO_BUS=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 @@ -618,6 +639,7 @@ CONFIG_ARCH_WANTS_THP_SWAP=y CONFIG_GENERIC_EARLY_IOREMAP=y # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set # CONFIG_IDLE_PAGE_TRACKING is not set +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_ARCH_HAS_PTE_DEVMAP=y # CONFIG_PERCPU_STATS is not set @@ -628,8 +650,64 @@ CONFIG_ARCH_HAS_PTE_DEVMAP=y CONFIG_ARCH_HAS_PTE_SPECIAL=y # end of Memory Management options -# CONFIG_NET is not set -CONFIG_HAVE_EBPF_JIT=y +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_UNIX is not set +# CONFIG_INET is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_QRTR is not set +# CONFIG_PCPU_DEV_REFCNT is not set +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_BT is not set +# CONFIG_WIRELESS is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +# CONFIG_FAILOVER is not set +# CONFIG_ETHTOOL_NETLINK is not set # # Device Drivers @@ -670,6 +748,7 @@ CONFIG_GENERIC_CPU_VULNERABILITIES=y # CONFIG_MHI_BUS is not set # end of Bus devices +# CONFIG_CONNECTOR is not set # CONFIG_GNSS is not set # CONFIG_MTD is not set # CONFIG_OF is not set @@ -707,6 +786,7 @@ CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # Altera FPGA firmware download module (requires I2C) # # CONFIG_ECHO is not set +# CONFIG_PVPANIC is not set # end of Misc devices CONFIG_HAVE_IDE=y @@ -724,6 +804,38 @@ CONFIG_SCSI_MOD=y # CONFIG_MD is not set # CONFIG_TARGET_CORE is not set # CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_DUMMY is not set +CONFIG_DUMMY_RS=m +# CONFIG_EQUALIZER is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +# CONFIG_NLMON is not set +# CONFIG_ETHERNET is not set +# CONFIG_PHYLIB is not set +# CONFIG_MDIO_DEVICE is not set + +# +# PCS device drivers +# +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Host-side USB support is needed for USB Network Adapter support +# +# CONFIG_WLAN is not set +# CONFIG_WAN is not set +# CONFIG_WWAN is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set # CONFIG_NVM is not set # @@ -806,15 +918,14 @@ CONFIG_SERIAL_CORE_CONSOLE=y # end of Serial drivers # CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set # CONFIG_NULL_TTY is not set -# CONFIG_TRACE_SINK is not set # CONFIG_SERIAL_DEV_BUS is not set # CONFIG_VIRTIO_CONSOLE is not set # CONFIG_IPMI_HANDLER is not set # CONFIG_HW_RANDOM is not set # CONFIG_MWAVE is not set # CONFIG_DEVMEM is not set -# CONFIG_DEVKMEM is not set # CONFIG_NVRAM is not set # CONFIG_RAW_DRIVER is not set # CONFIG_HANGCHECK_TIMER is not set @@ -840,6 +951,7 @@ CONFIG_SERIAL_CORE_CONSOLE=y # # PTP clock support # +# CONFIG_PTP_1588_CLOCK is not set # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. @@ -867,7 +979,6 @@ CONFIG_BCMA_POSSIBLE=y # CONFIG_MFD_KEMPLD is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_SM501 is not set -# CONFIG_ABX500_CORE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_TQMX86 is not set @@ -946,6 +1057,7 @@ CONFIG_RTC_MC146818_LIB=y # CONFIG_VFIO is not set # CONFIG_VIRT_DRIVERS is not set # CONFIG_VIRTIO_MENU is not set +# CONFIG_VDPA is not set # CONFIG_VHOST_MENU is not set # @@ -954,6 +1066,7 @@ CONFIG_RTC_MC146818_LIB=y # end of Microsoft Hyper-V guest support # CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set # CONFIG_STAGING is not set # CONFIG_X86_PLATFORM_DEVICES is not set # CONFIG_CHROME_PLATFORMS is not set @@ -1157,6 +1270,7 @@ CONFIG_ARCH_HAS_GIGANTIC_PAGE=y # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NLS is not set # CONFIG_UNICODE is not set CONFIG_IO_WQ=y @@ -1205,6 +1319,7 @@ CONFIG_INIT_STACK_NONE=y CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y CONFIG_GENERIC_FIND_FIRST_BIT=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set @@ -1239,6 +1354,9 @@ CONFIG_NEED_DMA_MAP_STATE=y CONFIG_ARCH_DMA_ADDR_T_64BIT=y CONFIG_SWIOTLB=y # CONFIG_DMA_API_DEBUG is not set +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_NLATTR=y # CONFIG_IRQ_POLL is not set CONFIG_HAVE_GENERIC_VDSO=y CONFIG_GENERIC_GETTIMEOFDAY=y @@ -1419,6 +1537,7 @@ CONFIG_ARCH_HAS_KCOV=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set # CONFIG_RUNTIME_TESTING_MENU is not set +CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 74dc8e249faa3e..2eab4eb1f7447f 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -72,6 +72,21 @@ config DUMMY To compile this driver as a module, choose M here: the module will be called dummy. +config DUMMY_RS + tristate "Dummy net driver support (rust)" + help + This is essentially a bit-bucket device (i.e. traffic you send to + this device is consigned into oblivion) with a configurable IP + address. It is most commonly used in order to make your currently + inactive SLIP address seem like a real address for local programs. + If you use SLIP or PPP, you might want to say Y here. It won't + enlarge your kernel. What a deal. Read about it in the Network + Administrator's Guide, available from + . + + To compile this driver as a module, choose M here: the module + will be called dummy_rs. + config WIREGUARD tristate "WireGuard secure network tunnel" depends on NET && INET diff --git a/drivers/net/Makefile b/drivers/net/Makefile index 7ffd2d03efaf7f..abedd05fa99dcf 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile @@ -10,6 +10,7 @@ obj-$(CONFIG_BONDING) += bonding/ obj-$(CONFIG_IPVLAN) += ipvlan/ obj-$(CONFIG_IPVTAP) += ipvlan/ obj-$(CONFIG_DUMMY) += dummy.o +obj-$(CONFIG_DUMMY_RS) += dummy_rs.o obj-$(CONFIG_WIREGUARD) += wireguard/ obj-$(CONFIG_EQUALIZER) += eql.o obj-$(CONFIG_IFB) += ifb.o diff --git a/drivers/net/dummy_rs.rs b/drivers/net/dummy_rs.rs new file mode 100644 index 00000000000000..9e23bfddfea32e --- /dev/null +++ b/drivers/net/dummy_rs.rs @@ -0,0 +1,231 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Rust dummy network driver +//! +//! The purpose of this driver is to provide a device to point a +//! route through, but not to actually transmit packets. +//! +//! Why? If you have a machine whose only connection is an occasional +//! PPP/SLIP/PLIP link, you can only connect to your own hostname +//! when the link is up. Otherwise you have to use localhost. +//! This isn't very consistent. +//! +//! One solution is to set up a dummy link using PPP/SLIP/PLIP, +//! but this seems (to me) too much overhead for too little gain. +//! This driver provides a small alternative. Thus you can do +//! +//! [when not running slip] +//! ifconfig dummy slip.addr.ess.here up +//! [to go to slip] +//! ifconfig dummy down +//! dip whatever +//! +//! This was written by looking at the dummy network driver from Nick +//! Holloway, which was written by looking at Donald Becker's skeleton driver +//! and the loopback driver. +//! +//! Finn Behrens, 30th April 2021 +//! +//! rust rewrite of the C version from Nick Holloway, 27th May 1994 +//! see [dummy.c](./dummy.c) + +#![no_std] +#![feature(allocator_api, global_asm)] + +use kernel::net::device; +use kernel::net::prelude::*; +use kernel::net::rtnl; +use kernel::Error; +use kernel::SavedAsPointer; +use kernel::{ + net::netlink::{NlAttrVec, NlExtAck}, + prelude::*, +}; + +module! { + type: RustNetDummy, + name: b"dummy_rs", + author: b"Finn Behrens ", + description: b"Rust dummy network driver", + license: b"GPL v2", + alias_rtnl_link: b"dummy_rs", + params: { + numdummies: usize { + default: 0, + permissions: 0, + description: b"Number of dummy_rs pseudo devices", + }, + }, +} + +fn setup(dev: &mut NetDevice) { + dev.ether_setup(); + + dev.set_ops(); + + // Fill in device structure with ethernet-generic values. + dev.add_flag(device::Flag::NOARP); + dev.remove_flag(device::Flag::MULTICAST); + + dev.add_private_flag(device::PrivFlag::LIVE_ADDR_CHANGE); + dev.add_private_flag(device::PrivFlag::NO_QUEUE); + + let mut feature = device::Features::empty(); + + feature += device::Features::SG; + feature += device::Features::FRAGLIST; + feature += device::Features::GSO_SOFTWARE; + feature += device::Features::HW_CSUM; + feature += device::Features::HIGHDMA; + feature += device::Features::LLTX; + feature += device::Features::GSO_ENCAP_ALL; + + dev.set_features(feature); + dev.set_hw_features(feature); + dev.set_hw_enc_features(feature); + + dev.hw_addr_random(); + dev.set_mtu(0, 0); +} + +fn validate(tb: &NlAttrVec, _data: &NlAttrVec, _ext_ack: &NlExtAck) -> Result { + if let Some(addr) = tb.get(kernel::bindings::IFLA_ADDRESS) { + if Some(kernel::net::netlink::ETH_ALEN) != addr.nla_len() { + return Err(Error::EINVAL); + } + if !addr.is_valid_ether_addr() { + return Err(Error::EADDRNOTAVAIL); + } + } + Ok(()) +} + +rtnl_link_ops! { + kind: b"dummy_rs", + type: DummyRsDev, + setup: setup, + validate: validate, +} + +struct RustNetDummy {} + +impl KernelModule for RustNetDummy { + fn init() -> Result { + let num = *numdummies.read(); + + unsafe { dummy_rs_LINK_OPS.register() }?; + + for _ in 0..(num) { + let mut dev = NetDevice::new( + DummyRsDev, + kernel::c_str!("dummyrs%d"), + kernel::net::device::NetNameAssingType::Enum, + 1, + 1, + )?; + dev.set_rtnl_ops(unsafe { &dummy_rs_LINK_OPS }); + + if let Err(e) = dev.register() { + pr_warn!("could not register: {}", e.to_kernel_errno()); + return Err(e); + } + } + + Ok(RustNetDummy { + //dev, + }) + } +} + +impl Drop for RustNetDummy { + fn drop(&mut self) { + // TODO: remove unsafe somehow + unsafe { dummy_rs_LINK_OPS.unregister() }; + } +} + +struct DummyRsDev; + +impl NetDeviceOps for DummyRsDev { + kernel::declare_net_device_ops!( + get_stats64, + change_carrier, + validate_addr, + set_mac_addr, + set_rx_mode + ); + + fn init(dev: &mut NetDevice) -> Result { + dev.set_new_pcpu_lstats()?; + Ok(()) + } + + fn uninit(dev: &mut NetDevice) { + unsafe { dev.free_lstats() }; + } + + fn start_xmit(skb: SkBuff, dev: &mut NetDevice) -> kernel::net::device::NetdevTX { + let mut skb = skb; + + dev.lstats_add(skb.len()); + + skb.tx_timestamp(); + drop(skb); + + kernel::net::device::NetdevTX::TX_OK + } + + fn get_stats64(dev: &mut NetDevice, stats: &mut rtnl::RtnlLinkStats64) { + stats.dev_read(dev); + } + + fn change_carrier(dev: &mut NetDevice, new_carrier: bool) -> Result { + dev.carrier_set(new_carrier); + + Ok(()) + } + + fn validate_addr(dev: &mut NetDevice) -> Result { + device::helpers::eth_validate_addr(dev) + } + + fn set_mac_addr(dev: &mut NetDevice, p: *mut kernel::c_types::c_void) -> Result { + unsafe { device::helpers::eth_mac_addr(dev, p) } + } + + // [Someting about faking multicast](https://elixir.bootlin.com/linux/v5.12-rc4/source/drivers/net/dummy.c#L48). + fn set_rx_mode(_dev: &mut NetDevice) {} +} + +impl NetDeviceAdapter for DummyRsDev { + type Inner = Self; + + type Ops = Self; + + type EthOps = Self; + + fn setup(dev: &mut NetDevice) { + setup(dev); + } +} + +impl EthToolOps for DummyRsDev { + kernel::declare_eth_tool_ops!(get_drvinfo, get_ts_info); + + fn get_drvinfo(_dev: &mut NetDevice, info: &mut ethtool::EthtoolDrvinfo) { + // TODO: how to do this more efficient without unsafe? + // FIXME: !! + let info: &kernel::bindings::ethtool_drvinfo = info.get_internal(); + unsafe { + kernel::bindings::strlcpy( + &(info.driver) as *const _ as *mut i8, + b"dummy_rs\0" as *const _ as *mut i8, + 32, + ); + } + } + + fn get_ts_info(dev: &mut NetDevice, info: &mut ethtool::EthToolTsInfo) -> Result { + kernel::net::ethtool::helpers::ethtool_op_get_ts_info(dev, info) + } +} diff --git a/rust/helpers.c b/rust/helpers.c index a6e98abb13efdf..9c74c0842ad600 100644 --- a/rust/helpers.c +++ b/rust/helpers.c @@ -11,6 +11,9 @@ #include #include #include +#include +#include +#include void rust_helper_BUG(void) { @@ -212,6 +215,34 @@ int rust_helper_security_binder_transfer_file(struct task_struct *from, } EXPORT_SYMBOL_GPL(rust_helper_security_binder_transfer_file); +void *rust_helper_netdev_priv(struct net_device *dev) +{ + return netdev_priv(dev); +} +EXPORT_SYMBOL_GPL(rust_helper_netdev_priv); + +void rust_helper_eth_hw_addr_random(struct net_device *dev) +{ + eth_hw_addr_random(dev); +} +EXPORT_SYMBOL_GPL(rust_helper_eth_hw_addr_random); + +int rust_helper_net_device_set_new_lstats(struct net_device *dev) +{ + dev->lstats = netdev_alloc_pcpu_stats(struct pcpu_lstats); + if (!dev->lstats) + return -ENOMEM; + + return 0; +} +EXPORT_SYMBOL_GPL(rust_helper_net_device_set_new_lstats); + +void rust_helper_dev_lstats_add(struct net_device *dev, unsigned int len) +{ + dev_lstats_add(dev, len); +} +EXPORT_SYMBOL_GPL(rust_helper_dev_lstats_add); + /* We use bindgen's --size_t-is-usize option to bind the C size_t type * as the Rust usize type, so we can use it in contexts where Rust * expects a usize like slice (array) indices. usize is defined to be diff --git a/rust/kernel/bindings_helper.h b/rust/kernel/bindings_helper.h index c64a6307da37ec..6662929734465d 100644 --- a/rust/kernel/bindings_helper.h +++ b/rust/kernel/bindings_helper.h @@ -18,7 +18,15 @@ #include #include #include +#include +#include +#include +#include +#include +#include // `bindgen` gets confused at certain things const gfp_t BINDINGS_GFP_KERNEL = GFP_KERNEL; const gfp_t BINDINGS___GFP_ZERO = __GFP_ZERO; + +const int BINDINGS_NLA_HDRLEN = NLA_HDRLEN; diff --git a/rust/kernel/error.rs b/rust/kernel/error.rs index 24f6b28becdbbc..e078777806382a 100644 --- a/rust/kernel/error.rs +++ b/rust/kernel/error.rs @@ -126,6 +126,9 @@ impl Error { /// Math result not representable. pub const ERANGE: Self = Error(-(bindings::ERANGE as i32)); + /// Cannot assign requested address + pub const EADDRNOTAVAIL: Self = Error(-(bindings::EADDRNOTAVAIL as i32)); + /// Restart the system call. pub const ERESTARTSYS: Self = Error(-(bindings::ERESTARTSYS as i32)); @@ -276,7 +279,7 @@ where #[macro_export] macro_rules! from_kernel_result { ($($tt:tt)*) => {{ - $crate::error::from_kernel_result_helper((|| { + $crate::from_kernel_result_helper((|| { $($tt)* })()) }}; diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs index 86c580fd7f68e8..1ffc8673cb9ffc 100644 --- a/rust/kernel/lib.rs +++ b/rust/kernel/lib.rs @@ -22,7 +22,8 @@ const_raw_ptr_deref, const_unreachable_unchecked, receiver_trait, - try_reserve + try_reserve, + doc_cfg )] // Ensure conditional compilation based on the kernel configuration works; @@ -44,6 +45,11 @@ mod error; pub mod file; pub mod file_operations; pub mod miscdev; + +#[cfg(any(CONFIG_NET, doc))] +#[doc(cfg(CONFIG_NET))] +pub mod net; + pub mod pages; pub mod security; pub mod str; @@ -77,8 +83,11 @@ pub mod user_ptr; #[doc(hidden)] pub use build_error::build_error; +#[doc(hidden)] +pub use crate::error::from_kernel_result_helper; + pub use crate::error::{Error, Result}; -pub use crate::types::{Mode, ScopeGuard}; +pub use crate::types::{Mode, SavedAsPointer, SavedAsPointerMut, ScopeGuard}; /// Page size defined in terms of the `PAGE_SHIFT` macro from C. /// @@ -137,6 +146,7 @@ impl ThisModule { /// Scoped lock on the kernel parameters of [`ThisModule`]. /// /// Lock will be released when this struct is dropped. +#[allow(dead_code)] pub struct KParamGuard<'a> { this_module: &'a ThisModule, } diff --git a/rust/kernel/net/device/flags.rs b/rust/kernel/net/device/flags.rs new file mode 100644 index 00000000000000..fc4495d2c9265a --- /dev/null +++ b/rust/kernel/net/device/flags.rs @@ -0,0 +1,277 @@ +use crate::{bindings, Error}; +use core::convert::{From, TryFrom}; +use core::ops::{Add, AddAssign, Sub, SubAssign}; + +/// Holds multiple flags to give to an interface via [`super::NetDevice::add_flag`]. +#[repr(transparent)] +#[derive(Debug, Clone, Copy)] +pub struct Features(u64); + +impl Features { + /// Create new Flag with value `0`. + #[inline] + pub const fn empty() -> Self { + Self(0) + } + + /// Add flag to Self. + #[inline] + pub fn insert(&mut self, flag: u64) { + self.0 |= flag; + } + + /// Remove the given flag from Self. + #[inline] + pub fn remove(&mut self, flag: u64) { + self.0 &= !(flag); + } +} + +impl Add for Features { + type Output = Self; + + #[inline] + #[allow(clippy::suspicious_arithmetic_impl)] + fn add(self, rhs: Self) -> Self::Output { + Self(self.0 | rhs.0) + } +} + +impl Add for Features { + type Output = Self; + + #[inline] + #[allow(clippy::suspicious_arithmetic_impl)] + fn add(self, rhs: u64) -> Self::Output { + Self(self.0 | rhs) + } +} + +impl Sub for Features { + type Output = Self; + + #[inline] + #[allow(clippy::suspicious_arithmetic_impl)] + fn sub(self, rhs: Self) -> Self::Output { + Self(self.0 & !rhs.0) + } +} + +impl Sub for Features { + type Output = Self; + + #[inline] + #[allow(clippy::suspicious_arithmetic_impl)] + fn sub(self, rhs: u64) -> Self::Output { + Self(self.0 & !rhs) + } +} + +impl AddAssign for Features { + #[inline] + #[allow(clippy::suspicious_op_assign_impl)] + fn add_assign(&mut self, rhs: Self) { + self.0 |= rhs.0 + } +} + +impl AddAssign for Features { + #[inline] + #[allow(clippy::suspicious_op_assign_impl)] + fn add_assign(&mut self, rhs: u64) { + self.0 |= rhs + } +} + +impl SubAssign for Features { + #[inline] + #[allow(clippy::suspicious_op_assign_impl)] + fn sub_assign(&mut self, rhs: Self) { + self.0 &= !rhs.0 + } +} + +impl SubAssign for Features { + #[inline] + #[allow(clippy::suspicious_op_assign_impl)] + fn sub_assign(&mut self, rhs: u64) { + self.0 &= !rhs + } +} + +impl TryFrom for Features { + type Error = Error; + + #[inline] + fn try_from(flags: u64) -> Result { + Ok(Self(flags)) + } +} + +impl From for u64 { + #[inline] + fn from(flag: Features) -> Self { + flag.0 + } +} + +macro_rules! _netif_f { + ($name:ident, $binding:ident) => { + #[doc = concat!("[`Features`] flag for `", stringify!($binding), "`")] + pub const $name: Features = Features(1u64 << $crate::bindings::$binding); + }; +} + +macro_rules! _netif_f_sum { + ($name:ident, $($f:ident),+) => { + #[doc = concat!("[`Features`] flag for `NETIF_F_", stringify!($name), "`")] + pub const $name: Features = Features($(Features::$f.0)|*); + }; + } + +impl Features { + _netif_f!(SG, NETIF_F_SG_BIT); + _netif_f!(FRAGLIST, NETIF_F_FRAGLIST_BIT); + _netif_f!(TSO, NETIF_F_TSO_BIT); + _netif_f!(TSO6, NETIF_F_TSO6_BIT); + _netif_f!(TSO_ECN, NETIF_F_TSO_ECN_BIT); + _netif_f!(TSO_MANGLEID, NETIF_F_TSO_MANGLEID_BIT); + _netif_f!(GSO_SCTP, NETIF_F_GSO_SCTP_BIT); + _netif_f!(GSO_UDP_L4, NETIF_F_GSO_UDP_L4_BIT); + _netif_f!(GSO_FRAGLIST, NETIF_F_GSO_FRAGLIST_BIT); + _netif_f!(HW_CSUM, NETIF_F_HW_CSUM_BIT); + _netif_f!(HIGHDMA, NETIF_F_HIGHDMA_BIT); + _netif_f!(LLTX, NETIF_F_LLTX_BIT); + _netif_f!(GSO_GRE, NETIF_F_GSO_GRE_BIT); + _netif_f!(GSO_GRE_CSUM, NETIF_F_GSO_GRE_CSUM_BIT); + _netif_f!(GSO_IPXIP4, NETIF_F_GSO_IPXIP4_BIT); + _netif_f!(GSO_IPXIP6, NETIF_F_GSO_IPXIP6_BIT); + _netif_f!(GSO_UDP_TUNNEL, NETIF_F_GSO_UDP_TUNNEL_BIT); + _netif_f!(GSO_UDP_TUNNEL_CSUM, NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT); + + _netif_f_sum!(ALL_TSO, TSO, TSO6, TSO_ECN, TSO_MANGLEID); + _netif_f_sum!(GSO_SOFTWARE, ALL_TSO, GSO_SCTP, GSO_UDP_L4, GSO_FRAGLIST); + _netif_f_sum!( + GSO_ENCAP_ALL, + GSO_GRE, + GSO_GRE_CSUM, + GSO_IPXIP4, + GSO_IPXIP6, + GSO_UDP_TUNNEL, + GSO_UDP_TUNNEL_CSUM + ); +} + +/// Iff flags +#[repr(u32)] +#[allow(non_camel_case_types)] +pub enum Flag { + /// UP + UP = bindings::net_device_flags_IFF_UP, + /// BROADCAST + BROADCAST = bindings::net_device_flags_IFF_BROADCAST, + /// DEBUG + DEBUG = bindings::net_device_flags_IFF_DEBUG, + /// LOOPBACK + LOOPBACK = bindings::net_device_flags_IFF_LOOPBACK, + /// POINTOPOINT + POINTOPOINT = bindings::net_device_flags_IFF_POINTOPOINT, + /// NOTRAILERS + NOTRAILERS = bindings::net_device_flags_IFF_NOTRAILERS, + /// RUNNING + RUNNING = bindings::net_device_flags_IFF_RUNNING, + /// NOARP + NOARP = bindings::net_device_flags_IFF_NOARP, + /// PROMISC + PROMISC = bindings::net_device_flags_IFF_PROMISC, + /// ALLMULTI + ALLMULTI = bindings::net_device_flags_IFF_ALLMULTI, + /// MASTER + MASTER = bindings::net_device_flags_IFF_MASTER, + /// SLAVE + SLAVE = bindings::net_device_flags_IFF_SLAVE, + /// MULTICAST + MULTICAST = bindings::net_device_flags_IFF_MULTICAST, + /// PORTSEL + PORTSEL = bindings::net_device_flags_IFF_PORTSEL, + /// AUTOMEDIA + AUTOMEDIA = bindings::net_device_flags_IFF_AUTOMEDIA, + /// DYNAMIC + DYNAMIC = bindings::net_device_flags_IFF_DYNAMIC, + + // #if __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO // TODO: is this needed? + /// LOWER + LOWER = bindings::net_device_flags_IFF_LOWER_UP, + /// DORMANT + DORMANT = bindings::net_device_flags_IFF_DORMANT, + /// ECHO + ECHO = bindings::net_device_flags_IFF_ECHO, +} + +/// Iff private flags +#[repr(i32)] +#[allow(non_camel_case_types)] +pub enum PrivFlag { + /// 802.1Q VLAN device. + IFF_802_1Q_VLAN = bindings::netdev_priv_flags_IFF_802_1Q_VLAN, /* TODO: find a good name without leading 8 */ + /// Ethernet bridging device. + EBRIDGE = bindings::netdev_priv_flags_IFF_EBRIDGE, + /// Bonding master or slave. + BONDING = bindings::netdev_priv_flags_IFF_BONDING, + /// ISATAP interface (RFC4214). + ISATAP = bindings::netdev_priv_flags_IFF_ISATAP, + /// WAN HDLC device. + WAN_HDLC = bindings::netdev_priv_flags_IFF_WAN_HDLC, + /// dev_hard_start_xmit() is allowed to release skb->dst + XMIT_DST_RELEASE = bindings::netdev_priv_flags_IFF_XMIT_DST_RELEASE, + /// Disallow bridging this ether dev. + DONT_BRIDGE = bindings::netdev_priv_flags_IFF_DONT_BRIDGE, + /// Disable netpoll at run-time. + DISABLE_NETPOLL = bindings::netdev_priv_flags_IFF_DISABLE_NETPOLL, + /// Device used as macvlan port. + MACVLAN_PORT = bindings::netdev_priv_flags_IFF_MACVLAN_PORT, + /// Device used as bridge port. + BRIDGE_PORT = bindings::netdev_priv_flags_IFF_BRIDGE_PORT, + /// Device used as Open vSwitch datapath port. + OVS_DATAPATH = bindings::netdev_priv_flags_IFF_OVS_DATAPATH, + /// The interface supports sharing skbs on transmit. + TX_SKB_SHARING = bindings::netdev_priv_flags_IFF_TX_SKB_SHARING, + /// Supports unicast filtering. + UNICAST_FLT = bindings::netdev_priv_flags_IFF_UNICAST_FLT, + /// Device used as team port. + TEAM_PORT = bindings::netdev_priv_flags_IFF_TEAM_PORT, + /// Device supports sending custom FCS. + SUPP_NOFCS = bindings::netdev_priv_flags_IFF_SUPP_NOFCS, + /// Device supports hardware address change when it's running. + LIVE_ADDR_CHANGE = bindings::netdev_priv_flags_IFF_LIVE_ADDR_CHANGE, + /// Macvlan device. + MACVLAN = bindings::netdev_priv_flags_IFF_MACVLAN, + /// IFF_XMIT_DST_RELEASE not taking into account underlying stacked devices. + XMIT_DST_RELEASE_PERM = bindings::netdev_priv_flags_IFF_XMIT_DST_RELEASE_PERM, + /// Device is an L3 master device. + L3MDEV_MASTER = bindings::netdev_priv_flags_IFF_L3MDEV_MASTER, + /// Device can run without qdisc attached. + NO_QUEUE = bindings::netdev_priv_flags_IFF_NO_QUEUE, + /// Device is a Open vSwitch master. + OPENVSWITCH = bindings::netdev_priv_flags_IFF_OPENVSWITCH, + /// Device is enslaved to an L3 master device. + L3MDEV_SLAVE = bindings::netdev_priv_flags_IFF_L3MDEV_SLAVE, + /// Device is a team device. + TEAM = bindings::netdev_priv_flags_IFF_TEAM, + /// Device has had Rx Flow indirection table configured. + RXFH_CONFIGURED = bindings::netdev_priv_flags_IFF_RXFH_CONFIGURED, + /// The headroom value is controlled by an external entity (i.e. the master device for bridged veth). + PHONY_HEADROOM = bindings::netdev_priv_flags_IFF_PHONY_HEADROOM, + /// Device is a MACsec device. + MACSEC = bindings::netdev_priv_flags_IFF_MACSEC, + /// Device doesn't support the rx_handler hook. + NO_RX_HANDLER = bindings::netdev_priv_flags_IFF_NO_RX_HANDLER, + /// Device is a failover master device. + FAILOVER = bindings::netdev_priv_flags_IFF_FAILOVER, + /// Device is lower dev of a failover master device. + FAILOVER_SLAVE = bindings::netdev_priv_flags_IFF_FAILOVER_SLAVE, + /// Only invoke the rx handler of L3 master device. + L3MDEV_RX_HANDLER = bindings::netdev_priv_flags_IFF_L3MDEV_RX_HANDLER, + /// Rename is allowed while device is up and running. + LIVE_RENAME_OK = bindings::netdev_priv_flags_IFF_LIVE_RENAME_OK, +} diff --git a/rust/kernel/net/device/mod.rs b/rust/kernel/net/device/mod.rs new file mode 100644 index 00000000000000..de92c1524b72e7 --- /dev/null +++ b/rust/kernel/net/device/mod.rs @@ -0,0 +1,794 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Net Device Operations. +//! + +/// Flags. +mod flags; + +#[doc(inline)] +pub use flags::{Features, Flag, PrivFlag}; + +use core::{marker, mem, ptr}; + +use crate::bindings; +use crate::error::{Error, Result}; +use crate::from_kernel_result; +use crate::types::{SavedAsPointer, SavedAsPointerMut}; +use crate::{c_types, str::CStr}; + +use super::ethtool::EthToolOps; +use super::rtnl::{RtnlLinkStats64, RtnlLock}; +use super::skbuff::SkBuff; +use core::convert::TryFrom; + +extern "C" { + #[allow(improper_ctypes)] + fn rust_helper_netdev_priv(dev: *const bindings::net_device) -> *mut c_types::c_void; + + #[allow(improper_ctypes)] + fn rust_helper_eth_hw_addr_random(dev: *const bindings::net_device); + + #[allow(improper_ctypes)] + fn rust_helper_net_device_set_new_lstats(dev: *mut bindings::net_device) -> c_types::c_int; + + #[allow(improper_ctypes)] + fn rust_helper_dev_lstats_add(dev: *mut bindings::net_device, len: u32); +} + +/// interface name assignment types (sysfs name_assign_type attribute). +#[repr(u8)] +pub enum NetNameAssingType { + /// Unknown network name assing type. + Unknown = bindings::NET_NAME_UNKNOWN as u8, + /// Enum network name assing type. + Enum = bindings::NET_NAME_ENUM as u8, +} + +unsafe extern "C" fn setup_netdev_callback(dev: *mut bindings::net_device) { + let mut dev = unsafe { NetDevice::::from_pointer(dev) }; + + T::setup(&mut dev); +} + +/// Wraps the kernel's `struct net_device`. +/// +/// # Invariants +/// +/// The pointer `Self::ptr` is non-null and valid. +#[repr(transparent)] +pub struct NetDevice { + ptr: *mut bindings::net_device, + priv_data: marker::PhantomData, +} + +impl NetDevice { + /// Allocate and create a new NetDevice with private data T. + /// This function locks [`RtnlLock`]. + pub fn new( + priv_data: T, + format_name: &CStr, + name_assign_type: NetNameAssingType, + txqs: u32, + rxqs: u32, + ) -> Result { + let lock = RtnlLock::lock(); + // SAFETY: Lock is hold. + let dev = unsafe { Self::new_locked(priv_data, format_name, name_assign_type, txqs, rxqs) }; + + // make sure lock is hold until here + drop(lock); + dev + } + + /// Allocate and create a new NetDevice with private data T. + /// No lock is acquired by this function, therefore this function is unsafe. + /// + /// # Safety + /// + /// The caller has to hold the [`RtnlLock`]. + pub unsafe fn new_locked( + priv_data: T, + format_name: &CStr, + name_assign_type: NetNameAssingType, + txqs: u32, + rxqs: u32, + ) -> Result { + if txqs < 1 || rxqs < 1 { + return Err(Error::EINVAL); + } + let size = mem::size_of::() as i32; + + let ptr = unsafe { + bindings::alloc_netdev_mqs( + size, + format_name.as_ptr() as _, + name_assign_type as u8, + Some(setup_netdev_callback::), + txqs, + rxqs, + ) + }; + if ptr.is_null() { + return Err(Error::ENOMEM); + } + + if size != 0 { + unsafe { + let dest = rust_helper_netdev_priv(ptr) as *mut T; + ptr::write(dest, priv_data); + } + } + + Ok(Self { + ptr, + priv_data: marker::PhantomData::, + }) + } + + /// Return a reference to the private data of the [`NetDevice`]. + pub fn get_priv_data(&self) -> &T { + // SAFETY: self.ptr is valid if self is valid. + let priv_ptr = unsafe { rust_helper_netdev_priv(self.ptr) } as *mut T; + + // SAFETY: ptr is valid and of type T if self is valid. + unsafe { priv_ptr.as_ref() }.unwrap() + } + + /// Return a mutable reference of the private data of the [`NetDevice`] + pub fn get_priv_data_mut(&mut self) -> &mut T { + // SAFETY: self.ptr is valid if self is valid. + let priv_ptr = unsafe { rust_helper_netdev_priv(self.ptr) as *mut T }; + + // SAFETY: ptr is valid and of type T if self is valid. + unsafe { priv_ptr.as_mut().unwrap() } + } + + /// Setup Ethernet network device. + /// + /// Fill in the fields of the device structure with Ethernet-generic values. + pub fn ether_setup(&mut self) { + // SAFETY: self.ptr is valid if self is valid. + unsafe { bindings::ether_setup(self.ptr as *mut bindings::net_device) } + } + + /// Generate software assigned random Ethernet and set device flag. + /// + /// Generate a random Ethernet address (MAC) to be used by a net device + /// and set addr_assign_type so the state can be read by sysfs and be + /// used by userspace. + pub fn hw_addr_random(&mut self) { + // SAFETY: self.ptr is valid if self is valid. + unsafe { rust_helper_eth_hw_addr_random(self.ptr) }; + } + + /// Register a network device. + /// + /// Take a completed network device structure and add it to the kernel + /// interfaces. A %NETDEV_REGISTER message is sent to the netdev notifier + /// chain. + /// + /// This is a wrapper around register_netdevice that takes the rtnl semaphore + /// and expands the device name if you passed a format string to + /// alloc_netdev. + pub fn register(&self) -> Result { + // SAFETY: self.ptr is valid if self is valid. + // FIXME: where is the lock hold? + let err = unsafe { bindings::register_netdev(self.ptr) }; + + if err != 0 { + Err(Error::from_kernel_errno(err)) + } else { + Ok(()) + } + } + + /// Register a network device if the RtnlLock is already hold. + /// + /// Take a completed network device structure and add it to the kernel + /// interfaces. A %NETDEV_REGISTER message is sent to the netdev notifier + /// chain. 0 is returned on success. A negative errno code is returned + /// on a failure to set up the device, or if the name is a duplicate. + /// + /// Callers must hold the rtnl semaphore. You may want + /// [`Self::register`] instead of this. + /// + /// BUGS: + /// The locking appears insufficient to guarantee two parallel registers + /// will not get the same name. + /// + /// # Safety + /// + /// caller must hold the [`RtnlLock`] and semaphore + pub unsafe fn register_locked(&self) -> Result { + let err = unsafe { bindings::register_netdevice(self.ptr) }; + + if err != 0 { + Err(Error::from_kernel_errno(err)) + } else { + Ok(()) + } + } + + /// Set the rtnl_link_ops to a network interface. + /// + /// Takes a static mut created with [`crate::net::rtnl_link_ops!`] and assing it to [`self`]. + pub fn set_rtnl_ops(&mut self, ops: &'static super::rtnl::RtnlLinkOps) { + // get rtnl_lock + let lock = RtnlLock::lock(); + + // SAFETY: lock is hold + unsafe { self.set_rtnl_ops_locked(ops) } + + // make sure lock is still valid + drop(lock); + } + + /// Set the rtnl_link_ops to a network interface, while the caller holds the [`RtnlLock`]. + /// + /// Takes a static mut created with [`crate::net::rtnl_link_ops!`] and assing it to self. + /// + /// # Safety + /// + /// The caller has to hold the [`RtnlLock`]. + pub unsafe fn set_rtnl_ops_locked(&mut self, ops: &'static super::rtnl::RtnlLinkOps) { + let mut dev = self.get_internal_mut(); + + dev.rtnl_link_ops = ops.as_ptr() as *mut bindings::rtnl_link_ops; + } + + /// Add a [`Flag`] flag to the [`NetDevice`]. + pub fn add_flag(&mut self, flag: Flag) { + let mut dev = self.get_internal_mut(); + + dev.flags |= flag as u32; + } + + /// Remove a [`Flag`] flag from the [`NetDevice`]. + pub fn remove_flag(&mut self, flag: Flag) { + let mut dev = self.get_internal_mut(); + + dev.flags &= !(flag as u32); + } + + /// Add a [`PrivFlag`] private_flag to the [`NetDevice`]. + pub fn add_private_flag(&mut self, flag: PrivFlag) { + let mut dev = self.get_internal_mut(); + + dev.priv_flags |= flag as u32; + } + + /// Remove a [`PrivFlag`] private_flag from the [`NetDevice`]. + pub fn remove_private_flag(&mut self, flag: PrivFlag) { + let mut dev = self.get_internal_mut(); + + dev.priv_flags &= !(flag as u32); + } + + /// Set a [`Features`] `feature` set to the [`NetDevice`]. + pub fn set_features(&mut self, features: Features) { + let mut dev = self.get_internal_mut(); + + dev.features = features.into(); + } + + /// Get the [`Features`] `feature` set from the [`NetDevice`]. + pub fn get_features(&self) -> Result { + let dev = self.get_internal(); + + Features::try_from(dev.features) + } + + /// Set a [`Features`] `hw_feature` set to the [`NetDevice`]. + pub fn set_hw_features(&mut self, features: Features) { + let mut dev = self.get_internal_mut(); + + dev.hw_features = features.into(); + } + + /// Get the [`Features`] `hw_feature` set from the [`NetDevice`]. + pub fn get_hw_features(&self) -> Result { + let dev = self.get_internal(); + + Features::try_from(dev.hw_features) + } + + /// Set a [`Features`] `hw_enc_feature` set to the [`NetDevice`]. + pub fn set_hw_enc_features(&mut self, features: Features) { + let mut dev = self.get_internal_mut(); + + dev.hw_enc_features = features.into(); + } + + /// Get the [`Features`] `hw_enc_feature` set from the [`NetDevice`]. + pub fn get_hw_enc_features(&self) -> Result { + let dev = self.get_internal(); + + Features::try_from(dev.hw_enc_features) + } + + /// Set mut for the [`NetDevice`]. + pub fn set_mtu(&mut self, min: u32, max: u32) { + let mut dev = self.get_internal_mut(); + + dev.min_mtu = min; + dev.max_mtu = max; + } + + /// Create a new `pcpu_lstats` struct and assing it to the [`NetDevice`]. + // This is more or less a workaround, as I did not find a way to create a pcpu marco + // and assing some value to the anonymous union. + pub fn set_new_pcpu_lstats(&mut self) -> Result { + // SAFETY: calling c function + let ret = unsafe { rust_helper_net_device_set_new_lstats(self.ptr) }; + + if ret != 0 { + Err(Error::from_kernel_errno(ret)) + } else { + Ok(()) + } + } + + /// Free the lstats field. + /// # Safety + /// + /// Only call when the same device had set_new_pcpu_lstats called + pub unsafe fn free_lstats(&mut self) { + let net_device: &bindings::net_device = self.get_internal(); + + unsafe { + // SAFETY: self.ptr->lstats is valid if self is valid + let lstats = net_device.__bindgen_anon_1.lstats; + // SAFETY: calling C function + if !lstats.is_null() { + bindings::free_percpu(lstats as *mut _) + } + } + } + + /// Add a value the the internal lstats. + pub fn lstats_add(&mut self, len: u32) { + // SAFETY: calling c function + unsafe { + rust_helper_dev_lstats_add(self.ptr as *mut bindings::net_device, len); + } + } + + /// Set carrier. + pub fn carrier_set(&mut self, status: bool) { + // SAFETY: self.ptr is valid if self is valid. + if status { + unsafe { bindings::netif_carrier_on(self.ptr as *mut bindings::net_device) } + } else { + unsafe { bindings::netif_carrier_off(self.ptr as *mut bindings::net_device) } + } + } + + /// Set `netdev_ops` and `ethtool_ops` from the [`NetDeviceAdapter`] T to the [`NetDevice`]. + /// This also sets `needs_free_netdev` to true. + pub fn set_ops(&mut self) { + let internal = self.get_internal_mut(); + internal.needs_free_netdev = true; + // SAFETY: T is valid for this netdevice, so build is valid. + unsafe { + internal.netdev_ops = NetDeviceOperationsVtable::::build(); + internal.ethtool_ops = super::ethtool::EthToolOperationsVtable::::build(); + } + } +} + +unsafe impl Sync for NetDevice {} + +impl SavedAsPointer for NetDevice { + type InternalType = bindings::net_device; + + fn get_pointer(&self) -> *const Self::InternalType { + self.ptr as *const Self::InternalType + } + + unsafe fn from_pointer(ptr: *const Self::InternalType) -> Self { + Self { + ptr: ptr as *mut Self::InternalType, + priv_data: marker::PhantomData::, + } + } +} + +impl SavedAsPointerMut for NetDevice { + fn get_pointer_mut(&mut self) -> *mut Self::InternalType { + self.ptr + } + + unsafe fn from_pointer_mut(ptr: *mut Self::InternalType) -> Self { + Self { + ptr, + priv_data: marker::PhantomData::, + } + } +} + +/// Trait holding the type of the NetDevice, and implementing the setup function. +pub trait NetDeviceAdapter: Sized { + /// Type of the Inner Private data field + type Inner: Sized; // = Self + + /// Type ipmlementing all functions used for [`NetDeviceOps`]. + type Ops: NetDeviceOps; + + /// Type implementing all functions used for [`EthToolOps`]. + type EthOps: EthToolOps; + + /// Callback to initialize the device + /// Function tables have to be assinged via [`NetDevice::set_ops`] + fn setup(dev: &mut NetDevice); +} + +#[repr(i32)] +#[allow(non_camel_case_types)] +/// Maps to [`bindings::netdev_tx`] from the kernel. +pub enum NetdevTX { + /// TX_OK + TX_OK = bindings::netdev_tx_NETDEV_TX_OK, + /// TX_BUSY + TX_BUSY = bindings::netdev_tx_NETDEV_TX_BUSY, +} + +unsafe extern "C" fn ndo_init_callback( + dev: *mut bindings::net_device, +) -> c_types::c_int { + from_kernel_result! { + T::Ops::init( + unsafe { &mut NetDevice::::from_pointer_mut(dev) } + )?; + Ok(0) + } +} + +unsafe extern "C" fn ndo_uninit_callback(dev: *mut bindings::net_device) { + // SAFETY: pointer is valid as it comes form C + T::Ops::uninit(unsafe { &mut NetDevice::::from_pointer_mut(dev) }); +} + +unsafe extern "C" fn ndo_start_xmit_callback( + skb: *mut bindings::sk_buff, + dev: *mut bindings::net_device, +) -> bindings::netdev_tx_t { + T::Ops::start_xmit(unsafe { SkBuff::from_pointer(skb) }, unsafe { + &mut NetDevice::from_pointer_mut(dev) + }) as bindings::netdev_tx_t +} + +unsafe extern "C" fn ndo_get_stats64_callback( + dev: *mut bindings::net_device, + stats: *mut bindings::rtnl_link_stats64, +) { + T::Ops::get_stats64( + unsafe { &mut NetDevice::::from_pointer_mut(dev) }, + unsafe { &mut RtnlLinkStats64::from_pointer(stats) }, + ); +} + +unsafe extern "C" fn ndo_change_carrier_callback( + dev: *mut bindings::net_device, + change_carrier: bool, +) -> c_types::c_int { + from_kernel_result! { + T::Ops::change_carrier( + unsafe { &mut NetDevice::::from_pointer_mut(dev) }, + change_carrier + )?; + Ok(0) + } +} + +unsafe extern "C" fn ndo_validate_addr_callback( + dev: *mut bindings::net_device, +) -> c_types::c_int { + from_kernel_result! { + T::Ops::validate_addr( + unsafe { &mut NetDevice::::from_pointer_mut(dev) } + )?; + Ok(0) + } +} + +unsafe extern "C" fn ndo_set_mac_address_callback( + dev: *mut bindings::net_device, + p: *mut c_types::c_void, +) -> c_types::c_int { + from_kernel_result! { + T::Ops::set_mac_addr( + unsafe { &mut NetDevice::::from_pointer_mut(dev) }, + p + )?; + Ok(0) + } +} + +unsafe extern "C" fn ndo_set_rx_mode_callback(dev: *mut bindings::net_device) { + T::Ops::set_rx_mode(unsafe { &mut NetDevice::::from_pointer_mut(dev) }) +} + +pub(crate) struct NetDeviceOperationsVtable(marker::PhantomData); + +impl NetDeviceOperationsVtable { + const VTABLE: bindings::net_device_ops = bindings::net_device_ops { + ndo_init: Some(ndo_init_callback::), + ndo_uninit: Some(ndo_uninit_callback::), + ndo_open: None, + ndo_stop: None, + ndo_start_xmit: Some(ndo_start_xmit_callback::), + ndo_features_check: None, + ndo_select_queue: None, + ndo_change_rx_flags: None, + ndo_set_rx_mode: if T::Ops::TO_USE.set_rx_mode { + Some(ndo_set_rx_mode_callback::) + } else { + None + }, + ndo_set_mac_address: if T::Ops::TO_USE.set_mac_addr { + Some(ndo_set_mac_address_callback::) + } else { + None + }, + ndo_validate_addr: if T::Ops::TO_USE.validate_addr { + Some(ndo_validate_addr_callback::) + } else { + None + }, + ndo_do_ioctl: None, + ndo_set_config: None, + ndo_change_mtu: None, + ndo_neigh_setup: None, + ndo_tx_timeout: None, + ndo_get_stats64: if T::Ops::TO_USE.get_stats64 { + Some(ndo_get_stats64_callback::) + } else { + None + }, + ndo_has_offload_stats: None, + ndo_get_offload_stats: None, + ndo_get_stats: None, + ndo_vlan_rx_add_vid: None, + ndo_vlan_rx_kill_vid: None, + + #[cfg(CONFIG_NET_POLL_CONTROLLER)] + ndo_poll_controller: None, + #[cfg(CONFIG_NET_POLL_CONTROLLER)] + ndo_netpoll_setup: None, + #[cfg(CONFIG_NET_POLL_CONTROLLER)] + ndo_netpoll_cleanup: None, + + ndo_set_vf_mac: None, + ndo_set_vf_vlan: None, + ndo_set_vf_rate: None, + ndo_set_vf_spoofchk: None, + ndo_set_vf_trust: None, + ndo_get_vf_config: None, + ndo_set_vf_link_state: None, + ndo_get_vf_stats: None, + ndo_set_vf_port: None, + ndo_get_vf_port: None, + ndo_get_vf_guid: None, + ndo_set_vf_guid: None, + ndo_set_vf_rss_query_en: None, + ndo_setup_tc: None, + + #[cfg(any(CONFIG_FCOE = "y", CONFIG_FCOE = "m"))] + ndo_fcoe_enable: None, + #[cfg(any(CONFIG_FCOE = "y", CONFIG_FCOE = "m"))] + ndo_fcoe_disable: None, + #[cfg(any(CONFIG_FCOE = "y", CONFIG_FCOE = "m"))] + ndo_fcoe_ddp_setup: None, + #[cfg(any(CONFIG_FCOE = "y", CONFIG_FCOE = "m"))] + ndo_fcoe_ddp_done: None, + #[cfg(any(CONFIG_FCOE = "y", CONFIG_FCOE = "m"))] + ndo_fcoe_ddp_target: None, + #[cfg(any(CONFIG_FCOE = "y", CONFIG_FCOE = "m"))] + ndo_fcoe_get_hbainfo: None, + + #[cfg(any(CONFIG_LIBFCOE = "y", CONFIG_LIBFCOE = "m"))] + ndo_fcoe_get_wwn: None, + + #[cfg(CONFIG_RFS_ACCEL)] + ndo_rx_flow_steer: None, + + ndo_add_slave: None, + ndo_del_slave: None, + ndo_get_xmit_slave: None, + ndo_sk_get_lower_dev: None, + ndo_fix_features: None, + ndo_set_features: None, + ndo_neigh_construct: None, + ndo_neigh_destroy: None, + ndo_fdb_add: None, + ndo_fdb_del: None, + ndo_fdb_dump: None, + ndo_fdb_get: None, + ndo_bridge_setlink: None, + ndo_bridge_getlink: None, + ndo_bridge_dellink: None, + ndo_change_carrier: if T::Ops::TO_USE.change_carrier { + Some(ndo_change_carrier_callback::) + } else { + None + }, + ndo_get_phys_port_id: None, + ndo_get_port_parent_id: None, + ndo_get_phys_port_name: None, + ndo_dfwd_add_station: None, + ndo_dfwd_del_station: None, + ndo_set_tx_maxrate: None, + ndo_get_iflink: None, + ndo_change_proto_down: None, + ndo_fill_metadata_dst: None, + ndo_set_rx_headroom: None, + ndo_bpf: None, + ndo_xdp_xmit: None, + ndo_xsk_wakeup: None, + ndo_get_devlink_port: None, + ndo_tunnel_ctl: None, + ndo_get_peer_dev: None, + ndo_fill_forward_path: None, + }; + + /// Builds an instance of [`struct net_device_ops`]. + /// + /// # Safety + /// + /// The caller must ensure that the adapter is compatible with the way the device is registered. + pub(crate) const unsafe fn build() -> &'static bindings::net_device_ops { + &Self::VTABLE + } +} + +/// Represents which fields of [`struct net_device_ops`] should pe populated with pointers for the trait [`NetDeviceOps`]. +pub struct ToUse { + /// Trait defines a `ndo_change_carrier` function. + pub change_carrier: bool, + + /// Trait defines a `ndo_get_stats64` function. + pub get_stats64: bool, + + /// Trait defines a `ndo_validate_addr` function. + pub validate_addr: bool, + + /// Trait defines a `ndo_set_mac_addr` function. + pub set_mac_addr: bool, + + /// Trait defines a `ndo_set_rx_mode` function. + pub set_rx_mode: bool, +} + +/// This trait does not include any functions exept [`init`] and [`uninit`]. +#[doc(hidden)] +pub const USE_NONE: ToUse = ToUse { + change_carrier: false, + get_stats64: false, + validate_addr: false, + set_mac_addr: false, + set_rx_mode: false, +}; + +/// Defines the [`NetDeviceOps::TO_USE`] field based on a list of fields to be populated. +#[macro_export] +macro_rules! declare_net_device_ops { + () => { + const TO_USE: $crate::net::device::ToUse = $crate::net::device::USE_NONE; + }; + ($($i:ident),+) => { + #[allow(clippy::needless_update)] + const TO_USE: kernel::net::device::ToUse = + $crate::net::device::ToUse { + $($i: true),+ , + ..$crate::net::device::USE_NONE + }; + }; +} + +/// Corresponds to the kernel's `struct net_device_ops`. +/// +/// You Implement this trait whenever you would create a `struct net_device_ops`. +pub trait NetDeviceOps: Send + Sync + Sized { + /// The methods to use to populate [`struct net_device_ops`]. + const TO_USE: ToUse; + + /// This function is called once when a network device is registered. + /// The network device can use this for any late stage initialization + /// or semantic validation. It can fail with an error code which will + /// be propagated back to register_netdev. + fn init(dev: &mut NetDevice) -> Result; + + /// This function is called when device is unregistered or when registration + /// fails. It is not called if init fails. + fn uninit(dev: &mut NetDevice); + + /// Called when a packet needs to be transmitted. + /// `Ok(())` returns NETDEV_TX_OK, Error maps to `NETDEV_TX_BUSY` + /// Returns NETDEV_TX_OK. Can return NETDEV_TX_BUSY, but you should stop + /// the queue before that can happen; it's for obsolete devices and weird + /// corner cases, but the stack really does a non-trivial amount + /// of useless work if you return NETDEV_TX_BUSY. + #[allow(unused_variables)] + fn start_xmit(skb: SkBuff, dev: &mut NetDevice) -> NetdevTX { + NetdevTX::TX_OK + } + + /// Called when a user wants to get the network device usage + /// statistics. + /// + /// Must fill in a zero-initialised [`RtnlLinkStats64`] structure + /// passed by the caller. + #[allow(unused_variables)] + fn get_stats64(dev: &mut NetDevice, stats: &mut RtnlLinkStats64) {} + + /// Called to change device carrier. Soft-devices (like dummy, team, etc) + /// which do not represent real hardware may define this to allow their + /// userspace components to manage their virtual carrier state. Devices + /// that determine carrier state from physical hardware properties (eg + /// network cables) or protocol-dependent mechanisms (eg + /// USB_CDC_NOTIFY_NETWORK_CONNECTION) should NOT implement this function, and + /// therefor NOT set [`TO_USE.change_carrier`]. + #[allow(unused_variables)] + fn change_carrier(dev: &mut NetDevice, new_carrier: bool) -> Result { + Err(Error::EINVAL) + } + + /// Test if Media Access Control address is valid for the device. + #[allow(unused_variables)] + fn validate_addr(dev: &mut NetDevice) -> Result { + Err(Error::EINVAL) + } + + /// This function is called when the Media Access Control address + /// needs to be changed. If this interface is not defined, the + /// MAC address can not be changed. + #[allow(unused_variables)] + fn set_mac_addr(dev: &mut NetDevice, p: *mut c_types::c_void) -> Result { + Err(Error::EINVAL) + } + + /// This function is called device changes address list filtering. + /// If driver handles unicast address filtering, it should set + /// IFF_UNICAST_FLT in its priv_flags. + #[allow(unused_variables)] + fn set_rx_mode(dev: &mut NetDevice) {} +} + +/// Helper functions for NetDevices. +pub mod helpers { + use super::*; + + /// Validate the eth addres for the [`NetDevice`] `dev`. + pub fn eth_validate_addr(dev: &mut NetDevice) -> Result { + // SAFETY: Calling a C function. + let ret = unsafe { bindings::eth_validate_addr(dev.get_pointer_mut()) }; + if ret != 0 { + Err(Error::from_kernel_errno(ret)) + } else { + Ok(()) + } + } + + /// Set new Ethernet hardware address. + /// + /// This doesn't change hardware matching, so needs to be overridden + /// for most real devices. + /// + /// # Safety + /// + /// `socket_addr` has to be a valid socket address pointer. + pub unsafe fn eth_mac_addr( + dev: &mut NetDevice, + socket_addr: *mut c_types::c_void, + ) -> Result { + // SAFETY: Calling a C function . + let ret = unsafe { bindings::eth_mac_addr(dev.get_pointer_mut(), socket_addr) }; + + if ret != 0 { + Err(Error::from_kernel_errno(ret)) + } else { + Ok(()) + } + } +} diff --git a/rust/kernel/net/ethtool.rs b/rust/kernel/net/ethtool.rs new file mode 100644 index 00000000000000..1214a8768039aa --- /dev/null +++ b/rust/kernel/net/ethtool.rs @@ -0,0 +1,246 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Ethtool Operations. + +use core::marker; + +use crate::error::{Error, Result}; +use crate::types::{SavedAsPointer, SavedAsPointerMut}; +use crate::{bindings, c_types, from_kernel_result}; + +use super::device::{NetDevice, NetDeviceAdapter}; + +unsafe extern "C" fn get_drvinfo_callback( + dev: *mut bindings::net_device, + info: *mut bindings::ethtool_drvinfo, +) { + T::EthOps::get_drvinfo( + unsafe { &mut NetDevice::::from_pointer_mut(dev) }, + unsafe { &mut EthtoolDrvinfo::from_pointer(info) }, + ); +} + +unsafe extern "C" fn get_ts_info_callback( + dev: *mut bindings::net_device, + info: *mut bindings::ethtool_ts_info, +) -> c_types::c_int { + from_kernel_result! { + T::EthOps::get_ts_info( + // SAFETY: dev is valid, as this is a callback + unsafe { &mut NetDevice::::from_pointer_mut(dev) }, + // SAFETY: info is valid, as this is a callback + unsafe { &mut EthToolTsInfo::from_pointer(info) } + )?; + Ok(0) + } +} + +pub(crate) struct EthToolOperationsVtable(marker::PhantomData); + +impl EthToolOperationsVtable { + const VTABLE: bindings::ethtool_ops = bindings::ethtool_ops { + _bitfield_1: bindings::__BindgenBitfieldUnit::<[u8; 1usize], u8>::new([0u8; 1usize]), + + supported_coalesce_params: 0, + get_drvinfo: if T::EthOps::TO_USE.get_drvinfo { + Some(get_drvinfo_callback::) + } else { + None + }, + get_regs_len: None, + get_regs: None, + get_wol: None, + set_wol: None, + get_msglevel: None, + set_msglevel: None, + nway_reset: None, + get_link: None, + get_link_ext_state: None, + get_eeprom_len: None, + get_eeprom: None, + set_eeprom: None, + get_coalesce: None, + set_coalesce: None, + get_ringparam: None, + set_ringparam: None, + get_pause_stats: None, + get_pauseparam: None, + set_pauseparam: None, + self_test: None, + get_strings: None, + set_phys_id: None, + get_ethtool_stats: None, + begin: None, + complete: None, + get_priv_flags: None, + set_priv_flags: None, + get_sset_count: None, + get_rxnfc: None, + set_rxnfc: None, + flash_device: None, + reset: None, + get_rxfh_key_size: None, + get_rxfh_indir_size: None, + get_rxfh: None, + set_rxfh: None, + get_rxfh_context: None, + set_rxfh_context: None, + get_channels: None, + set_channels: None, + get_dump_flag: None, + get_dump_data: None, + set_dump: None, + get_ts_info: if T::EthOps::TO_USE.get_ts_info { + Some(get_ts_info_callback::) + } else { + None + }, + get_module_info: None, + get_module_eeprom: None, + get_eee: None, + set_eee: None, + get_tunable: None, + set_tunable: None, + get_per_queue_coalesce: None, + set_per_queue_coalesce: None, + get_link_ksettings: None, + set_link_ksettings: None, + get_fec_stats: None, + get_fecparam: None, + set_fecparam: None, + get_ethtool_phy_stats: None, + get_phy_tunable: None, + set_phy_tunable: None, + get_module_eeprom_by_page: None, + get_eth_phy_stats: None, + get_eth_mac_stats: None, + get_eth_ctrl_stats: None, + get_rmon_stats: None, + }; + + /// Builds an instance of [`struct ethtool_ops`]. + /// + /// # Safety + /// + /// The caller must ensure that the adapter is compatible with the way the device is registered. + pub(crate) const unsafe fn build() -> &'static bindings::ethtool_ops { + &Self::VTABLE + } +} + +/// Represents which fields of [`struct ethtool_ops`] should be populated with pointers for the trait [`EthToolOps`] +pub struct EthToolToUse { + /// Trait defines a `get_drvinfo` function. + pub get_drvinfo: bool, + + /// Trait defines a `get_ts_info` function. + pub get_ts_info: bool, +} + +/// This trait does not include any functions. +#[doc(hidden)] +pub const ETH_TOOL_USE_NONE: EthToolToUse = EthToolToUse { + get_drvinfo: false, + get_ts_info: false, +}; + +/// Defines the [`EthToolOps::TO_USE`] field based on a list of fields to be populated. +#[macro_export] +macro_rules! declare_eth_tool_ops { + () => { + const TO_USE: $crate::net::ethtool::EthToolToUse = $crate::net::ethtool::ETH_TOOL_USE_NONE; + }; + ($($i:ident),+) => { + #[allow(clippy::needless_update)] + const TO_USE: kernel::net::ethtool::EthToolToUse = + $crate::net::ethtool::EthToolToUse { + $($i: true),+ , + ..$crate::net::ethtool::ETH_TOOL_USE_NONE + }; + }; +} + +/// Operations table needed for ethtool. +/// [`Self::TO_USE`] defines which functions are implemented by this type. +pub trait EthToolOps: Send + Sync + Sized { + /// Struct [`EthToolToUse`] which signals which function are ipmlemeted by this type. + const TO_USE: EthToolToUse; + + /// Report driver/device information. Should only set the + /// @driver, @version, @fw_version and @bus_info fields. If not + /// implemented, the @driver and @bus_info fields will be filled in + /// according to the netdev's parent device. + #[allow(unused_variables)] + fn get_drvinfo(dev: &mut NetDevice, info: &mut EthtoolDrvinfo) {} + + /// Get the time stamping and PTP hardware clock capabilities. + /// Drivers supporting transmit time stamps in software should set this to + /// [`helpers::ethtool_op_get_ts_info`]. + #[allow(unused_variables)] + fn get_ts_info(dev: &mut NetDevice, info: &mut EthToolTsInfo) -> Result { + Err(Error::EINVAL) + } +} + +/// Wrappes the [`bindings::ethtool_ts_info`] struct. +#[repr(transparent)] +pub struct EthToolTsInfo { + ptr: *const bindings::ethtool_ts_info, +} + +impl SavedAsPointer for EthToolTsInfo { + type InternalType = bindings::ethtool_ts_info; + + fn get_pointer(&self) -> *const Self::InternalType { + self.ptr + } + + unsafe fn from_pointer(ptr: *const Self::InternalType) -> Self { + Self { ptr } + } +} + +impl SavedAsPointerMut for EthToolTsInfo { + unsafe fn from_pointer_mut(ptr: *mut Self::InternalType) -> Self { + unsafe { Self::from_pointer(ptr as *const Self::InternalType) } + } +} + +/// Wrappes the [`bindings::ethtool_drvinfo`] struct. +pub struct EthtoolDrvinfo { + ptr: *const bindings::ethtool_drvinfo, +} + +impl SavedAsPointer for EthtoolDrvinfo { + type InternalType = bindings::ethtool_drvinfo; + + fn get_pointer(&self) -> *const Self::InternalType { + self.ptr + } + + unsafe fn from_pointer(ptr: *const Self::InternalType) -> Self { + Self { ptr } + } +} + +impl SavedAsPointerMut for EthtoolDrvinfo { + unsafe fn from_pointer_mut(ptr: *mut Self::InternalType) -> Self { + unsafe { Self::from_pointer(ptr as *const Self::InternalType) } + } +} + +/// Helper functions for ethtool. +pub mod helpers { + use super::*; + + /// Get ts info for the device `dev`. + pub fn ethtool_op_get_ts_info( + dev: &mut NetDevice, + info: &mut EthToolTsInfo, + ) -> Result { + // SAFETY: info.ptr is valid if info is valid + // SAFETY: Calling C function + unsafe { bindings::ethtool_op_get_ts_info(dev.get_pointer_mut(), info.get_pointer_mut()) }; + Ok(()) + } +} diff --git a/rust/kernel/net/mod.rs b/rust/kernel/net/mod.rs new file mode 100644 index 00000000000000..f55944a5e03988 --- /dev/null +++ b/rust/kernel/net/mod.rs @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Network subsystem in rust for linux kernel. + +use core::mem; + +pub mod device; +pub mod ethtool; +pub mod netlink; +pub mod rtnl; +pub mod skbuff; + +#[doc(inline)] +pub use macros::rtnl_link_ops; + +/// Determine if the Ethernet address is a multicast. +/// +/// Return true if the address is a multicast address. +/// By definition the broadcast address is also a multicast address. +/// +/// # Parameters +/// - `addr`: Pointer to a six-byte array containing the Ethernet address +/// +/// # Safety +/// `addr` has to be a valid address pointer +#[cfg(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)] +pub unsafe fn is_multicast_ether_addr(addr: *const u8) -> bool { + // SAFETY: addr is a valid address pointer as above required, and has efficient unaligned access as KCONFIG stats + let a: u32 = unsafe { core::ptr::read_unaligned(addr as *const u32) }; + + if cfg!(target_endian = "big") { + (0x01 & (a >> (((mem::size_of::() as u32) * 8) - 8))) != 0 + } else { + (0x01 & a) != 0 + } +} + +/// Determine if the Ethernet address is a multicast. +/// +/// Return true if the address is a multicast address. +/// By definition the broadcast address is also a multicast address. +/// +/// # Parameters +/// - `addr`: Pointer to a six-byte array containing the Ethernet address +/// +/// # Safety +/// `addr` has to be a valid address pointer +#[cfg(not(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))] +pub unsafe fn is_multicast_ether_addr(addr: *const u8) -> bool { + let a: u16 = unsafe { *(addr as *const u16) }; + + if cfg!(target_endian = "big") { + (0x01 & (a >> (((mem::size_of::() as u16) * 8) - 8))) != 0 + } else { + (0x01 & a) != 0 + } +} + +/// Determine if give Ethernet address is all zeros. +/// Return true if the address is all zeroes. +/// +/// # Parameters +/// - `addr`: Pointer to a six-byte array containing the Ethernet address +/// +/// # Safety +/// `addr` must point to a valid ethernet address and is 16-bit aligned +#[cfg(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)] +pub unsafe fn is_zero_ether_addr(addr: *const u8) -> bool { + // SAFETY: addr points to a valid ethernet address and is 16-bit aligned as required above. + unsafe { *(addr.cast::()) | *(addr.add(4).cast::()) as u32 == 0 } +} + +/// +/// # Parameters +/// - `addr`: Pointer to a six-byte array containing the Ethernet address +/// +/// # Safety +/// Please note: addr must be aligned to u16. +#[cfg(not(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS))] +pub unsafe fn is_zero_ether_addr(addr: *const u8) -> bool { + unsafe { *(addr as *const [u16; 3]) == [0; 3] } +} + +/// is_valid_ether_addr - Determine if the given Ethernet address is valid. +/// Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not +/// a multicast address, and is not FF:FF:FF:FF:FF:FF. +/// +/// Return true if the address is valid. +/// +/// # Parameters +/// - `addr`: Pointer to a six-byte array containing the Ethernet address +/// +/// # Safety +/// Please note: addr must be aligned to u16. +pub unsafe fn is_valid_ether_addr(addr: *const u8) -> bool { + // SAFETY: function already unsafe + unsafe { !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr) } +} + +/// Prelude for all net related imports. +pub mod prelude { + pub use super::rtnl_link_ops; + pub use super::{ + device::{NetDevice, NetDeviceAdapter, NetDeviceOps}, + ethtool::{self, EthToolOps}, + rtnl::{RtnlLinkOps, RtnlLock}, + skbuff::SkBuff, + }; +} diff --git a/rust/kernel/net/netlink.rs b/rust/kernel/net/netlink.rs new file mode 100644 index 00000000000000..7846abf149652b --- /dev/null +++ b/rust/kernel/net/netlink.rs @@ -0,0 +1,128 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Netlink helpers. + +use crate::bindings; +use crate::types::SavedAsPointer; + +/// Octets in one ethernet addr +pub const ETH_ALEN: u16 = bindings::ETH_ALEN as u16; + +const NLA_HDRLEN: i32 = bindings::BINDINGS_NLA_HDRLEN; +/// Max Position for NlAttrVec. +pub const __IFLA_MAX: usize = bindings::__IFLA_MAX as usize; + +/// Wrapper for the kernels [`bindings::nlattr`] type. +#[repr(transparent)] +pub struct NlAttr { + ptr: *const bindings::nlattr, +} + +impl NlAttr { + /// Check If the netlink is 0, This can happen in [`NlAttrVec`] structs. + pub fn is_null(&self) -> bool { + self.ptr.is_null() + } + + /// Return the length of the nla data. + /// Returns None if [`Self::is_null`] is true. + pub fn nla_len(&self) -> Option { + if self.is_null() { + return None; + } + + // NO-PANIC: self is valid and not null. + // SAFETY: ptr is valid if self is valid. + Some(self.get_internal().nla_len - NLA_HDRLEN as u16) + } + + /// Get a pointer to the data inside the nla package. + /// + /// # Safety + /// ptr is valid, but could be NULL + pub unsafe fn data(&self) -> *const i8 { + ((self.ptr as usize) + NLA_HDRLEN as usize) as *const i8 + } + + /// Check if address inside the data is valid. + pub fn is_valid_ether_addr(&self) -> bool { + // SAFETY: self.ptr is valid if self is valid. + unsafe { + let data = self.data() as *const u8; + super::is_valid_ether_addr(data) + } + } + + /// Return a owned version of Self. + /// The pointer inside of [`Self::get_pointer`] still shows onto the same data. + unsafe fn clone(&self) -> Self { + Self { ptr: self.ptr } + } +} + +impl SavedAsPointer for NlAttr { + type InternalType = bindings::nlattr; + + fn get_pointer(&self) -> *const Self::InternalType { + self.ptr + } + + unsafe fn from_pointer(ptr: *const Self::InternalType) -> Self { + Self { ptr } + } +} + +/// Wrapper for the kernels [`bindings::netlink_ext_ack`] stuct. +#[repr(transparent)] +pub struct NlExtAck { + ptr: *const bindings::netlink_ext_ack, +} + +impl SavedAsPointer for NlExtAck { + type InternalType = bindings::netlink_ext_ack; + + fn get_pointer(&self) -> *const Self::InternalType { + self.ptr + } + + unsafe fn from_pointer(ptr: *const Self::InternalType) -> Self { + Self { ptr } + } +} + +/// Wrapper for a list of [`NlAttr`] with size [`__IFLA_MAX`]. +#[repr(transparent)] +pub struct NlAttrVec { + ptr: *const *const bindings::nlattr, +} + +impl NlAttrVec { + /// Get The [`NlAttr`] from position `offset`. + /// + /// Returns None if `offset` is bigger than [`__IFLA_MAX`]. + pub fn get(&self, offset: u32) -> Option { + if offset > __IFLA_MAX as u32 { + return None; + } + + let vec = unsafe { &*(self.ptr as *const [NlAttr; __IFLA_MAX]) }; + let nlattr = &vec[offset as usize]; + if nlattr.is_null() { + None + } else { + Some(unsafe { nlattr.clone() }) + } + } +} + +impl SavedAsPointer for NlAttrVec { + type InternalType = *const bindings::nlattr; + + fn get_pointer(&self) -> *const Self::InternalType { + self.ptr + } + + unsafe fn from_pointer(ptr: *const Self::InternalType) -> Self { + Self { ptr } + } +} diff --git a/rust/kernel/net/rtnl.rs b/rust/kernel/net/rtnl.rs new file mode 100644 index 00000000000000..566f546bc1cdde --- /dev/null +++ b/rust/kernel/net/rtnl.rs @@ -0,0 +1,149 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Rtnl Link Operations. + +use core::ptr; + +use crate::bindings; +use crate::error::{Error, Result}; + +use super::device::{NetDevice, NetDeviceAdapter}; + +use crate::types::{SavedAsPointer, SavedAsPointerMut}; + +// TODO: inner bool, to allow other unlock mechanism? +/// Lock, acquired via [`bindings::rtnl_lock`]. +#[must_use = "the rtnl unlocks immediately when the guard is unused"] +pub struct RtnlLock { + _private: (), +} + +impl RtnlLock { + /// Creat a new lock via [`bindings::rtnl_lock`]. + pub fn lock() -> Self { + // SAFETY: C function without parameters + unsafe { bindings::rtnl_lock() }; + + Self { _private: () } + } +} + +impl Drop for RtnlLock { + fn drop(&mut self) { + // SAFETY: C function without parameters + unsafe { bindings::rtnl_unlock() }; + } +} + +#[doc(hidden)] +/// Empty [`bindings::rtnl_link_ops`] table. +pub const RTNL_LINK_OPS_EMPTY: bindings::rtnl_link_ops = bindings::rtnl_link_ops { + list: bindings::list_head { + next: ptr::null::() as *mut bindings::list_head, + prev: ptr::null::() as *mut bindings::list_head, + }, + kind: ptr::null::(), + priv_size: 0, + setup: None, + netns_refund: false, + maxtype: 0, + policy: ptr::null::(), + validate: None, + newlink: None, + changelink: None, + dellink: None, + get_size: None, + fill_info: None, + get_xstats_size: None, + fill_xstats: None, + get_num_tx_queues: None, + get_num_rx_queues: None, + slave_maxtype: 0, + slave_policy: ptr::null::(), + slave_changelink: None, + get_slave_size: None, + fill_slave_info: None, + get_link_net: None, + get_linkxstats_size: None, + fill_linkxstats: None, +}; + +/// Transparent wrapper for [`bindings::rtnl_link_ops`] for the macro [`crate::net::rtnl_link_ops`]. +#[repr(transparent)] +pub struct RtnlLinkOps(bindings::rtnl_link_ops); + +unsafe impl Sync for RtnlLinkOps {} + +impl RtnlLinkOps { + /// Register this op table with kernel. + pub fn register(&self) -> Result { + let ptr = self.as_ptr(); + + // SAFETY: Calling C function + let ret = unsafe { bindings::rtnl_link_register(ptr as *mut bindings::rtnl_link_ops) }; + + if ret != 0 { + Err(Error::from_kernel_errno(ret)) + } else { + Ok(()) + } + } + + /// Get a pointer to this struct. + pub fn as_ptr(&self) -> *const bindings::rtnl_link_ops { + &self.0 as *const _ as *const bindings::rtnl_link_ops + } + + /// Deregister the op table from the kernel. + pub fn unregister(&self) { + let ptr = self.as_ptr() as *mut bindings::rtnl_link_ops; + + // SAFETY: ptr is valid if self is valid + unsafe { bindings::rtnl_link_unregister(ptr) }; + } + + #[doc(hidden)] + /// Create an new unchecked version needed for the [`crate::net::rtnl_link_ops`] macro. + pub const fn new_from_inner(inner: bindings::rtnl_link_ops) -> Self { + Self(inner) + } +} + +/// Wrapper for a kernel [`bindings::rtnl_link_stats64`]. +#[repr(transparent)] +pub struct RtnlLinkStats64 { + ptr: *const bindings::rtnl_link_stats64, +} + +impl RtnlLinkStats64 { + /// Read the lstats from the [`NetDevice`] `dev` to [`Self`]. + pub fn dev_read(&mut self, dev: &mut NetDevice) { + let stats = self.get_internal_mut(); + // SAFETY: call to C function + unsafe { + bindings::dev_lstats_read( + dev.get_pointer_mut(), + &mut stats.tx_packets as *mut u64, + &mut stats.tx_bytes as *mut u64, + ); + } + } +} + +impl SavedAsPointer for RtnlLinkStats64 { + type InternalType = bindings::rtnl_link_stats64; + + fn get_pointer(&self) -> *const Self::InternalType { + self.ptr + } + + unsafe fn from_pointer(ptr: *const Self::InternalType) -> Self { + Self { ptr } + } +} + +impl SavedAsPointerMut for RtnlLinkStats64 { + unsafe fn from_pointer_mut(ptr: *mut Self::InternalType) -> Self { + unsafe { Self::from_pointer(ptr as *const Self::InternalType) } + } +} diff --git a/rust/kernel/net/skbuff.rs b/rust/kernel/net/skbuff.rs new file mode 100644 index 00000000000000..dd106f5a9db71e --- /dev/null +++ b/rust/kernel/net/skbuff.rs @@ -0,0 +1,149 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Definitors for the struct [`crate::bindings::sk_buff`] memory handlers. + +use core::{ops::Drop, ptr}; + +use crate::bindings; +use crate::types::SavedAsPointer; + +/// Wraps the kernel's `struct sk_buff`. +/// +/// # Invariants +/// +/// The pointer `Self::ptr` is non-null and valid. +#[repr(transparent)] +pub struct SkBuff { + ptr: *const bindings::sk_buff, +} + +impl SkBuff { + /// Binding to `bindings::skb_clone_tx_timestamp`. + /// + /// Noop if `CONFIG_NETWORK_PHY_TIMESTAMPING` is not enabled. + #[cfg(CONFIG_NETWORK_PHY_TIMESTAMPING)] + pub fn clone_tx_timestamp(&mut self) { + // SAFETY: self.ptr is valid if self is valid. + unsafe { + bindings::skb_clone_tx_timestamp(self.ptr as *mut bindings::sk_buff); + } + } + + /// Binding to `bindings::skb_clone_tx_timestamp`. + /// + /// Noop if `CONFIG_NETWORK_PHY_TIMESTAMPING` is not enabled. + #[cfg(not(CONFIG_NETWORK_PHY_TIMESTAMPING))] + pub fn clone_tx_timestamp(&mut self) { + // NOOP + } + + /// Driver hook for transmit timestamping. + /// + /// Ethernet MAC Drivers should call this function in their hard_xmit() + /// function immediately before giving the sk_buff to the MAC hardware. + /// + /// Specifically, one should make absolutely sure that this function is + /// called before TX completion of this packet can trigger. Otherwise + /// the packet could potentially already be freed. + pub fn tx_timestamp(&mut self) { + self.clone_tx_timestamp(); + if self.shinfo().tx_flags() as u32 & bindings::SKBTX_SW_TSTAMP != 0 { + unsafe { + bindings::skb_tstamp_tx(self.ptr as *mut bindings::sk_buff, ptr::null_mut()); + } + } + } + + /// Length of the [`SkBuff`]. + #[allow(clippy::len_without_is_empty)] + pub fn len(&self) -> u32 { + self.get_internal().len + } + + /// Get the Shared info for this SKBuffer. + pub fn shinfo(&self) -> SkbSharedInfo { + // SAFETY: self.ptr is valid if self is valid + unsafe { + let info = self.shinfo_int(); + SkbSharedInfo::from_pointer(info) + } + } + + unsafe fn shinfo_int(&self) -> *mut bindings::skb_shared_info { + self.end_pointer() as *mut bindings::skb_shared_info + } + + // NET_SKBUFF_DATA_USES_OFFSET + #[cfg(target_pointer_width = "64")] + fn end_pointer(&self) -> *mut u8 { + let sk_ref = self.get_internal(); + (sk_ref.head as usize + sk_ref.end as usize) as *mut u8 + } + + // !NET_SKBUFF_DATA_USES_OFFSET + #[cfg(not(target_pointer_width = "64"))] + fn end_pointer(&self) -> *mut u8 { + let sk_ref = self.get_internal(); + sk_ref.end as *mut u8 + } +} + +impl SavedAsPointer for SkBuff { + type InternalType = bindings::sk_buff; + + fn get_pointer(&self) -> *const Self::InternalType { + self.ptr + } + + unsafe fn from_pointer(ptr: *const Self::InternalType) -> Self { + Self { ptr } + } +} + +// TODO: is this sound? +impl Drop for SkBuff { + #[cfg(CONFIG_TRACEPOINTS)] + fn drop(&mut self) { + // SAFETY: self.ptr is valid if self is valid + unsafe { + bindings::consume_skb(self.ptr as *mut bindings::sk_buff); + } + } + + #[cfg(not(CONFIG_TRACEPOINTS))] + fn drop(&mut self) { + // SAFETY: self.ptr is valid if self is valid + unsafe { + bindings::kfree_skb(self.ptr as *mut bindings::sk_buff); + } + } +} + +/// Wraps the kernel's `struct skb_shared_info`. +/// +/// # Invariants +/// +/// The pointer `Self::ptr` is non-null and valid. +#[repr(transparent)] +pub struct SkbSharedInfo { + ptr: *const bindings::skb_shared_info, +} + +impl SkbSharedInfo { + /// The `tx_flag` field of the wrapped [`bindings::skb_shared_info`] + pub fn tx_flags(&self) -> u8 { + self.get_internal().tx_flags + } +} + +impl SavedAsPointer for SkbSharedInfo { + type InternalType = bindings::skb_shared_info; + + fn get_pointer(&self) -> *const Self::InternalType { + self.ptr + } + + unsafe fn from_pointer(ptr: *const Self::InternalType) -> Self { + Self { ptr } + } +} diff --git a/rust/kernel/types.rs b/rust/kernel/types.rs index 2146ee819cc996..775ccbea74322d 100644 --- a/rust/kernel/types.rs +++ b/rust/kernel/types.rs @@ -247,3 +247,53 @@ impl Drop for ScopeGuard { } } } + +/// Trait for wrappers which are holding a direct pointer that they are getting from a C side function. +pub trait SavedAsPointer { + /// The underlying C type from [`crate::bindings`] which this Wrapper is containing. + type InternalType; + + /// Regturns the raw pointer stored in the wrapper. + fn get_pointer(&self) -> *const Self::InternalType; + + /// Returns the instance back which contains the raw pointer `ptr`. + /// + /// # Safety + /// + /// The passed pointer must be valid and of type `*const [`Self::InternalType`]`. + unsafe fn from_pointer(ptr: *const Self::InternalType) -> Self; + + /// Returns a reference to to the internal struct + fn get_internal(&self) -> &Self::InternalType { + let ptr = self.get_pointer(); + + // SAFETY: self must be constructed via [`Self::from_pointer`]. + unsafe { ptr.as_ref() }.unwrap() + } +} + +/// Trait for wrappers which are holding a mutable direct pointer that they are getting from a C side function. +/// +/// Extends [`SavedAsPointer`] with the addition of mutability. +pub trait SavedAsPointerMut: SavedAsPointer { + /// Return a mutable pointer to the underlying struct. + fn get_pointer_mut(&mut self) -> *mut Self::InternalType { + self.get_pointer() as *mut Self::InternalType + } + + /// Returns the instance back which contains the raw pointer `ptr`. + /// + /// # Safety + /// + /// The passed pointer must be valid and of type `*mut [`Self::InternalType`]`. + unsafe fn from_pointer_mut(ptr: *mut Self::InternalType) -> Self; + + // TODO: can I implement Self::from_pointer for the trait SavedAsPointer? + + /// Returns a mutable referecne to the internal struct. + fn get_internal_mut(&mut self) -> &mut Self::InternalType { + let ptr = self.get_pointer() as *mut Self::InternalType; + + unsafe { ptr.as_mut() }.unwrap() + } +} diff --git a/rust/macros/helpers.rs b/rust/macros/helpers.rs new file mode 100644 index 00000000000000..78b1b03ece62c1 --- /dev/null +++ b/rust/macros/helpers.rs @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: GPL-2.0 + +use proc_macro::{token_stream, Group, TokenTree}; + +pub(crate) fn try_ident(it: &mut token_stream::IntoIter) -> Option { + if let Some(TokenTree::Ident(ident)) = it.next() { + Some(ident.to_string()) + } else { + None + } +} + +pub(crate) fn try_literal(it: &mut token_stream::IntoIter) -> Option { + if let Some(TokenTree::Literal(literal)) = it.next() { + Some(literal.to_string()) + } else { + None + } +} + +pub(crate) fn try_byte_string(it: &mut token_stream::IntoIter) -> Option { + try_literal(it).and_then(|byte_string| { + if byte_string.starts_with("b\"") && byte_string.ends_with('\"') { + Some(byte_string[2..byte_string.len() - 1].to_string()) + } else { + None + } + }) +} + +pub(crate) fn expect_ident(it: &mut token_stream::IntoIter) -> String { + try_ident(it).expect("Expected Ident") +} + +pub(crate) fn expect_punct(it: &mut token_stream::IntoIter) -> char { + if let TokenTree::Punct(punct) = it.next().expect("Reached end of token stream for Punct") { + punct.as_char() + } else { + panic!("Expected Punct"); + } +} + +pub(crate) fn expect_literal(it: &mut token_stream::IntoIter) -> String { + try_literal(it).expect("Expected Literal") +} + +pub(crate) fn expect_group(it: &mut token_stream::IntoIter) -> Group { + if let TokenTree::Group(group) = it.next().expect("Reached end of token stream for Group") { + group + } else { + panic!("Expected Group"); + } +} + +pub(crate) fn expect_byte_string(it: &mut token_stream::IntoIter) -> String { + try_byte_string(it).expect("Expected byte string") +} + +#[derive(Clone, PartialEq)] +pub(crate) enum ParamType { + Ident(String), + Array { vals: String, max_length: usize }, +} + +pub(crate) fn expect_array_fields(it: &mut token_stream::IntoIter) -> ParamType { + assert_eq!(expect_punct(it), '<'); + let vals = expect_ident(it); + assert_eq!(expect_punct(it), ','); + let max_length_str = expect_literal(it); + let max_length = max_length_str + .parse::() + .expect("Expected usize length"); + assert_eq!(expect_punct(it), '>'); + ParamType::Array { vals, max_length } +} + +pub(crate) fn expect_type(it: &mut token_stream::IntoIter) -> ParamType { + if let TokenTree::Ident(ident) = it + .next() + .expect("Reached end of token stream for param type") + { + match ident.to_string().as_ref() { + "ArrayParam" => expect_array_fields(it), + _ => ParamType::Ident(ident.to_string()), + } + } else { + panic!("Expected Param Type") + } +} + +pub(crate) fn expect_end(it: &mut token_stream::IntoIter) { + if it.next().is_some() { + panic!("Expected end"); + } +} + +pub(crate) fn get_ident(it: &mut token_stream::IntoIter, expected_name: &str) -> String { + assert_eq!(expect_ident(it), expected_name); + assert_eq!(expect_punct(it), ':'); + let ident = expect_ident(it); + assert_eq!(expect_punct(it), ','); + ident +} + +pub(crate) fn get_literal(it: &mut token_stream::IntoIter, expected_name: &str) -> String { + assert_eq!(expect_ident(it), expected_name); + assert_eq!(expect_punct(it), ':'); + let literal = expect_literal(it); + assert_eq!(expect_punct(it), ','); + literal +} + +pub(crate) fn get_byte_string(it: &mut token_stream::IntoIter, expected_name: &str) -> String { + assert_eq!(expect_ident(it), expected_name); + assert_eq!(expect_punct(it), ':'); + let byte_string = expect_byte_string(it); + assert_eq!(expect_punct(it), ','); + byte_string +} diff --git a/rust/macros/lib.rs b/rust/macros/lib.rs index cb7a4f12f3b4dc..bcc63c48acb9d3 100644 --- a/rust/macros/lib.rs +++ b/rust/macros/lib.rs @@ -2,8 +2,15 @@ //! Crate for all kernel procedural macros. +/// helper functions +mod helpers; + +/// generic module/driver macros mod module; +/// network module/driver macros +mod net; + use proc_macro::TokenStream; /// Declares a kernel module. @@ -125,3 +132,59 @@ pub fn module(ts: TokenStream) -> TokenStream { pub fn module_misc_device(ts: TokenStream) -> TokenStream { module::module_misc_device(ts) } + +/// Declares a rtnl link operation table. +/// +/// The `type` argument should match the type used for `T` in `NetDevice`. +/// +/// # Examples +/// +/// ```rust,ignore +/// use kernel::prelude::*; +/// use kernel::net::prelude::*; +/// +/// fn setup(dev: &mut NetDevice) { +/// dev.ether_setup(); +/// +/// dev.set_ops(); +/// // ... +/// } +/// +/// rtnl_link_ops! { +/// kind: b"dummy_rs", +/// type: DummyRsDev, +/// setup: setup, +/// maxtype: 20, +/// } +/// +/// struct DummyRsDev; +/// +/// impl NetDeviceOps for DummyRsDev { +/// kernel::declare_net_device_ops!(); +/// +/// fn init(dev: &NetDevice) -> KernelResult<()> { +/// Ok(()) +/// } +/// +/// fn uninit(dev: &NetDevice) { +/// +/// } +/// } +/// +/// impl EthToolOps for DummyRsDev { +/// kernel::declare_eth_tool_ops!(); +/// } +/// +/// fn call_from_module_init() -> KernelResult<()> { +/// let mut dev = NetDevice::new(DummyRsDev, kernel::cstr!("dummyrs%d"), kernel::net::device::NetNameAssingType::Enum, 1, 1)?; +/// +/// dev.register(); +/// dev.set_rtnl_ops(dummy_rs_rtnl_link_ops); +/// +/// Ok(()) +/// } +/// ``` +#[proc_macro] +pub fn rtnl_link_ops(ts: TokenStream) -> TokenStream { + net::rtnl_link_ops(ts) +} diff --git a/rust/macros/module.rs b/rust/macros/module.rs index 1389c53aa228f3..865ad040b04cf5 100644 --- a/rust/macros/module.rs +++ b/rust/macros/module.rs @@ -2,113 +2,7 @@ use proc_macro::{token_stream, Delimiter, Group, Literal, TokenStream, TokenTree}; -fn try_ident(it: &mut token_stream::IntoIter) -> Option { - if let Some(TokenTree::Ident(ident)) = it.next() { - Some(ident.to_string()) - } else { - None - } -} - -fn try_literal(it: &mut token_stream::IntoIter) -> Option { - if let Some(TokenTree::Literal(literal)) = it.next() { - Some(literal.to_string()) - } else { - None - } -} - -fn try_byte_string(it: &mut token_stream::IntoIter) -> Option { - try_literal(it).and_then(|byte_string| { - if byte_string.starts_with("b\"") && byte_string.ends_with('\"') { - Some(byte_string[2..byte_string.len() - 1].to_string()) - } else { - None - } - }) -} - -fn expect_ident(it: &mut token_stream::IntoIter) -> String { - try_ident(it).expect("Expected Ident") -} - -fn expect_punct(it: &mut token_stream::IntoIter) -> char { - if let TokenTree::Punct(punct) = it.next().expect("Reached end of token stream for Punct") { - punct.as_char() - } else { - panic!("Expected Punct"); - } -} - -fn expect_literal(it: &mut token_stream::IntoIter) -> String { - try_literal(it).expect("Expected Literal") -} - -fn expect_group(it: &mut token_stream::IntoIter) -> Group { - if let TokenTree::Group(group) = it.next().expect("Reached end of token stream for Group") { - group - } else { - panic!("Expected Group"); - } -} - -fn expect_byte_string(it: &mut token_stream::IntoIter) -> String { - try_byte_string(it).expect("Expected byte string") -} - -#[derive(Clone, PartialEq)] -enum ParamType { - Ident(String), - Array { vals: String, max_length: usize }, -} - -fn expect_array_fields(it: &mut token_stream::IntoIter) -> ParamType { - assert_eq!(expect_punct(it), '<'); - let vals = expect_ident(it); - assert_eq!(expect_punct(it), ','); - let max_length_str = expect_literal(it); - let max_length = max_length_str - .parse::() - .expect("Expected usize length"); - assert_eq!(expect_punct(it), '>'); - ParamType::Array { vals, max_length } -} - -fn expect_type(it: &mut token_stream::IntoIter) -> ParamType { - if let TokenTree::Ident(ident) = it - .next() - .expect("Reached end of token stream for param type") - { - match ident.to_string().as_ref() { - "ArrayParam" => expect_array_fields(it), - _ => ParamType::Ident(ident.to_string()), - } - } else { - panic!("Expected Param Type") - } -} - -fn expect_end(it: &mut token_stream::IntoIter) { - if it.next().is_some() { - panic!("Expected end"); - } -} - -fn get_literal(it: &mut token_stream::IntoIter, expected_name: &str) -> String { - assert_eq!(expect_ident(it), expected_name); - assert_eq!(expect_punct(it), ':'); - let literal = expect_literal(it); - assert_eq!(expect_punct(it), ','); - literal -} - -fn get_byte_string(it: &mut token_stream::IntoIter, expected_name: &str) -> String { - assert_eq!(expect_ident(it), expected_name); - assert_eq!(expect_punct(it), ':'); - let byte_string = expect_byte_string(it); - assert_eq!(expect_punct(it), ','); - byte_string -} +use super::helpers::*; struct ModInfoBuilder<'a> { module: &'a str, diff --git a/rust/macros/net.rs b/rust/macros/net.rs new file mode 100644 index 00000000000000..7c719d3189098e --- /dev/null +++ b/rust/macros/net.rs @@ -0,0 +1,144 @@ +// SPDX-License-Identifier: GPL-2.0 +use proc_macro::{TokenStream, TokenTree}; + +use super::helpers::*; + +pub fn rtnl_link_ops(ts: TokenStream) -> TokenStream { + let mut it = ts.into_iter(); + let literals = &["maxtype", "policy", "slave_maxtype", "slave_policy"]; + + let mut found_idents = Vec::new(); + + let kind = get_byte_string(&mut it, "kind"); + let netdevice = get_ident(&mut it, "type"); + + let mut callbacks = String::new(); + let mut fields = String::new(); + + loop { + let name = match it.next() { + Some(TokenTree::Ident(ident)) => ident.to_string(), + Some(_) => panic!("Expected Ident or End"), + None => break, + }; + + assert_eq!(expect_punct(&mut it), ':'); + + if literals.contains(&name.as_str()) { + let literal = expect_literal(&mut it); + fields.push_str(&format!( + "{name}: {literal},\n", + name = name, + literal = literal + )); + } else { + let func = expect_ident(&mut it); + callbacks.push_str(&build_rtnl_links_callback(&name, &netdevice, &func, &kind)); + found_idents.push(name); + } + + assert_eq!(expect_punct(&mut it), ','); + } + expect_end(&mut it); + + let callback_fields = found_idents + .iter() + .map(|name| format!("{}: Some(__rtnl_link_{}_callback_{}),", name, name, kind)) + .collect::>() + .join("\n"); + + let ops_struct = format!( + r#" + #[doc(hidden)] + #[used] + #[no_mangle] + pub static mut {kind}_LINK_OPS: kernel::net::rtnl::RtnlLinkOps = kernel::net::rtnl::RtnlLinkOps::new_from_inner(kernel::bindings::rtnl_link_ops {{ + priv_size: core::mem::size_of::<<{netdevice} as kernel::net::device::NetDeviceAdapter>::Inner>(), + kind: b"{kind}\0".as_ptr() as *const i8, + {callback_fields} + {fields} + ..kernel::net::rtnl::RTNL_LINK_OPS_EMPTY + }}); + "#, + kind = kind, + netdevice = netdevice, + callback_fields = callback_fields, + fields = fields, + ); + + format!( + r#" + {callbacks} + #[cfg_attr(any(CONFIG_X86, CONFIG_SPARC64), link_section = ".data.read_mostly")] + {ops_struct} + "#, + callbacks = callbacks, + ops_struct = ops_struct, + ) + .parse() + .expect("Error parsing formatted string into token stream.") +} + +struct RtnlLinkValues { + callback_params: String, + return_type: String, + wrapper_before: String, + wrapper_after: String, + params: String, +} + +impl RtnlLinkValues { + fn new(callback_params: &str, wrapper_before: &str, params: &str) -> Self { + Self { + callback_params: callback_params.to_owned(), + return_type: "()".to_owned(), + wrapper_before: wrapper_before.to_owned(), + wrapper_after: "".to_owned(), + params: params.to_owned(), + } + } +} + +fn get_rtnl_links_values(name: &str, netdevice: &str) -> RtnlLinkValues { + let setup_dev = format!( + "let mut dev = kernel::net::device::NetDevice::<{}>::from_pointer(dev);", + netdevice + ); + match name { + "setup" => RtnlLinkValues::new("dev: *mut kernel::bindings::net_device", &setup_dev, "&mut dev"), + "validate" => RtnlLinkValues { + callback_params: "tb: *mut *mut kernel::bindings::nlattr, data: *mut *mut kernel::bindings::nlattr, extack: *mut kernel::bindings::netlink_ext_ack".to_owned(), + return_type: "kernel::c_types::c_int".to_owned(), + wrapper_before: r#"kernel::from_kernel_result! { + let tb = kernel::net::netlink::NlAttrVec::from_pointer(tb as *const *const kernel::bindings::nlattr); + let data = kernel::net::netlink::NlAttrVec::from_pointer(data as *const *const kernel::bindings::nlattr); + let extack = kernel::net::netlink::NlExtAck::from_pointer(extack); + "#.to_owned(), + wrapper_after: "?; Ok(0) }".to_owned(), + params: "&tb, &data, &extack".to_owned(), + }, + _ => panic!("invalid rtnl_link_ops function '{}'", name), + } +} + +fn build_rtnl_links_callback(name: &str, netdevice: &str, func: &str, kind: &str) -> String { + let values = get_rtnl_links_values(name, netdevice); + format!( + r#" + #[doc(hidden)] + pub unsafe extern "C" fn __rtnl_link_{name}_callback_{kind}({cb_params}) -> {cb_return} {{ + {cb_before} + {cb_func}({cb_r_params}) + {cb_after} + }} + "#, + name = name, + kind = kind, + cb_params = values.callback_params, + cb_return = values.return_type, + cb_before = values.wrapper_before, + cb_func = func, + cb_r_params = values.params, + cb_after = values.wrapper_after, + ) +}