A new version The Linux 6.4 kernel arrived just two months after Linux 6.3. Despite the relatively short time interval, there are quite a lot of changes. In total, 16012 fixes were accepted from 2080 developers, and the changes affected 14220 files, 1006924 lines of code were added, 597615 lines were deleted. The patch size was 81 MB.
Most of the changes are related to device drivers, accounting for about 43% of the total. About 14% of the changes are related to updating the code relevant for hardware architectures, 10% are the network stack, only 4% are file systems, and another 3% are internal kernel subsystems. Details are under the cut.
Concerning the most notable changesthen this is, for example, the continuation of work on the integration of the Rust language, the ability to create a kernel worker from user space, support for hibernation for systems based on the RISC-V architecture, support for NFS RPC packet encryption.
Hardware and drivers
- There are not a lot of changes here, but there are important ones among them. For example, the i915 (Intel) driver continues to support the Meteor Lake GPU.
- In addition, a QAIC driver has been added for the Qualcomm Cloud AI 100 (AIC100) PCIe card.
- Also removed character drivers for legacy PCMCIA devices such as cm4000_cs, cm4040_cs and scr24x_cs. Plus, the Intel Thunder Bay SoC is no longer supported (the release of this SoC was canceled by Intel).
- But sound support has appeared, albeit basic, on systems with Intel Lunar Lake CPUs. Added AMD SoundWire Manager driver to manage AMD audio coprocessors.
- Plus added support for monitoring the status of temperature sensors via the hwmon API for about 100 models of ASUS boards.
- We also added the msi-ec driver, which makes it possible to control the advanced features of MSI laptops from user space. First of all, this is the choice of power consumption profile, changing the speed of the cooler, etc.
- And yet – there was finally support for Apple systems based on the M2 ARM chip. True, this is only the beginning of work on adding support for these systems.
- Support for WiFi 7 has been added to the MediaTek MT76 driver.
Memory and system services
- The transfer of additional functionality from the Rust-for-Linux branch is ongoing. It’s about using Rust as a second language for developing drivers and kernel modules. It is worth noting that language support is disabled by default. Among the added features are the implementation of the ARef (always-refcounted) types for object references to which the reference counting mechanism is applied, Task for working with the task_struct structure, and LockedBy for protecting data through external locks.
- Added support for LAM_U57 (Linear Address Masking) mode for Intel processors. The novelty makes it possible to use part of the bits of 64-bit pointers (from 57 to 62 bits) to store non-addressing metadata.
- A variant of the mechanism for combining identical memory pages is also implemented, which works at the process level. This makes it possible to greatly reduce memory consumption. Moreover, in the current version of the kernel, deduplication is supported via prctl(PR_SET_MEMORY_MERGE) for the entire process and is inherited for child processes, without the need to activate for each memory range using the madvise(MADV_MERGEABLE) call, which greatly simplifies the application.
- Unprivileged processes now receive information from the kernel subsystem PSI (Pressure Stall Information), which allows user-space analysis of information about the waiting time for obtaining various resources (CPU, memory, I / O) to accurately assess the level of system load and slowdown patterns. If the process is unprivileged, then polling the PSI is allowed no more than every two seconds.
- BPF introduces support for generic iterators, making it easier to create loops in BPF programs. And also implemented filling in the rotation mode of the buffer with a log of problems, which is detected by the code verifier.
- A new virtual file system /sys/kernel/tracing/touched_functions has also been added. It makes it possible to define all the kernel functions available for tracing and attaching BPF programs.
- Another interesting innovation is the implementation of support for the LoongArch architecture (in addition to support for ARM, AArch64, i386, x86_64, s390, RISC-V, and MIPS) in the minimal standard C library.
- As mentioned above, systems based on the RISC-V architecture now have support for hibernation. Also added is support for the Svnapot extension, which allows you to link groups of 4K memory pages to create larger memory pages.
- Support for Guided Autonomous Mode has been added to the amd-pstate driver, in which the processor frequency is selected automatically, but cannot go beyond the specified range.
Disk subsystem and files
- There are not many changes here, but among them there are quite significant ones. For example, changes have been added to XFS that are necessary to implement on-the-fly FS checks (online scrub).
- And in Ext4, the organization of the journal entry (data=journal) is simplified.
- In addition, Btrfs has rewritten the filesystem checking code to use scrub_stripe, supports RAID56 checking, and is about 10% faster. Improved performance of directory logging (the elimination of index enumeration during logging allowed to reduce the time spent on fsync execution by 4 times).
- As for the F2FS file system, it adds support for zoned block devices, in which the size of zones is not a multiple of a power of two.
- Among other changes, it is worth highlighting the implementation of a universal software interface for controlling LED indicators on network switches or network cards. Separate fields have been added to the DeviceTree data structure for linking LED indicators to devices.
- Plus, a Netlink-based API has been added, which is designed to control the operation of LEDs on network switches or boards.
- There was support for schedulers for the SCTP protocol, for a fair distribution of bandwidth between streams (Fair Capacity Scheduler) and fair filling of the queue, taking into account weight coefficients (Weighted Fair Queueing Scheduler).
- In the new kernel version, it is forbidden to disable and unload the SELinux module while it is running. Disabling SELinux can now only be done at the initial boot stage by passing the “selinux=0” parameter on the kernel command line.
- Also added support for Hyper-V hypercalls used to forward PCI devices to guests with Hyper-V drivers.
- And also, a framework has been implemented for moving the processing of SMCCC (Secure Monitor Call Calling Conventions) requests to user space.
- Well, in the keystore (keyring) “.machine” a mode is implemented that allows the placement of only keys certified by a digital signature of a certification authority known to the system.
As always, a variant of the free kernel, 6.4 – Linux-libre 6.4-gnu, is also formed, which is cleared of those elements that contain non-free components or code sections. Here is the link to the core
Well, that’s all. If you have already updated, tell us how it went. Were there any problems, and if so, which ones?
You may also be interested in these texts:
→ Create a Django blog with polls and tests. Brief instruction. Part 1
→ OpenStack vs VMware: which is better – open source or proprietary platform
→ When typing hurts you: how we got a static analyzer