The new version of the Linux kernel, 6.4, has arrived just two months after Linux 6.3. Despite the relatively short time interval, there have been quite a few changes. A total of 16,012 fixes have been accepted from 2,080 developers, affecting 14,220 files. There were 1,006,924 lines of code added and 597,615 lines removed. The patch size amounts to 81 MB.
The majority of changes are related to device drivers, accounting for approximately 43% of the total volume. About 14% of changes pertain to the update of hardware architecture-specific code, 10% to the networking stack, 4% to file systems, and an additional 3% to kernel internal subsystems. Details are provided below.
As for the most notable changes, they include ongoing work on integrating the Rust language, the ability to create a kernel worker from user space, support for sleep mode transition on RISC-V architecture systems, and encryption support for NFS RPC packets.
Hardware and Drivers
- While there aren't a significant number of changes in this area, there are some important ones. For example, the i915 (Intel) driver continues to implement support for the GPU Meteor Lake.
- Additionally, a driver for the Qualcomm Cloud AI 100 PCIe card (AIC100) has been added (QAIC driver).
- Symbolic drivers for outdated PCMCIA interface devices such as cm4000_cs, cm4040_cs, and scr24x_cs have been removed. Moreover, the SoC Intel Thunder Bay is no longer supported (Intel canceled its release).
- On the other hand, basic sound support has been added for systems with Intel Lunar Lake CPUs, and the AMD SoundWire Manager driver has been included to manage AMD audio co-processors.
- Furthermore, support for monitoring temperature sensor status via the hwmon API has been added for around 100 ASUS motherboard models.
- The msi-ec driver has also been added, enabling control of advanced features of MSI laptops from user space. This includes selecting power consumption profiles, adjusting fan speed, and more.
- Finally, support for Apple systems based on the ARM M2 chip has been introduced. However, this is just the beginning of the work to add support for these systems.
- The MediaTek MT76 driver has also gained WiFi 7 support.
Memory and System Services
- The ongoing process of transferring additional functionality from the Rust-for-Linux branch continues. This involves using Rust as a second language for developing drivers and kernel modules. It's worth noting that language support is not enabled by default. Among the added features are the implementation of ARef (always-refcounted) types for object references using reference counting, Task for working with the task_struct structure, and LockedBy for protecting data through external locking.
- Support for the LAM_U57 (Linear Address Masking) mode has been introduced for Intel processors. This feature allows using a portion of the bits (from bit 57 to 62) of 64-bit pointers to store non-address-related metadata.
- A variant of the memory deduplication mechanism has been implemented at the process level. This allows for significant reduction in memory consumption. In the current kernel version, deduplication support is achieved through prctl(PR_SET_MEMORY_MERGE) for the entire process and is inherited by child processes, without the need to activate it for each memory range using the madvise(MADV_MERGEABLE) syscall, which simplifies its application.
- Unprivileged processes now receive information from the Pressure Stall Information (PSI) kernel subsystem. This allows analyzing user-space information about waiting times for various resources (CPU, memory, I/O) to accurately assess the system's load level and the nature of performance slowdowns. However, for unprivileged processes, querying PSI is allowed no more frequently than every two seconds.
- BPF (Berkeley Packet Filter) has gained support for generic iterators, making it easier to create loops in BPF programs. Additionally, the filling of the log buffer in problem rotation mode has been implemented, which is detected by the code verifier.
- A new virtual file system, /sys/kernel/tracing/touched_functions, has been added. It allows determining all kernel functions available for tracing and attaching BPF programs.
- Another interesting addition is the implementation of LoongArch architecture support (in addition to ARM, AArch64, i386, x86_64, s390, RISC-V, and MIPS) in the minimal standard C library.
- As mentioned earlier, support for hibernation mode has been added for RISC-V architecture-based systems. Support for the Svnapot extension has also been included, which allows grouping 4K-sized memory pages to create larger memory pages.
- The amd-pstate driver has added support for Guided Autonomous Mode, where the processor frequency is automatically selected but cannot exceed the specified range.
Disk subsystem and files
- There aren't many changes here, but among them, there are quite significant ones. For example, XFS has added changes necessary for implementing online scrub filesystem check.
- Additionally, Ext4 has simplified the organization of journaling with the introduction of data=journal.
- Furthermore, in Btrfs, the code for filesystem check has been rewritten, utilizing scrub_stripe, supporting RAID56 check, and performing approximately 10% faster. The performance of directory journaling has been improved by eliminating index traversal during journaling, resulting in a fourfold reduction in the time taken for fsync execution.
- As for the F2FS file system, it now supports zoned block devices with zone sizes that are not a power of two.
- Among other changes, the implementation of a universal software interface for managing LED indicators on network switches or network cards is noteworthy. The DeviceTree data structure has separate fields added for associating LED indicators with devices.
- Additionally, an API based on Netlink has been added for controlling the operation of LEDs on network switches or cards.
- Support for schedulers in the SCTP protocol has been introduced to achieve fair bandwidth distribution between streams (Fair Capacity Scheduler) and fair queue filling considering weight coefficients (Weighted Fair Queueing Scheduler).
- In the new kernel version, disabling and unloading the SELinux module during runtime is prohibited. Disabling SELinux can now only be done during the initial boot stage by passing the "selinux=0" parameter on the kernel command line.
- Hyper-V hypercalls support has also been added for PCI device passthrough to guest systems with Hyper-V drivers.
- Additionally, a framework has been implemented to offload SMCCC (Secure Monitor Call Calling Conventions) request handling to user space.
- Furthermore, the keyring ".machine" now includes a mode that allows only keys signed by a trusted certificate authority known to the system.
As always, a libre version of the kernel, 6.4 - Linux-libre 6.4-gnu, has been released, which is stripped of any components or code sections containing non-free components. Here is a link to the Linux-libre 6.4-gnu kernel.
That's all for now. If you have already updated, please share how it went. Were there any issues? If so, what were they specifically?