Overview

Arm is an active maintainer and contributor to the Linux Kernel project, together with Linaro and a large number of partner companies and independent developers.

Arm maintains the arch/arm64 Linux Kernel tree, for all Arm 64-bit enabled systems and it actively contributes to the arch/Arm tree for all legacy Arm 32-bit systems (Armv7 and Armv8 running at AArch32).

Arm also maintains the KVM/arm and KVM/arm64 ports of the popular Kernel Virtual Machine (KVM) hypervisor.

Arm develops and maintains the fundamental Arm Architecture enablement for the Linux kernel.

All the information regarding the Linux Kernel can be found in the official Kernel.org website.

Kernel versions highlights

Arm64 highlights from recently released Linux Kernel versions

  • Linux-5.11
    • Armv8.5 MTE: in-kernel heap tagging enablement
    • Armv8.3 SPE in-kernel enablement
    • Perf PMU drivers:
      • Arm DMC-620 memory controller
    • sysfs identifier file for SMMUv3
    • **Re-organise the 52-bit kernel VA space for better usage
    • Add CPPC FFH support using Arm64 AMU counters
    • Support for SCMI v3.0 sensor extensions
    • KVM updates:
      • PSCI relay" at EL2, the first "user visible" feature required by the Protected KVM effort
      • Reduced GICv4 entry latency
      • AArch32 sysreg handling
    • EL2 vector allocation Clean-up
  • Linux-5.10
    • Armv8.5 MTE: User-space heap tagging enablement
    • Self-tests for MTE, PAC and FPSIMD/SVE context switching
    • Arm v 8.6 PAC2 +FPAC in-kernel enablement
    • SMMU support for ASID spinning
    • NUMA Kconfig: maximum number of NUMA nodes bumped from 4 to 16 [node-shift : 4]
    • Perf PMU drivers: addition of the Arm CMN-600 PMU porter driver
    • Perf PMU drivers: support to handle CPU PMU IRQs as NMI
    • SCMI system protocol support
    • KVM: New page table code for both hypervisor and guest stage-2
    • KVM: PMU event filter support
    • KVM: Complete rework of Spectre mitigation
  • Linux-5.9
    • arm64 support for TLBI range operations and translation table level hints
    • Time namespace support for arm64
    • ACPI disallow AML accesses to EFI code regions and kernel memory
    • Export the virtual and physical address sizes in vmcoreinfo for makedumpfile and crash utilities
    • SCMI: Notifications support
    • KVM: Split the VHE and nVHE hypervisor code bases, build the EL2 code separately, allowing for the VHE code to now be built with instrumentation
    • KVM: Level-based TLB invalidation support
    • KVM: Restructure of the vcpu register storage to accomodate the NV code
    • KVM: Pointer Authentication available for guests on nVHE hosts
  • Linux-5.8
    • v8.5 BTI usersapce and in Kernel support
    • BPF and vDSO updates to use the new instructions
    • HWCAP and user exposure through ID register emulation
    • Shadow Call Stack Clang support
    • PMU: System PMU driver clean-up
    • SMMUv3: register reservation conflict fix
    • KVM: Post-32bit cleanup
    • KVM: Non-invasive pre-Nested Virtualisation preparatory patches
    • KVM: Migration to arch-specific code into arc/arm64/kvm
  • Linux-5.7
    • Arm v8.3 PAC: In-Kernel support
    • Armv8.4: Activity Monitors (AMU ) extension support
    • Arm64 Memory hot-remove support
    • Armv8.5 BTI In-kernel support
    • Armv8.5-PMU 64-bit counters support
    • Armv8.5-RNG: use at boot to seed KASLR
    • KVM: GICv4.1 support
    • KVM: 32bit host removal
  • Linux-5.6
    • Armv8.5 E0PD support for KPTI disablement even with KASLR enabled
    • Armv8.5: RNG instruction initial support for hardware encryption
    • User-space exposure(HWCAP)
    • Armv8.6 DGH: Data Gathering Hint
    • Armv8.6 In8MM: Matrix Multiplication
    • Armv8.6 BFloat16: 16 bit Floating point
    • PMU: Perf driver clean-up for System PMU drivers
    • Armv8.5 BTI In-kernel enablement prep : Modern assembly function annotations
    • Workaround for Cortex A-55 erratum  #1530923
  • Linux-5.5
    • FTRACE_WITH_REGS support for arm64 
    • Perf updates for arm64
    • GICv3 optimisation to avoid a heavy barrier when accessing the ICC_PMR_EL1 register
    • PAN bypass mitigation: disable execute-only permissions for user applications
    • KVM: Report stolen time to guest
    • KVM: Allow injection of data aborts from userspace
    • KVM: GICv4 performance improvements
    • Workaround for Neoverse-N1 erratum #1542419
    • Workaround for Cortex-A57 and A72 erratum #1319367
  • Linux-5.4
    • Armv8.2-LVA: 52-bit virtual addressing in the kernel 
    • New ABI to allow tagged user pointers to be dereferenced by syscalls
    • Support for the PPTT "thread" flag introduced by ACPI 6.3
    • Improve in-kernel LSE atomics implementation
    • SCMI v2.0 fastchannel support for performance protocol
    • KVM: New ITS translation cache
    • KVM: Allow up to 512 CPUs to be supported with GICv3
  • Linux-5.3
    • Support for Arm64 Syscall emulation via PTRACE_SYSEMU 
    • Support for Arm v8.5-CondM Condition code manipulation
    • Support for Arm v8.5-FRINT Floating point to Integer
    • Statistical Profiling Extensions (SPE) enabled on ACPI platforms
    • KVM: Handle Neoverse N1 erratum #1349291
    • KVM: Support for chained PMU counters in guests
    • KVM: Allow side-channel mitigation status (Spectre Var2/Var4) to be migrated
  • Linux-5.2
    • SVE2 exposed to user-space through HWCAP
    • Support for ARMv8.5-DCCVAP Data Cache Clean to Point of Deep Persistence
    • CPU timer erratum workaround (Neoverse-N1 #1188873 & #1418040)
    • Introduce perf PMU driver for the SMMUv3 performance counters
    • Populating sysfs with Spectre/Meltdown mitigations information
    • KVM: Support for SVE in Guests
    • KVM: Support for ARMv8.3 Pointer Authentication in Guests
    • KVM: Discrimination of PMU counters between host and guests
  • Linux-5.1
    • Support for arm64 pseudo NMI using GICv3 interrupt priorities
    • Support for ARMv8.3 Pointer Authentication ptrace regsets for key management
    • Uaccess macros clean-up
    • KVM: pre-nested virtualization code rework
  • Linux-5.0
    • Support for ARMv8.3 Pointer Authentication in userspace
    • Support for ARMv8.2-LVA: 52-bit virtual addressing for userspace (kernel remains 48-bit)
    • Support for the new 'SB' Speculation Barrier instruction (ARMv8.0-SB, introduced as part of the ARMv8.5 Extension)
    • Support for per-thread stack canaries
    • Support for kexec_file_load() for secure boot of a kexec payload but also for kexec performances improvement
    • KPTI whitelisting of Cortex-A CPUs unaffected by Meltdown
    • Patch in LSE atomics for per-cpu atomic operations
    • Initial support for memory hotplug
    • KVM: Large PUD support for HugeTLB
    • EAS (Energy Aware Scheduling)
  • Linux-4.20
    • Support for the new ARMv8.5 PSTATE.SSBS bit (ARMv8.0-SpecRest), used to mitigate Spectre-v4 dynamically without trapping to EL3 firmware
    • Support for ARMv8.2-TTCNP Common Not Private translations allowing threads of the same CPU to share the TLB entries
    • Core mmu_gather changes which allow tracking the levels of page-table being cleared together with the arm64 low-level flushing routines
    • Optimise emulation of MRS instructions to ID_* registers on ARMv8.4
    • Trap WFI instruction executed in user space
    • Arm Smmuv3 support non-strict mode
    • KVM: Improved guest IPA space support (32 to 52 bits)
    • KVM: RAS event delivery for 32bit
  • Linux-4.19
    • Support for qspinlock on arm64, replacing ticket lock code 
    • GICv3 updates and LPI allocation refactoring
    • Support for the GCC "stackleak" plugin
    • Kexec/kdump support on systems booting with ACPI
    • Support for chained PMU counters, allowing 64-bit event counters to be constructed on current CPUs
    • KVM: Support for Group0 interrupts in guests
  • Linux-4.18
    • Support for arm64 SSBD (Speculative Store Bypass Disable) Spectrev4 mitigation using SMC firmware call to set a hardware defined bit
    • ACPI PPTT (Processor Properties Topology Table) parsing support and enable the feature for arm64
    • Turn LSE atomics on by default in Kconfig
    • Support for qspinlock in the generic codebase
    • KVM: Lazy context-switching of FPSIMD registers on arm64
    • KVM: Allow virtual redistributors to be part of two or more MMIO ranges