|
|
Subscribe / Log in / New account

Kernel index

This index covers articles published in the LWN.net Kernel Page. All articles from the beginning of 2004 have been entered here.

Academic systems

Realtime Linux: academia v. reality (July 26, 2010)

Popcorn Linux pops up on linux-kernel (May 5, 2020)

Access control lists

Rich access control lists (October 20, 2015)

ACCESS_ONCE()

ACCESS_ONCE() (August 1, 2012)

ACCESS_ONCE() and compiler bugs (December 3, 2014)

Who's afraid of a big bad optimizing compiler? (July 15, 2019)

ACPI

ACPI, device interrupts, and suspend states (August 3, 2005)

An API for specifying latency constraints (August 28, 2006)

OLS: Three talks on power management (June 30, 2007)

Tripping over trip points (August 7, 2007)

The ACPI processor aggregator driver (October 7, 2009)

The cpuidle subsystem (April 26, 2010)

Idling ACPI idle (June 1, 2010)

ACPI for ARM? (November 22, 2013)

Adore root kit

A new Adore root kit (March 17, 2004)

AdvFS

What's AdvFS good for? (June 25, 2008)

AlacrityVM

AlacrityVM (August 5, 2009)

Two that didn't make it (December 22, 2009)

alloc_skb_from_cache()

alloc_skb_from_cache() (January 4, 2005)

ALSA

Fear of the void (June 9, 2004)

Alternative instructions

SMP alternatives (December 14, 2005)

Android

Wakelocks and the embedded problem (February 10, 2009)

From wakelocks to a real solution (February 18, 2009)

Fishy business (March 3, 2010)

Suspend block (April 28, 2010)

Blocking suspend blockers (May 18, 2010)

Suspend blocker suspense (May 26, 2010)

What comes after suspend blockers (June 1, 2010)

This week's episode of "Desperate Androids" (June 7, 2010)

Another wakeup event mechanism (June 23, 2010)

An alternative to suspend blockers (November 24, 2010)

A new approach to opportunistic suspend (September 27, 2011)

Yet another opportunity for opportunistic suspend (October 18, 2011)

KS2011: Patch review (October 24, 2011)

Bringing Android closer to the mainline (December 20, 2011)

Autosleep and wake locks (February 7, 2012)

The Android ION memory allocator (February 8, 2012)

The Android mainlining interest group meeting: a report (February 28, 2012)

Finding the right evolutionary niche (April 11, 2012)

KS2012: Status of Android upstreaming (September 5, 2012)

LC-Asia: An Android upstreaming update (March 12, 2013)

Integrating the ION memory allocator (September 4, 2013)

The Android Graphics microconference (October 9, 2013)

The LPC Android microconference (October 17, 2013)

In a bind with binder (October 29, 2014)

The LPC Android microconference, part 1 (September 8, 2015)

The LPC Android microconference, part 2 (September 14, 2015)

Running a mainline kernel on a cellphone (October 28, 2015)

Lightning talks (November 4, 2015)

Four new Android privilege escalations (August 10, 2016)

Bringing Android explicit fencing to the mainline (October 5, 2016)

Scheduling for Android devices (November 15, 2016)

The LPC Android microconference, part 1 (December 14, 2016)

The LPC Android microconference, part 2 (December 21, 2016)

Eliminating Android wrapfs "hackery" (April 4, 2017)

Running Android on a mainline graphics stack (September 12, 2017)

An update on the Android problem (November 7, 2017)

Android memory management (May 1, 2019)

Scheduling for the Android display pipeline (January 16, 2020)

Evaluating vendor changes to the scheduler (May 19, 2020)

Android kernel notes from LPC 2020 (September 10, 2020)

KVM for Android (November 11, 2020)

The edge-triggered misunderstanding (August 5, 2021)

Not-so-anonymous virtual memory areas (September 3, 2021)

The end of CONFIG_ANDROID (July 4, 2022)

Juggling software interrupts and realtime tasks (December 2, 2022)

A Rust implementation of Android's Binder (November 30, 2023)

Generic kernel image

Bringing the Android kernel back to the mainline (November 15, 2018)

Monitoring the internal kernel ABI (September 25, 2019)

The intersection of modules, GKI, and rocket science (October 11, 2021)

anonmm

Reverse mapping anonymous pages - again (March 24, 2004)

The status of object-based reverse mapping (May 19, 2004)

anon_vma

Virtual Memory II: the return of objrmap (March 10, 2004)

VM changes in 2.6.6 (April 14, 2004)

The status of object-based reverse mapping (May 19, 2004)

The merging of anon_vma and 4G/4G (May 26, 2004)

The case of the overly anonymous anon_vma (April 13, 2010)

a.out

A way out for a.out (March 24, 2022)

AppArmor

The AppArmor debate begins (April 26, 2006)

Kernel Summit 2006: Security (July 19, 2006)

Linux security non-modules and AppArmor (June 27, 2007)

TOMOYO Linux and pathname-based security (April 14, 2008)

Architectures

UKUUG: The right way to port Linux (November 19, 2008)

System calls and 64-bit architectures (December 17, 2008)

ARM and defconfig files (June 16, 2010)

Little-endian PowerPC (October 6, 2010)

Upcoming DSP architectures (September 7, 2011)

LPC: Coping with hardware diversity (September 14, 2011)

Shedding old architectures and compilers in the kernel (February 26, 2018)

Software and hardware obsolescence in the kernel (August 28, 2020)

The future of 32-bit Linux (December 4, 2020)

The road to Zettalinux (September 16, 2022)

Constant-time instructions and processor optimizations (February 3, 2023)

Arm

ARM's multiply-mapped memory mess (October 12, 2010)

ARM wrestling (April 6, 2011)

Rationalizing the ARM tree (April 19, 2011)

ARM kernel consolidation (May 18, 2011)

Reworking the DMA mapping code (especially on ARM) (November 16, 2011)

Irked by NO_IRQ (December 7, 2011)

Linux support for ARM big.LITTLE (February 15, 2012)

Supporting multi-platform ARM kernels (May 9, 2012)

A big.LITTLE scheduler update (June 12, 2012)

LinuxCon Japan: One zImage to rule them all (June 13, 2012)

Supporting 64-bit ARM systems (July 10, 2012)

Multi-cluster power management (February 20, 2013)

ELC: In-kernel switcher for big.LITTLE (February 27, 2013)

LC-Asia: A big LITTLE MP update (March 6, 2013)

Merging Allwinner support (June 19, 2013)

Supporting KVM on the ARM architecture (July 3, 2013)

Minisummit reports (October 29, 2013)

ACPI for ARM? (November 22, 2013)

Handling ARM architecture changes (July 23, 2014)

The Arm64 memory tagging extension in Linux (October 15, 2020)

Scheduling for asymmetric Arm systems (November 30, 2020)

Support for the TSO memory model on Arm CPUs (April 26, 2024)

ia64

Kernel code on the chopping block (January 19, 2023)

The push to save Itanium (November 9, 2023)

Porting to

Porting Linux to a new processor architecture, part 1: The basics (August 26, 2015)

Porting Linux to a new processor architecture, part 2: The early code (September 2, 2015)

Porting Linux to a new processor architecture, part 3: To the finish line (September 23, 2015)

RISC-V

Why RISC-V doesn't (yet) support KVM (May 20, 2021)

SuperH

Kernel code on the chopping block (January 19, 2023)

x86

i386 and x86_64: back together? (July 31, 2007)

Detecting and handling split locks (June 7, 2019)

Developers split over split-lock detection (December 6, 2019)

VMX virtualization runs afoul of split-lock detection (April 7, 2020)

A possible end to the FSGSBASE saga (June 1, 2020)

Kernel support for processor undervolting (November 2, 2020)

User-space interrupts (September 30, 2021)

Intel AMX support in 5.16 (November 8, 2021)

Pointer tagging for x86 systems (March 28, 2022)

Support for Intel's Linear Address Masking (July 25, 2022)

The search for the correct amount of split-lock misery (October 19, 2022)

Support for Intel's LASS (January 13, 2023)

The Linux SVSM project (January 30, 2023)

Seeking an acceptable unaccepted memory policy (April 6, 2023)

Pitchforks for RDSEED (February 8, 2024)

A RDRAND followup (February 26, 2024)

Asymmetric multiprocessing

Dealing with complexity: power domains and asymmetric multiprocessing (June 29, 2011)

Asynchronous function calls

An asynchronous function call infrastructure (January 13, 2009)

Deadlocking the system with asynchronous functions (January 16, 2013)

Asynchronous I/O

A retry-based AIO infrastructure (March 2, 2004)

Kernel Summit: Asynchronous I/O (July 21, 2004)

Asynchronous I/O and vectored operations (February 7, 2006)

The kevent interface (February 22, 2006)

OLS: A proposal for a new networking API (July 22, 2006)

API changes: interrupt handlers and vectored I/O (October 2, 2006)

Asynchronous buffered file I/O (January 3, 2007)

Fibrils and asynchronous system calls (January 31, 2007)

Kernel fibrillation (February 6, 2007)

Threadlets (February 27, 2007)

The return of syslets (May 30, 2007)

LCA: A new approach to asynchronous I/O (January 27, 2009)

LSFMM: Reducing io_submit() latency (May 1, 2013)

Non-blocking buffered file read operations (September 23, 2014)

Asynchronous buffered read operations (March 18, 2015)

Fixing asynchronous I/O, again (January 13, 2016)

Toward non-blocking asynchronous I/O (May 30, 2017)

A new kernel polling interface (January 9, 2018)

Ringing in a new asynchronous I/O API (January 15, 2019)

io_uring, SCM_RIGHTS, and reference-count cycles (February 13, 2019)

Asynchronous fsync() (May 21, 2019)

The rapid growth of io_uring (January 24, 2020)

Automatic buffer selection for io_uring (March 20, 2020)

Operations restrictions for io_uring (July 15, 2020)

Zero-copy network transmission with io_uring (December 30, 2021)

Atomic I/O operations

Atomic I/O operations (May 30, 2013)

Support for atomic block I/O operations (November 6, 2013)

A way to do atomic writes (May 28, 2019)

Atomic block-write operations (May 30, 2023)

Atomic writes without tears (May 24, 2024)

Atomic operations

Atomic usage patterns in the kernel (August 31, 2016)

Atomic patterns 2: coupled atomics (September 7, 2016)

Atomic spinlocks

The realtime preemption endgame (August 5, 2009)

The realtime preemption mini-summit (September 28, 2009)

atomic_t

No more 24-bit atomic_t (February 18, 2004)

The search for fast, scalable counters (February 1, 2006)

Atomic additions (July 20, 2015)

Two approaches to reference count hardening (July 7, 2016)

Atomic primitives in the kernel (July 27, 2016)

The bumpy road to reference-count protection in the kernel (November 16, 2016)

Auditing

The lightweight auditing framework (April 7, 2004)

More hooks for kernel events (February 9, 2005)

Who audits the audit code? (May 29, 2014)

Audit, namespaces, and containers (September 8, 2016)

Container IDs for the audit subsystem (December 6, 2017)

An audit container ID proposal (March 29, 2018)

Auditing io_uring (June 3, 2021)

Automounter

Trapfs - an automounter on the cheap (November 3, 2004)

Auxiliary bus

Managing multifunction devices with the auxiliary bus (December 17, 2020)

Beancounters

Resource beancounters (August 29, 2006)

Benchmarking

Automated kernel testing (June 8, 2005)

Tracking tbench troubles (October 29, 2008)

A survey of scheduler benchmarks (June 14, 2017)

Testing scheduler thermal properties for avionics (May 15, 2020)

Scheduler benchmarking with MMTests (May 19, 2020)

Big kernel lock

The Big Kernel Lock lives on (May 26, 2004)

The Big Kernel Semaphore? (September 15, 2004)

ioctl(), the big kernel lock, and 32-bit compatibility (December 15, 2004)

The new way of ioctl() (January 18, 2005)

The big kernel lock strikes again (May 13, 2008)

Kill BKL Vol. 2 (May 21, 2008)

The BKL end game (March 30, 2010)

Might 2.6.35 be BKL-free? (April 27, 2010)

BKL-free in 2.6.37 (maybe) (September 20, 2010)

Shielding driver authors from locking (October 20, 2010)

KS2010: Lightning talks (November 2, 2010)

The real BKL end game (January 26, 2011)

big.LITTLE

Linux support for ARM big.LITTLE (February 15, 2012)

A big.LITTLE scheduler update (June 12, 2012)

KS2012: ARM: A big.LITTLE update (September 5, 2012)

A report from the first Korea Linux Forum (October 16, 2012)

Multi-cluster power management (February 20, 2013)

ELC: In-kernel switcher for big.LITTLE (February 27, 2013)

LC-Asia: A big LITTLE MP update (March 6, 2013)

Fixing a corner case in asymmetric CPU packing (January 7, 2022)

Bind mounts

Read-only bind mounts (May 6, 2008)

Mount namespaces, mount propagation, and unbindable mounts (June 15, 2016)

binfmt_misc

Architecture emulation containers with binfmt_misc (March 9, 2016)

BitKeeper

The kernel and BitKeeper part ways (April 6, 2005)

Block layer

Laptop mode for 2.6 (January 7, 2004)

CDROM drives and partitioning (February 25, 2004)

The return of write barriers (March 24, 2004)

Big block transfers: good or bad? (March 29, 2004)

Coming in 2.6.10 (October 20, 2004)

Network block devices and OOM safety (March 30, 2005)

Execute-in-place (May 11, 2005)

Kernel Summit 2005: Convergence of network and storage paths (July 20, 2005)

Some block layer patches (October 26, 2005)

Large block size support (May 2, 2007)

Distributed storage (August 21, 2007)

Barriers and journaling filesystems (May 21, 2008)

Block layer: integrity checking and lots of partitions (July 15, 2008)

A superficial introduction to fsblock (March 11, 2009)

Flushing out pdflush (April 1, 2009)

Linux Storage and Filesystem workshop, day 1 (April 7, 2009)

Linux Storage and Filesystem Workshop, day 2 (April 8, 2009)

DRBD: a distributed block device (April 22, 2009)

Interrupt mitigation in the block layer (August 10, 2009)

Page-based direct I/O (August 25, 2009)

The 2010 Linux Storage and Filesystem Summit, day 1 (August 9, 2010)

The 2010 Linux Storage and Filesystem Summit, day 2 (August 10, 2010)

The end of block barriers (August 18, 2010)

Notes from the block layer (February 22, 2011)

Linux Filesystem, Storage, and Memory Management Summit, Day 1 (April 5, 2011)

Future storage technologies and Linux (April 6, 2011)

Linux Filesystem, Storage, and Memory Management Summit, Day 2 (April 6, 2011)

Supporting block I/O contexts (June 18, 2012)

LSFMM: I/O hints (April 24, 2013)

LSFMM: Copy offload (April 24, 2013)

LSFMM: O_DIRECT (May 1, 2013)

The multiqueue block layer (June 5, 2013)

Tags and IDs (June 19, 2013)

Polling block drivers (June 26, 2013)

Filesystem/block interfaces (March 17, 2015)

Copy offload (March 25, 2015)

Write-stream IDs (April 7, 2015)

Block-layer I/O polling (November 11, 2015)

Block and filesystem interfaces (April 26, 2016)

Partial drive depopulation (April 27, 2016)

Quickly: Filesystems and containers / Self-encrypting drives (April 27, 2016)

Multipage bio_vecs (May 4, 2016)

Inline encryption support for block devices (March 22, 2017)

Stream ID status update (March 29, 2017)

A block layer introduction part 1: the bio layer (October 25, 2017)

Block layer introduction part 2: the request layer (November 9, 2017)

A mapping layer for filesystems (May 9, 2018)

Supporting multi-actuator drives (May 15, 2018)

A filesystem corruption bug breaks loose (December 10, 2018)

The Linux "copy problem" (May 29, 2019)

Block-device snapshots with blksnap (November 14, 2022)

A kernel without buffer heads (May 1, 2023)

Sunsetting buffer heads (May 18, 2023)

Cloud-storage optimizations (May 26, 2023)

Supporting large block sizes (June 5, 2023)

Merging copy offload (June 21, 2023)

Moving the kernel to large block sizes (September 27, 2023)

Atomic operations

Atomic I/O operations (May 30, 2013)

Support for atomic block I/O operations (November 6, 2013)

A way to do atomic writes (May 28, 2019)

Atomic block-write operations (May 30, 2023)

Atomic writes without tears (May 24, 2024)

Block drivers

Cleaning up the block driver API (August 28, 2007)

A new block request completion API (January 29, 2008)

How to use a terabyte of RAM (March 12, 2008)

Block layer: solid-state storage, timeouts, affinity, and more (October 15, 2008)

Block layer request queue API changes (May 18, 2009)

Reworking disk events handling (January 19, 2011)

An io_uring-based user-space block driver (August 8, 2022)

Crash recovery for user-space block drivers (August 29, 2022)

Zero-copy I/O for ublk, three different ways (March 16, 2023)

Caching

Bcache: Caching beyond just RAM (July 2, 2010)

A bcache update (May 14, 2012)

LSFMM: Caching — dm-cache and bcache (May 1, 2013)

Discard operations

Block layer discard requests (August 12, 2008)

The trouble with discard (August 18, 2009)

The best way to throw blocks away (December 1, 2010)

Issues around discard (May 6, 2019)

Error handling

Improved block-layer error handling (June 2, 2017)

PostgreSQL's fsync() surprise (April 18, 2018)

PostgreSQL visits LSFMM (May 1, 2018)

Handling I/O errors in the kernel (June 12, 2018)

I/O scheduling

Modular, switchable I/O schedulers (September 21, 2004)

Into the ABISS (November 9, 2004)

Which is the fairest I/O scheduler of them all? (December 8, 2004)

CFQ v3 (July 12, 2005)

Variations on fair I/O schedulers (December 3, 2008)

Which I/O controller is the fairest of them all? (May 12, 2009)

The block I/O controller (November 7, 2009)

Hierarchical group I/O scheduling (February 15, 2011)

An IOPS-based I/O scheduler (January 4, 2012)

KS2012: memcg/mm: Proportional I/O controller (September 17, 2012)

The BFQ I/O scheduler (June 11, 2014)

The return of the BFQ I/O scheduler (February 3, 2016)

A way forward for BFQ (December 14, 2016)

Two new block I/O schedulers for 4.12 (April 24, 2017)

Measuring (and fixing) I/O-controller throughput loss (August 29, 2018)

I/O scheduling for single-queue devices (October 12, 2018)

Improving the performance of the BFQ I/O scheduler (March 29, 2019)

Large physical sectors

Linux and 4K disk sectors (March 11, 2009)

4K-sector drives and Linux (March 9, 2010)

Preparing for large-sector drives (January 29, 2014)

Handling 32KB-block drives (March 18, 2015)

Loopback device

A weak cryptoloop implementation in Linux? (January 21, 2004)

Partitioned loopback devices (November 10, 2004)

Asynchronous block loop I/O (January 30, 2013)

Private loop devices with loopfs (May 7, 2020)

Object storage devices

Linux and object storage devices (November 4, 2008)

Plugging

No more global unplugging (March 10, 2004)

Explicit block device plugging (April 13, 2011)

What happened to disk performance in 2.6.39 (January 31, 2012)

RAID

Journal-guided RAID resync (November 24, 2009)

DM and MD come a little closer (April 20, 2010)

The MD roadmap (February 16, 2011)

Another kernel RAID5 implementation (October 18, 2011)

A journal for MD/RAID5 (November 24, 2015)

Cluster support for MD/RAID 1 (February 3, 2016)

Scalability

More IOPS with BIO caching (September 6, 2021)

The balance between features and performance in the block layer (November 5, 2021)

Solid-state storage devices

Solid-state storage devices and the block layer (October 4, 2010)

Supporting solid-state hybrid drives (November 5, 2014)

Taking control of SSDs with LightNVM (April 22, 2015)

Testing

Challenges with fstests and blktests (June 1, 2022)

Best practices for fstests (June 7, 2022)

Writeback

In defense of per-BDI writeback (September 30, 2009)

Handling writeback errors (April 4, 2017)

Fixing error reporting—again (April 25, 2018)

Zoned devices

Filesystems for zoned block devices (May 21, 2019)

Accessing zoned block devices with zonefs (July 23, 2019)

Btrfs on zoned block devices (April 19, 2021)

Zoned storage (June 14, 2022)

Zoned storage and filesystems (May 25, 2023)

Bogomips

Haunted by ancient history (January 6, 2015)

Books

Linux Kernel Development, Second Edition (March 9, 2005)

Linux Device Drivers, Third Edition now online (March 15, 2005)

The Linux Kernel Primer (October 5, 2005)

Understanding the Linux Kernel, 3rd Edition (November 22, 2005)

Review: Understanding Linux Network Internals (January 24, 2006)

Book Review: User Mode Linux (May 16, 2006)

Review: Linux Kernel in a Nutshell (February 7, 2007)

Book review: Linux System Programming (December 5, 2007)

Book review: Linux Kernel Development, third edition (December 15, 2010)

Review: The Linux Programming Interface (January 19, 2011)

Bootstrap process

initramfs and where user space truly begins (July 11, 2006)

LPC: Booting Linux in five seconds (September 22, 2008)

Tracking down a "runaway loop" (December 10, 2008)

An asynchronous function call infrastructure (January 13, 2009)

USB and fast booting (April 29, 2009)

The bootstrap process on EFI systems (February 11, 2015)

Toward measured boot out of the box (September 8, 2016)

BPF

A JIT for packet filters (April 12, 2011)

BPF: the universal in-kernel virtual machine (May 21, 2014)

Extending extended BPF (July 2, 2014)

A reworked BPF API (July 23, 2014)

A report from the networking miniconference (August 27, 2014)

The BPF system call API, version 14 (September 24, 2014)

Persistent BPF objects (November 18, 2015)

Last-minute control-group BPF ABI concerns (January 11, 2017)

Notes from the LPC tracing microconference (September 21, 2017)

A thorough introduction to eBPF (December 2, 2017)

Some advanced BCC topics (February 22, 2018)

Bpfilter (and user-mode blobs) for 4.18 (May 30, 2018)

Binary portability for BPF programs (November 30, 2018)

Concurrency management in BPF (February 7, 2019)

Managing sysctl knobs with BPF (April 9, 2019)

BPF: what's good, what's coming, and what's needed (May 9, 2019)

BPF at Facebook (and beyond) (October 10, 2019)

BPF and the realtime patch set (October 23, 2019)

Filesystem sandboxing with eBPF (November 6, 2019)

A medley of performance-related BPF patches (January 2, 2020)

Kernel operations structures in BPF (February 7, 2020)

A look at "BPF Performance Tools" (February 26, 2020)

Dumping kernel data structures with BPF (April 27, 2020)

Rethinking bpfilter and user-mode helpers (June 12, 2020)

Sleepable BPF programs (July 7, 2020)

iproute2 and libbpf: vendoring on the small scale (November 12, 2020)

BPF meets io_uring (March 4, 2021)

Toward signed BPF programs (April 22, 2021)

Calling kernel functions from BPF (May 13, 2021)

Implementing eBPF for Windows (June 10, 2021)

Taming the BPF superpowers (September 29, 2021)

Controlling the CPU scheduler with BPF (October 21, 2021)

Long-lived kernel pointers in BPF (July 14, 2022)

The BPF panic function (July 18, 2022)

How far do we want to go with BPF? (September 19, 2022)

BPF as a safer kernel programming environment (September 23, 2022)

Reconsidering BPF ABI stability (January 26, 2023)

Red-black trees for BPF programs (February 27, 2023)

User-space control of memory management (May 15, 2023)

Special file descriptors in BPF (June 5, 2023)

BPF iterators for filesystems (July 6, 2023)

The FUSE BPF filesystem (July 11, 2023)

Exceptions in BPF (July 21, 2023)

The challenge of compiling for verified architectures (October 6, 2023)

Cleaning up after BPF exceptions (April 15, 2024)

A plan to make BPF kfuncs polymorphic (May 20, 2024)

Virtual machine scheduling with BPF (May 22, 2024)

Recent improvements to BPF's struct_ops mechanism (May 24, 2024)

LLVM improvements for BPF verification (May 27, 2024)

An instruction-level BPF memory model (June 4, 2024)

Modernizing BPF for the next 10 years (June 7, 2024)

Securing BPF programs before and after verification (June 11, 2024)

Simplifying the BPF verifier (June 13, 2024)

Static keys for BPF (June 17, 2024)

BPF tracing performance (June 18, 2024)

Capturing stack traces asynchronously with BPF (June 19, 2024)

CRIB: checkpoint/restore in BPF (August 7, 2024)

CPU scheduling

The extensible scheduler class (February 10, 2023)

Improving performance with SCHED_EXT and IOCost (April 1, 2024)

Another push for sched_ext (May 9, 2024)

What's scheduled for sched_ext (May 23, 2024)

Device drivers

IR decoding with BPF (July 9, 2018)

BPF for HID drivers (September 26, 2022)

The BPF-programmable network device (November 6, 2023)

Loops

Bounded loops in BPF programs (December 3, 2018)

Bounded loops in BPF for the 5.3 kernel (July 31, 2019)

A different approach to BPF loops (November 29, 2021)

Generic iterators for BPF (March 17, 2023)

Better linked-list traversal in BPF (March 8, 2024)

Memory management

A memory allocator for BPF code (February 4, 2022)

The BPF allocator runs into trouble (April 29, 2022)

A BPF-specific memory allocator (June 30, 2022)

Yet another try at the BPF program allocator (November 28, 2022)

Out-of-memory victim selection with BPF (August 17, 2023)

A proposal for shared memory in BPF programs (February 21, 2024)

Networking

Attaching eBPF programs to sockets (December 10, 2014)

Early packet drop — and more — with BPF (April 6, 2016)

Network filtering for control groups (August 24, 2016)

BPF comes to firewalls (February 19, 2018)

Writing network flow dissectors in BPF (September 6, 2018)

P4TC hits a brick wall (June 10, 2024)

Security

Yet another new approach to seccomp (January 11, 2012)

Kernel runtime security instrumentation (September 4, 2019)

KRSI — the other BPF security module (December 27, 2019)

KRSI and proprietary BPF programs (January 17, 2020)

Impedance matching for BPF and LSM (February 26, 2020)

A crop of new capabilities (June 8, 2020)

eBPF seccomp() filters (May 31, 2021)

Spectre revisits BPF (June 24, 2021)

Unprivileged BPF and authoritative security hooks (April 27, 2023)

Delegating privilege with BPF tokens (June 22, 2023)

BPF and security (October 4, 2023)

Finer-grained BPF tokens (October 12, 2023)

Standardization

Standardizing BPF (April 10, 2023)

Standardizing the BPF ISA (May 30, 2024)

Tracing

BPF tracing filters (December 4, 2013)

Ktap or BPF? (April 23, 2014)

Ftrace and histograms: a fork in the road (March 4, 2015)

Tracepoints with BPF (April 13, 2016)

Using user-space tracepoints with BPF (May 11, 2018)

The state of system observability with BPF (May 1, 2019)

Kernel analysis with bpftrace (July 18, 2019)

Type checking for BPF tracing (October 28, 2019)

Relief for insomniac tracepoints (October 29, 2020)

User events — but not quite yet (April 18, 2022)

Unprivileged

Unprivileged bpf() (October 12, 2015)

Providing wider access to bpf() (June 27, 2019)

Reconsidering unprivileged BPF (August 16, 2019)

Broadcom 43xx

bcm43xx and the 802.11 stack (December 6, 2005)

How not to handle a licensing violation (April 11, 2007)

Broadcom's wireless drivers, one year later (August 29, 2011)

Btrfs

btrfs and NILFS (June 19, 2007)

A better btrfs (January 15, 2008)

Btrfs aims for the mainline (January 7, 2009)

A short history of btrfs (July 22, 2009)

JLS2009: A Btrfs update (October 27, 2009)

Supporting transactions in btrfs (November 11, 2009)

Btrfs: broken by design? (June 22, 2010)

Data temperature in Btrfs (August 3, 2010)

Whither btrfsck? (October 11, 2011)

A btrfs update at LinuxCon Europe (November 2, 2011)

Atime and btrfs: a bad combination? (May 31, 2012)

Btrfs send/receive (July 11, 2012)

VFS hot-data tracking (November 20, 2012)

LSFMM: Btrfs: "are we there yet?" (May 1, 2013)

CoreOS looks to move from Btrfs to overlayfs (December 24, 2014)

In-band deduplication for Btrfs (March 9, 2016)

Btrfs and high-speed devices (August 24, 2016)

Adding encryption to Btrfs (September 21, 2016)

Btrfs at Facebook (July 2, 2020)

epoll_pwait2(), close_range(), and encoded I/O (November 20, 2020)

LWN's guide to

The Btrfs filesystem: An introduction (December 11, 2013)

Btrfs: Getting started (December 17, 2013)

Btrfs: Working with multiple devices (December 30, 2013)

Btrfs: Subvolumes and snapshots (January 6, 2014)

Btrfs: Send/receive and ioctl() (January 22, 2014)

Budget fair queuing scheduler

Variations on fair I/O schedulers (December 3, 2008)

Buffered I/O

Measuring and improving buffered I/O (June 5, 2024)

Buffer heads

A nasty file corruption bug - fixed (December 31, 2006)

Build system

Shrinking the kernel with gcc (January 21, 2004)

Building external modules (April 13, 2004)

Separating kernel source and object files (June 23, 2004)

The end of gcc 2.95 support (December 13, 2005)

Some patches of interest (February 28, 2006)

Testing crypto drivers at boot time (August 18, 2010)

Link-time optimization for the kernel (August 21, 2012)

Special sections in Linux binaries (January 3, 2013)

Creating a kernel build farm (October 5, 2016)

The end of modversions? (November 30, 2016)

Shrinking the kernel with link-time garbage collection (December 15, 2017)

Shrinking the kernel with link-time optimization (January 18, 2018)

Shedding old architectures and compilers in the kernel (February 26, 2018)

Compiling kernel UAPI headers with C++ (September 13, 2018)

Building header files into the kernel (March 21, 2019)

Old compilers and old bugs (January 11, 2021)

Moving the kernel to modern C (February 24, 2022)

A framework for code tagging (September 1, 2022)

Would you like signs with those chars? (October 24, 2022)

The trouble with MODULE_LICENSE() in non-modules (March 30, 2023)

Code tagging and memory-allocation profiling (May 31, 2023)

Maximal min() and max() (August 1, 2024)

A new version of modversions (August 26, 2024)

GCC plugins

Better kernels with GCC plugins (October 5, 2011)

Kernel building with GCC plugins (June 14, 2016)

A pair of GCC plugins (January 25, 2017)

The future of GCC plugins in the kernel (April 1, 2021)

Kernel configuration

Kconfiglib (February 2, 2011)

Kernel configuration for distributions (July 18, 2012)

A different approach to kernel configuration (September 12, 2017)

The end of CONFIG_ANDROID (July 4, 2022)

bus1

Bus1: a new Linux interprocess communication proposal (August 17, 2016)

C11 atomic operations

C11 atomic variables and the kernel (February 18, 2014)

C11 atomics part 2: "consume" semantics (February 26, 2014)

Time to move to C11 atomics? (June 15, 2016)

CacheFS

A general caching filesystem (September 1, 2004)

Capabilities

Capabilities in 2.6 (April 6, 2004)

Magic groups in 2.6 (May 11, 2004)

Trustees Linux (November 16, 2004)

A bid to resurrect Linux capabilities (September 10, 2006)

File-based capabilities (November 29, 2006)

Fixing CAP_SETPCAP (October 31, 2007)

Restricting root with per-process securebits (April 30, 2008)

Capabilities for loading network modules (March 2, 2011)

CAP_SYS_ADMIN: the new root (March 14, 2012)

The trouble with CAP_SYS_RAWIO (March 13, 2013)

BSD-style securelevel comes to Linux — again (September 11, 2013)

Inheriting capabilities (February 11, 2015)

The kdbuswreck (April 22, 2015)

Tracking resources and capabilities used (July 13, 2016)

Namespaced file capabilities (June 30, 2017)

CAP_PERFMON — and new capabilities in general (February 21, 2020)

A crop of new capabilities (June 8, 2020)

A capability set for user namespaces (June 20, 2024)

CD recording

SCSI command filtering (July 31, 2006)

2.6.8 problems

2.6.8 and CD recording (August 18, 2004)

CFQ I/O scheduler

Which is the fairest I/O scheduler of them all? (December 8, 2004)

CFQ v3 (July 12, 2005)

Variations on fair I/O schedulers (December 3, 2008)

Changelogs

In search of the perfect changelog (April 22, 2009)

What's missing from our changelogs (July 24, 2013)

Character encoding

The kernel and character set encodings (February 18, 2004)

Working with UTF-8 in the kernel (March 28, 2019)

Char devices

The cdev interface (August 16, 2006)

Checkpointing

Kernel-based checkpoint and restart (August 11, 2008)

Checkpoint/restart tries to head towards the mainline (February 25, 2009)

clone_with_pids() (August 12, 2009)

eclone() (November 18, 2009)

A Checkpoint/restart update (February 24, 2010)

KS2010: Checkpoint/restart (November 2, 2010)

Checkpoint/restart: it's complicated (November 9, 2010)

Checkpoint/restart (mostly) in user space (July 19, 2011)

TCP connection hijacking and parasites - as a good thing (August 9, 2011)

Preparing for user-space checkpoint/restore (January 31, 2012)

TCP connection repair (May 1, 2012)

LCE: Checkpoint/restore in user space: are we there yet? (November 20, 2012)

Checkpoint/restore and signals (January 9, 2013)

Checkpoint/restart in user space (October 29, 2013)

A crop of new capabilities (June 8, 2020)

The intersection of shadow stacks and CRIU (December 16, 2022)

CRIB: checkpoint/restore in BPF (August 7, 2024)

CIFS

On the future of smbfs (May 15, 2006)

LSFMM: User space NFS and CIFS servers (May 1, 2013)

Circular buffers

Coming in 2.6.10 (October 20, 2004)

Circular pipes (January 11, 2005)

The evolution of pipe buffers (January 18, 2005)

Class-based resource management

Kernel Summit: Class-based Kernel Resource Management (July 21, 2004)

Is CKRM worth it? (July 27, 2005)

Briefly: patch quality, CKRM, likely(), and vmsplice() (May 3, 2006)

Resource beancounters (August 29, 2006)

class_simple

Safe sysfs support (February 11, 2004)

Clockevents

Clockevents and dyntick (February 21, 2007)

CLOCK-Pro

A CLOCK-Pro page replacement implementation (August 16, 2005)

A framework for page replacement policies (March 25, 2006)

Clocks

A common clock framework (December 21, 2011)

Closures

The kernel "closure" API (January 11, 2024)

Clusters

Clusters and distributed lock management (May 18, 2005)

Kernel Summit 2005: Clustering (July 20, 2005)

DRBD: a distributed block device (April 22, 2009)

Popcorn Linux pops up on linux-kernel (May 5, 2020)

Cluster summit presentations

Presentations from the cluster summit (August 11, 2004)

Filesystems

Should the Lustre preparation patches go in? (June 9, 2004)

Kernel Summit: Clustered storage (July 21, 2004)

The OCFS2 filesystem (May 24, 2005)

Time to merge GFS? (August 10, 2005)

Merging GFS2 (September 7, 2005)

New NFS to bring parallel storage to the masses (January 21, 2009)

A look inside the OCFS2 filesystem (September 1, 2010)

Loopback NFS: theory and practice (April 23, 2014)

cmpxchg()

RCU-safe reference counting (July 14, 2004)

Introducing lockrefs (September 4, 2013)

Lockless patterns: an introduction to compare-and-swap (March 12, 2021)

Lockless patterns: more read-modify-write operations (March 19, 2021)

Coding style

How likely should likely() be? (February 10, 2004)

The cost of inline functions (April 28, 2004)

Fear of the void (June 9, 2004)

NULL v. zero (July 14, 2004)

Kernel headers and user space (November 30, 2004)

The coding style enforcer (May 11, 2005)

Drawing the line on inline (January 3, 2006)

The trouble with volatile (May 9, 2007)

Coding-style exceptionalism (July 20, 2016)

An end to implicit fall-throughs in the kernel (August 1, 2019)

Completions

Some 2.6.11 API changes (January 25, 2005)

Computational storage

Computational storage (May 17, 2023)

Compute Express Link (CXL)

CXL 1: Management and tiering (May 13, 2022)

CXL 2: Pooling, sharing, and I/O-memory resources (May 19, 2022)

A storage standards update at LSFMM+BPF (May 11, 2023)

Memory-management changes for CXL (May 12, 2023)

The future of memory tiering (May 12, 2023)

Live migration of virtual machines over CXL (May 15, 2023)

Peer-to-peer DMA (May 16, 2023)

Two sessions on CXL memory (May 22, 2024)

Famfs: a filesystem interface to shareable memory (July 30, 2024)

Confidential computing

The Linux SVSM project (January 30, 2023)

Seeking an acceptable unaccepted memory policy (April 6, 2023)

Security topics: io_uring, VM attestation, and random-reseed notifications (September 4, 2023)

Guest-first memory for KVM (November 2, 2023)

Pitchforks for RDSEED (February 8, 2024)

A RDRAND followup (February 26, 2024)

Configfs

Configfs - an introduction (August 24, 2005)

Configfs - the API (August 24, 2005)

Containers

Containers and PID virtualization (January 17, 2006)

PID virtualization: a wealth of choices (February 8, 2006)

Containers and lightweight virtualization (April 10, 2006)

Kernel Summit 2006: Paravirtualization and containers (July 19, 2006)

Another container implementation (September 19, 2006)

Process containers (May 29, 2007)

Controlling memory use in containers (July 31, 2007)

KS2007: Containers (September 10, 2007)

Process IDs in a multi-namespace world (November 6, 2007)

System call updates: indirect(), timerfd(), and hijack() (November 28, 2007)

Kernel-based checkpoint and restart (August 11, 2008)

Checkpoint/restart tries to head towards the mainline (February 25, 2009)

Which I/O controller is the fairest of them all? (May 12, 2009)

clone_with_pids() (August 12, 2009)

A Checkpoint/restart update (February 24, 2010)

Divorcing namespaces from processes (March 3, 2010)

Namespace file descriptors (September 29, 2010)

Mob rule for dentries (May 4, 2011)

Checkpoint/restart (mostly) in user space (July 19, 2011)

Running distributions in containers (October 12, 2011)

A new approach to user namespaces (April 10, 2012)

TCP connection repair (May 1, 2012)

LCE: The failure of operating systems and how we can fix it (November 14, 2012)

Namespaces in operation, part 1: namespaces overview (January 4, 2013)

SO_PEERCGROUP: which container is calling? (March 18, 2014)

Architecture emulation containers with binfmt_misc (March 9, 2016)

Virtual machines as containers (April 23, 2016)

Quickly: Filesystems and containers / Self-encrypting drives (April 27, 2016)

Containers, pseudo TTYs, and backward compatibility (June 1, 2016)

Container-aware filesystems (April 3, 2017)

Containers as kernel objects (May 23, 2017)

Process tagging with ptags (December 13, 2017)

An audit container ID proposal (March 29, 2018)

Containers as kernel objects — again (February 22, 2019)

A filesystem for namespaces (December 3, 2021)

System-call interception for unprivileged containers (June 29, 2022)

Mounting images inside a user namespace (June 13, 2023)

Contiguous memory allocator

Contiguous memory allocation for drivers (July 21, 2010)

A reworked contiguous memory allocator (June 14, 2011)

CMA and ARM (July 5, 2011)

A deep dive into CMA (March 14, 2012)

CMA and compaction (April 23, 2016)

Control groups

Integrating memory control groups (May 17, 2011)

LPC: Control groups (September 20, 2011)

Timer slack for slacker developers (October 17, 2011)

Limiting system calls via control groups? (October 19, 2011)

KS2011: Coming to love control groups (October 24, 2011)

Per-cgroup TCP buffer limits (December 6, 2011)

Fixing control groups (February 28, 2012)

Two approaches to kernel memory usage accounting (March 7, 2012)

A proposed plan for control groups (March 14, 2012)

KS2012: memcg/mm: Improving kernel-memory accounting for memory cgroups (September 17, 2012)

Throwing one away (September 19, 2012)

The mempressure control group proposal (January 3, 2013)

LSFMM: Soft reclaim (April 23, 2013)

When the kernel ABI has to change (July 2, 2013)

The evolution of control groups (October 29, 2013)

The past, present, and future of control groups (November 20, 2013)

Another daemon for managing control groups (December 5, 2013)

The unified control group hierarchy in 3.16 (June 11, 2014)

Control group namespaces (November 19, 2014)

Memory control group fairness (April 27, 2016)

Tracking resources and capabilities used (July 13, 2016)

Network filtering for control groups (August 24, 2016)

Last-minute control-group BPF ABI concerns (January 11, 2017)

A resolution on control-group network filters (February 15, 2017)

Three sessions on memory control groups (May 1, 2018)

Cleaning up after dying control groups (May 7, 2019)

Remote memory control-group charging (May 7, 2019)

Shrinking filesystem caches for dying control groups (May 29, 2019)

The burstable CFS bandwidth controller (February 8, 2021)

A "kill" button for control groups (May 3, 2021)

Cleaning up dying control groups, 2022 edition (May 19, 2022)

Fighting the zombie-memcg invasion (May 19, 2023)

The twilight of the version-1 memory controller (May 23, 2024)

I/O bandwidth controllers

Writeback and control groups (June 17, 2015)

Controlling block-I/O latency (May 3, 2018)

The block I/O latency controller (July 5, 2018)

The creation of the io.latency block I/O controller (March 14, 2019)

The io.weight I/O-bandwidth controller (June 28, 2019)

Improving performance with SCHED_EXT and IOCost (April 1, 2024)

LWN's guide to

Control groups, part 1: On the history of process grouping (July 1, 2014)

Control groups, part 2: On the different sorts of hierarchies (July 9, 2014)

Control groups, part 3: First steps to control (July 16, 2014)

Control groups, part 4: On accounting (July 23, 2014)

Control groups, part 5: The cgroup hierarchy (July 30, 2014)

Control groups, part 6: A look under the hood (August 6, 2014)

Control groups, part 7: To unity and beyond (August 13, 2014)

Thread-level control

Thread-level management in control groups (September 1, 2015)

Thread-level control with resource groups (March 16, 2016)

The case of the stalled CPU controller (August 17, 2016)

Control-group thread mode (February 22, 2017)

A milestone for control groups (July 31, 2017)

Coprocessors

LSFMM: Coprocessors, exit times, and volatile ranges, and more (April 23, 2013)

Copyright issues

Buying the kernel (October 13, 2004)

The kernel and binary firmware (April 6, 2005)

The Philips webcam driver - again (May 4, 2005)

The Developer's Certificate of Origin, v1.1 (June 15, 2005)

On the value of EXPORT_SYMBOL_GPL (October 5, 2005)

On binary drivers and stable interfaces (November 9, 2005)

EXPORT_SYMBOL_GPL_FUTURE() (February 13, 2006)

Code of uncertain origin (August 9, 2006)

Code of (still) uncertain origin (August 15, 2006)

Resolved: firmware is not software (August 23, 2006)

GPL-only symbols and ndiswrapper (October 25, 2006)

Why binary-only modules were not banned (December 20, 2006)

How not to handle a licensing violation (April 11, 2007)

More quotes of the week - scenes from a flame war (June 19, 2007)

NDISwrapper dodges another bullet (March 5, 2008)

Kernel markers and binary-only modules (March 24, 2008)

Relicensing tracepoints and markers (November 4, 2009)

The trouble with firmware (January 5, 2011)

Bounding GPL compliance times (February 9, 2011)

dma-buf and binary-only modules (February 22, 2012)

The exfiltrated exFAT driver (July 24, 2013)

Questioning EXPORT_SYMBOL_GPL() (June 23, 2014)

The kernel community confronts GPL enforcement (August 31, 2016)

Maintainers Summit: SPDX, cross-subsystem development, and conclusion (November 8, 2017)

SPDX identifiers in the kernel (November 16, 2017)

Heterogeneous memory management meets EXPORT_SYMBOL_GPL() (June 12, 2018)

The proper use of EXPORT_SYMBOL_GPL() (October 27, 2018)

Netgpu and the hazards of proprietary kernel modules (July 31, 2020)

Copyleft-next and the kernel (July 13, 2021)

Copyright notices (or the lack thereof) in kernel code (October 27, 2022)

Making life (even) harder for proprietary modules (August 3, 2023)

copy_*_user()

Hardened usercopy (August 3, 2016)

Hardened usercopy whitelisting (July 7, 2017)

Two topics in user-space access (March 5, 2019)

Proposed return value change

API changes under consideration (August 24, 2004)

COW links

COW Links (March 29, 2004)

cpufreq

Fixing the ondemand governor (April 20, 2010)

Improvements in CPU frequency management (April 6, 2016)

CPU frequency governors and remote callbacks (September 4, 2017)

Saving frequency scaling in the data center (May 21, 2020)

CPUhog

Who let the hogs out? (March 16, 2010)

Cpusets

Cpusets and memory policies (March 22, 2017)

Crash dumps

Diskdump: a new crash dump system (June 2, 2004)

Crash dumps with kexec (October 27, 2004)

Software suspend - again (February 6, 2006)

Persistent storage for a kernel's "dying breath" (March 23, 2011)

Credentials

Credential records (September 25, 2007)

Cryptography

Cryptographic signatures on kernel modules (July 7, 2004)

Asynchronous crypto (November 3, 2004)

An API for user-space access to kernel cryptography (August 25, 2010)

Trusted and encrypted keys (October 6, 2010)

A netlink-based user-space crypto API (October 20, 2010)

A crypto module loading vulnerability (January 28, 2015)

WireGuarding the mainline (August 6, 2018)

Reconsidering Speck (August 8, 2018)

Progress on Zinc (thus WireGuard) (September 26, 2018)

Zinc: a new kernel cryptography API (November 6, 2018)

Adiantum: encryption for the low end (January 16, 2019)

WireGuard and the crypto API (October 16, 2019)

Supporting PGP keys and signatures in the kernel (January 25, 2022)

Constant-time instructions and processor optimizations (February 3, 2023)

Cryptoloop

A weak cryptoloop implementation in Linux? (January 21, 2004)

Customer panel

Kernel Summit: The customer panel (July 21, 2004)

Data integrity

Ext3 and RAID: silent data killers? (August 31, 2009)

Notes from the block layer (February 22, 2011)

Stable pages (May 11, 2011)

Ensuring data reaches disk (September 7, 2011)

Optimizing stable pages (December 5, 2012)

LSFMM: Storage data integrity (April 24, 2013)

Composefs for integrity protection and data sharing (December 7, 2022)

Data Plane Development Kit (DPDK)

Network acceleration with DPDK (July 5, 2017)

DAX

Supporting filesystems in persistent memory (September 2, 2014)

DAX and fsync: the cost of forgoing page structures (February 24, 2016)

The persistent memory "I know what I'm doing" flag (March 2, 2016)

DAX on BTT (May 4, 2016)

The future of DAX (March 27, 2017)

daxctl() — getting the other half of persistent-memory performance (June 26, 2017)

DAX semantics (May 13, 2019)

Famfs: a filesystem interface to shareable memory (July 30, 2024)

D-Bus

Fast interprocess messaging (September 15, 2010)

Speeding up D-Bus (February 29, 2012)

Missing the AF_BUS (July 3, 2012)

DCCP

Linux gets DCCP (August 30, 2005)

Debian kernel team

The new Debian kernel team (May 26, 2004)

Debugging

Bringing kgdb into 2.6 (February 10, 2004)

Finding kernel problems automatically (June 1, 2004)

Diskdump: a new crash dump system (June 2, 2004)

Debugging kernel modules (June 23, 2004)

Crash dumps with kexec (October 27, 2004)

On not getting burned by kmap_atomic() (November 16, 2004)

Debugfs (December 13, 2004)

Useful gadget: /proc/page_owner (February 1, 2005)

The __nocast attribute (March 29, 2005)

Double kfree() errors (March 6, 2006)

A nasty file corruption bug - fixed (December 31, 2006)

Short subjects: kerneloops, read-mostly, and port 80 (December 18, 2007)

Development issues part 2: Bug tracking (January 9, 2008)

An object debugging infrastructure (March 3, 2008)

Bisection divides users and developers (April 15, 2008)

An updated guide to debugfs (May 25, 2009)

Hw-breakpoint: shared debugging registers (September 16, 2009)

Merging kdb and kgdb (February 17, 2010)

Persistent storage for a kernel's "dying breath" (March 23, 2011)

The dynamic debugging interface (March 22, 2011)

Displaying QR codes for kernel crashes (June 27, 2012)

Bugzilla, lightning talks, and future summits (October 29, 2013)

Debugging ARM kernels using fast interrupts (May 29, 2014)

A kernel debugger in Python: drgn (May 29, 2019)

Using drgn on production kernels (November 28, 2023)

Delay accounting

Some patches of interest (February 28, 2006)

del_timer()

Deleting timers quickly (May 12, 2004)

Dentry cache

The value of negative dentries (June 4, 2002)

Dcache scalability and RCU-walk (December 14, 2010)

Dcache scalability and security modules (April 27, 2011)

Mob rule for dentries (May 4, 2011)

How to ruin Linus's vacation (July 19, 2011)

A VFS deadlock post-mortem (April 3, 2013)

Dentry negativity (March 12, 2020)

Negative dentries, 20 years later (April 11, 2022)

Dealing with negative dentries (May 9, 2022)

Desktop support

Kernel Summit 2005: The Kernel and the Linux desktop (July 20, 2005)

A desktop kernel wishlist (October 29, 2014)

Development model

Linus merges up a storm (April 14, 2004)

Kernel Summit: Development process (July 21, 2004)

Another look at the new development model (July 27, 2004)

The -mm development tree (October 5, 2004)

MODULE_PARM deprecated (October 20, 2004)

Some development model notes (October 27, 2004)

Four-level page tables merged (January 5, 2005)

Flushing the page cache from user space (February 22, 2005)

Finding the boundaries for stable kernel patches (April 5, 2005)

Andrew Morton at linux.conf.au (April 23, 2005)

The end of the devfs story (June 13, 2005)

Kernel Summit 2005: The hardware vendors' panel (July 19, 2005)

Reiser4 and kernel inclusion (September 21, 2005)

On the merging of ktimers (October 19, 2005)

What's not going into 2.6.18 (June 6, 2006)

Time for ext4? (June 12, 2006)

Kernel Summit 2006: Kernel quality and development process (July 18, 2006)

Kernel Summit 2006: Development process II (July 19, 2006)

Old kernels and new compilers (August 21, 2006)

Device drivers and non-disclosure agreements (October 9, 2006)

Who's writing 2.6.21 and related issues (March 7, 2007)

Pointy-haired kernel hackers? (July 11, 2007)

Still waiting for swap prefetch (July 25, 2007)

The case of the unwelcome attribution (September 19, 2007)

PF_CAN (October 8, 2007)

Getting the right kind of contributions (May 28, 2008)

Andrew Morton on kernel development (June 11, 2008)

KS2008: Linux 3.0 (September 16, 2008)

Btrfs to the mainline? (October 8, 2008)

An open letter to Evgeniy Polyakov (November 25, 2008)

On the management of the Video4Linux subsystem tree (February 24, 2009)

TuxOnIce: in from the cold? (May 13, 2009)

Communicating requirements to kernel developers (July 14, 2009)

Fault injection and unexpected requirement injection (December 2, 2009)

Redesigning asynchronous suspend/resume (December 16, 2009)

Two that didn't make it (December 22, 2009)

After the merge window closed... (March 16, 2010)

KVM, QEMU, and kernel project management (March 23, 2010)

A suspend blockers post-mortem (June 2, 2010)

ARM and defconfig files (June 16, 2010)

On the scalability of Linus (July 2, 2010)

A new combined tree for storage subsystems (September 15, 2010)

ARM's multiply-mapped memory mess (October 12, 2010)

KS2010: Big out-of-tree projects (November 2, 2010)

KS2010: Development process (November 3, 2010)

ARM wrestling (April 6, 2011)

Rationalizing the ARM tree (April 19, 2011)

The platform problem (May 18, 2011)

Android, forking, and control (June 6, 2011)

Avoiding the OS abstraction trap (August 12, 2011)

On multi-platform drivers (September 7, 2011)

Finding the right evolutionary niche (April 11, 2012)

LinuxCon Japan: Making kernel developers less grumpy (June 6, 2012)

A kernel panel convenes in Edinburgh (October 23, 2013)

On saying "no" (October 29, 2013)

AMD's Display Core difficulties (December 13, 2016)

LZ4: vendoring in the kernel (February 1, 2017)

Bash the kernel maintainers (November 6, 2017)

Too many lords, not enough stewards (January 31, 2018)

Two perspectives on the maintainer relationship (March 20, 2018)

FIPS-compliant random numbers for the kernel (December 7, 2021)

Remote participation at LSFMM (June 15, 2022)

An LSFMM development-process discussion (May 23, 2023)

Reducing kernel-maintainer burnout (November 24, 2023)

Bug reporting

Troubles with triaging syzbot reports (December 14, 2022)

Code review

Where have all the reviewers gone? (September 11, 2006)

A critical look at sysfs attribute values (March 17, 2010)

KS2011: Patch review (October 24, 2011)

Uninitialized blocks and unexpected flags (November 28, 2012)

A FALLOC_FL_NO_HIDE_STALE followup (December 5, 2012)

What's missing from our changelogs (July 24, 2013)

Unreviewed code in 3.11 (August 7, 2013)

Two sessions on review (August 20, 2014)

On the problem of maintainer abuse (December 17, 2014)

Memory-management patch review (March 29, 2017)

The trouble with SMC-R (May 18, 2017)

The memory-management development process (April 27, 2018)

The memory-management subsystem development process (May 7, 2019)

Security requirements for new kernel features (July 28, 2022)

Community

ELC: Morton and Saxena on working with the kernel community (April 21, 2008)

KS2010: Welcoming newcomers (November 2, 2010)

Developer recruitment and outreach (November 4, 2015)

Contributor statistics

Who wrote 2.6.20? (February 21, 2007)

Who's writing 2.6.21 and related issues (March 7, 2007)

Who wrote - and approved - 2.6.22 (June 11, 2007)

2.6.24 - some statistics (January 9, 2008)

How patches get into the mainline (February 10, 2009)

Developer conduct

KS2007: Developer relations and development process (September 10, 2007)

On kernel mailing list behavior (July 17, 2013)

Code, conflict, and conduct (September 18, 2018)

The kernel's code of conduct, one week later (September 26, 2018)

The code of conduct at the Maintainers Summit (October 23, 2018)

A panel discussion on the kernel's code of conduct (November 20, 2018)

Developers as children

Quote of the week (June 15, 2004)

Diversity

Outreach program for women—kernel edition (June 12, 2013)

The Outreach Program for Women (October 29, 2013)

Code humor and inclusiveness (June 11, 2021)

A discussion on kernel-maintainer pain points (November 27, 2023)

Driver merging

Merging drivers early (February 27, 2008)

Why some drivers are not merged early (June 18, 2008)

LIRC delurks (September 10, 2008)

KS2008: When should drivers be merged? (September 16, 2008)

Moving the -staging tree (October 1, 2008)

The sad story of the em28xx driver (November 11, 2008)

News from the staging tree (September 9, 2009)

On the driver life cycle (October 13, 2009)

Kernel support for infrared receivers (December 2, 2009)

Broadcom's wireless drivers, one year later (August 29, 2011)

Vtunerc and software acceptance politics (December 14, 2011)

Merging Allwinner support (June 19, 2013)

The intersection of mlx5, netdev, and lockdown (December 18, 2023)

A tale of two troublesome drivers (April 12, 2024)

Considering kernel pass-through interfaces (September 20, 2024)

Email analysis

Analyzing kernel email (November 13, 2019)

Enterprise kernels

Kernel competition in the enterprise space (March 14, 2012)

Kernel quality

Toward better kernel releases (December 7, 2004)

Is the kernel development process broken? (March 9, 2005)

Quotes of the week (March 8, 2005)

Kernel Summit 2005: Development process and quality assurance (July 20, 2005)

The newest development model and 2.6.14 (November 2, 2005)

Briefly: patch quality, CKRM, likely(), and vmsplice() (May 3, 2006)

Kernel bugs: out of control? (May 10, 2006)

Putting a lid on USB power (June 5, 2006)

Return values, warnings, and error situations (October 17, 2006)

Buried in warnings (November 1, 2006)

A tale of two release cycles (May 1, 2007)

The thorny case of kmalloc(0) (June 5, 2007)

KS2007: Kernel quality (September 6, 2007)

Various topics related to kernel quality (November 14, 2007)

Memory allocation failures and scary warnings (April 7, 2008)

Time to slow down? (May 7, 2008)

Tightening the merge window rules (September 9, 2008)

KS2008: Kernel quality and release process (September 16, 2008)

Tracking of testers and bug reporters - a status report (November 11, 2008)

A tempest in a tty pot (July 29, 2009)

KS2011: Preemption disable and verifiable APIs (October 24, 2011)

Drivers as documentation (November 22, 2011)

Removing uninitialized_var() (December 19, 2012)

Kernel quality control, or the lack thereof (December 7, 2018)

Bugs and fixes in the kernel history (December 8, 2022)

linux-next

linux-next and patch management process (February 13, 2008)

A day in the life of linux-next (June 23, 2008)

The current development kernel is...linux-next? (July 8, 2008)

Linux-next meets the merge window (July 23, 2008)

KS2009: Staging, linux-next, and the development process (October 21, 2009)

Bypassing linux-next (January 19, 2011)

KS2012: Improving development processes: linux-next (September 12, 2012)

The linux-next and -stable trees (October 29, 2013)

The state of linux-next (August 20, 2014)

Loadable modules

The abrupt un-exporting of symbols (January 12, 2005)

Exported symbols and the internal API (September 11, 2007)

Tightening symbol exports (November 27, 2007)

Tracing unsigned modules (March 5, 2014)

The intersection of modules, GKI, and rocket science (October 11, 2021)

Maintainers

The kernel maintainer gap (October 30, 2013)

On moving on from being a maintainer (January 6, 2016)

On Linux kernel maintainer scalability (October 12, 2016)

Group maintainership models (November 2, 2016)

Scaling the kernel's MAINTAINERS file (August 10, 2017)

MAINTAINERS truth and fiction (January 14, 2021)

Finding real-world kernel subsystems (February 1, 2021)

Resurrecting fbdev (January 19, 2022)

Maintainers don't scale (June 6, 2022)

Changing the filesystem-maintenance model (July 17, 2024)

Patch management

Best practices for a big patch series (February 12, 2014)

Why kernel development still uses email (October 1, 2016)

Change IDs for kernel patches (August 29, 2019)

Defragmenting the kernel development process (September 14, 2019)

Reducing patch postings to linux-kernel (November 8, 2023)

Patterns

Linux kernel design patterns - part 1 (June 8, 2009)

Linux kernel design patterns - part 2 (June 12, 2009)

Linux kernel design patterns - part 3 (June 22, 2009)

Ghosts of Unix Past: a historical search for design patterns (October 27, 2010)

Ghosts of Unix past, part 2: Conflated designs (November 4, 2010)

Ghosts of Unix past, part 3: Unfixable designs (November 16, 2010)

Ghosts of Unix past, part 4: High-maintenance designs (November 23, 2010)

Object-oriented design patterns in the kernel, part 1 (June 1, 2011)

Object-oriented design patterns in the kernel, part 2 (June 7, 2011)

Flags as a system call API design pattern (February 12, 2014)

Proper handling of unknown flags in system calls (February 26, 2014)

Losing the magic (December 5, 2022)

Regressions

Kernel testing and regressions: an example (July 26, 2005)

KS2009: Regressions (October 19, 2009)

KS2010: Regressions (November 2, 2010)

A more detailed look at kernel regressions (November 10, 2010)

Dueling memory-management performance regressions (June 14, 2019)

splice() and the ghost of set_fs() (May 26, 2022)

Better regression handling for the kernel (September 19, 2022)

The uncertain future of kernel regression tracking (September 19, 2024)

Security issues

Handling kernel security problems (July 16, 2008)

debugfs: rules not welcome (February 22, 2011)

Dirty COW and clean commit messages (October 21, 2016)

Toward better handling of hardware vulnerabilities (September 12, 2018)

Improving the handling of embargoed hardware-security bugs (October 25, 2018)

What constitutes disclosure of a kernel vulnerability? (June 3, 2022)

A fuzzy issue of responsible disclosure (August 12, 2022)

Kernel security reporting for distributions (August 16, 2023)

Stable tree

Some numbers and thoughts on the stable kernels (August 27, 2010)

Further notes on stable kernels (September 8, 2010)

Maintaining a stable kernel on an unstable base (September 29, 2010)

A long-term support initiative update (February 29, 2012)

The value of release bureaucracy (April 17, 2012)

KS2012: Stable kernel management (September 12, 2012)

Some stable tree grumbles (July 17, 2013)

The linux-next and -stable trees (October 29, 2013)

The stable tree (August 20, 2014)

How many -stable patches introduce new bugs? (June 28, 2016)

Backports and long-term stable kernels (September 14, 2016)

A discussion on stable kernel workflow issues (November 1, 2016)

Cramming features into LTS kernel releases (October 10, 2017)

The strange story of the ARM Meltdown-fix backport (March 15, 2018)

Machine learning and stable kernels (September 12, 2018)

Making stable kernels more stable (October 24, 2018)

A filesystem corruption bug breaks loose (December 10, 2018)

The case of the supersized shebang (February 18, 2019)

Testing and the stable tree (May 28, 2019)

The stable-kernel process (September 16, 2019)

Identifying buggy patches with machine learning (November 4, 2019)

Revisiting stable-kernel regressions (February 13, 2020)

Maintaining stable stability (July 22, 2020)

Preparing for the realtime future (September 9, 2020)

XFS, stable kernels, and -rc releases (December 3, 2020)

A stable bug fix bites proprietary modules (June 21, 2021)

The core of the -stable debate (July 22, 2021)

Rolling stable kernels (October 6, 2021)

A last look at the 4.4 stable series (February 17, 2022)

Filesystems, testing, and stable trees (May 31, 2022)

Backporting XFS fixes to stable (June 20, 2023)

Ext4 data corruption hits the stable kernels (December 14, 2023)

User-space ABI

Sysfs and a stable kernel ABI (February 22, 2006)

ABI stability documentation (February 28, 2006)

Kevents and review of new APIs (August 23, 2006)

The final wireless extension? (October 4, 2006)

The death and possible rebirth of sysctl() (October 18, 2006)

Application-friendly kernel interfaces (March 26, 2007)

2.6 and the user-space ABI (May 15, 2007)

timerfd() and system call review (August 14, 2007)

Re-deprecating sysctl() (August 29, 2007)

KS2007: The greater kernel ecosystem and user-space APIs (September 6, 2007)

Process IDs in a multi-namespace world (November 6, 2007)

Debugfs and the making of a stable ABI (December 3, 2008)

Removing binary sysctl (November 11, 2009)

Extended error reporting (February 17, 2010)

Nouveau and interface compatibility (March 10, 2010)

The ghost of sysfs past (July 21, 2010)

Statistics and tracepoints (August 24, 2010)

KS2010: ABI status for tracepoints (November 2, 2010)

KS2010: A staging process for ABIs (November 2, 2010)

The media controller subsystem (November 16, 2010)

The kernel and the C library as a single project (November 30, 2010)

Ftrace, perf, and the tracing ABI (May 11, 2011)

-EWHICHERROR? (June 29, 2011)

The udev tail wags the dog (August 24, 2011)

Hardware face detection (November 29, 2011)

System call filtering and no_new_privs (January 18, 2012)

Short sleeps suffering from slack (February 17, 2012)

A sys_poll() ABI tweak (February 22, 2012)

Fixing the unfixable autofs ABI (April 30, 2012)

Removing four bytes from the kernel ABI (May 23, 2012)

msync() and subtle behavioral tweaks (June 19, 2012)

Virtualization and the perf ABI (December 19, 2012)

Glibc and the kernel user-space API (January 30, 2013)

When the kernel ABI has to change (July 2, 2013)

Device trees as ABI (July 30, 2013)

A perf ABI fix (September 24, 2013)

The kernel/user-space boundary (October 29, 2013)

Fixing FS_IOC_GETFLAGS (December 11, 2013)

Changing the default shared memory limits (April 23, 2014)

Filesystem notification, part 1: An overview of dnotify and inotify (July 9, 2014)

Filesystem notification, part 2: A deeper investigation of inotify (July 14, 2014)

Handling ARM architecture changes (July 23, 2014)

How implementation details become ABI: a case study (October 1, 2014)

Haunted by ancient history (January 6, 2015)

Pagemap: security fixes vs. ABI compatibility (April 29, 2015)

Designing better kernel ABIs (October 26, 2016)

Specifying the kernel ABI (June 21, 2017)

Rethinking the Stack Clash fix (July 13, 2017)

C library system-call wrappers, or the lack thereof (November 12, 2018)

Maintainers Summit topics: pull depth, hardware vulnerabilities, etc. (September 17, 2019)

Free user space for non-graphics drivers (June 3, 2020)

The ABI status of filesystem formats (October 8, 2020)

Systemd catches up with bind events (November 13, 2020)

The imminent stable-version apocalypse (February 5, 2021)

Reconsidering BPF ABI stability (January 26, 2023)

The curious case of O_DIRECTORY|O_CREAT (March 27, 2023)

One more pidfdfs surprise (May 31, 2024)

Version numbers

Linux 3.0? (September 3, 2008)

2.6.x-rc0 (October 7, 2009)

Development tools

Ketchup with that? (April 28, 2004)

The end of gcc 2.95 support (December 13, 2005)

Kernel Summit 2006: Automated testing (July 19, 2006)

Device resource management (January 2, 2007)

Using Promela and Spin to verify parallel algorithms (August 1, 2007)

Who maintains this file? (August 21, 2007)

KS2008: Development tools (September 16, 2008)

Who is the best inliner of all? (January 14, 2009)

Poke-a-hole and friends (June 10, 2009)

Finding buffer overflows with Parfait (July 29, 2009)

Hw-breakpoint: shared debugging registers (September 16, 2009)

A module for crashing the kernel (January 26, 2010)

Undertaker 1.0 (February 1, 2011)

The dynamic debugging interface (March 22, 2011)

KS2011: Scheduler testing (October 24, 2011)

Validating Memory Barriers and Atomic Instructions (December 6, 2011)

Trusting the hardware too much (February 15, 2012)

Linsched for 3.3 (March 21, 2012)

I/O Hook (July 30, 2013)

The kernel address sanitizer (September 17, 2014)

Memory-management testing and debugging (March 16, 2015)

Testing power failures (March 18, 2015)

Fuzzing perf_events (August 5, 2015)

libnvdimm, or the unexpected virtue of unit tests (August 12, 2015)

Speeding up kernel development with QEMU (October 14, 2015)

Protecting private structure members (January 6, 2016)

Coverage-guided kernel fuzzing with syzkaller (March 2, 2016)

Automatically detecting kernel interface changes (October 19, 2016)

A formal kernel memory-ordering model (part 1) (April 14, 2017)

An introduction to the BPF Compiler Collection (December 22, 2017)

BPFd: Running BCC tools remotely across systems and architectures (January 23, 2018)

Software-tag-based KASAN (September 26, 2018)

Snowpatch: continuous-integration testing for the kernel (January 26, 2019)

Finding race conditions with KCSAN (October 14, 2019)

Next steps for kernel workflow improvement (November 1, 2019)

Better tools for kernel developers (February 6, 2020)

Attestation for kernel patches (March 2, 2020)

The pseudo cpuidle driver (May 21, 2020)

Scrutinizing bugs found by syzbot (October 13, 2021)

Detecting missing memory barriers with KCSAN (December 2, 2021)

A reference-count tracking infrastructure (December 6, 2021)

Digging into the community's lore with lei (December 13, 2021)

Driver regression testing with roadtest (March 18, 2022)

Finding bugs with sanitizers (September 27, 2022)

Scope-based resource management for the kernel (June 15, 2023)

Kernel developers at Cauldron (September 18, 2024)

blktests

Storage testing (May 28, 2019)

Coccinelle

Semantic patching with Coccinelle (January 20, 2009)

Evolutionary development of a semantic patch using Coccinelle (March 30, 2010)

KS2010: Lightning talks (November 2, 2010)

Three talks on kernel development tools (October 22, 2014)

Inside the mind of a Coccinelle programmer (August 31, 2016)

Forges

Pulling GitHub into the kernel process (June 23, 2021)

How Red Hat uses GitLab for kernel development (October 1, 2021)

Git

The guts of git (April 12, 2005)

A very quick guide to starting with git (April 20, 2005)

A couple of graphical git front ends (July 4, 2005)

Git approaches 1.0 (July 27, 2005)

Rebasing and merging: some git best practices (April 14, 2009)

Finding a patch's kernel version with git (June 16, 2010)

Git tree maintenance (October 29, 2013)

Rebasing and merging in kernel repositories (June 18, 2019)

"git request-pull" and confusing diffstats (October 21, 2019)

Handling messy pull-request diffstats (April 22, 2022)

Avoiding the merge trap (April 17, 2023)

Infrastructure

A kernel.org update (July 22, 2009)

KS2010: Kernel.org update (November 3, 2010)

Kernel development without kernel.org (September 13, 2011)

Where's that tree? (September 21, 2011)

The forest on the move (September 28, 2011)

Kernel.org's road to recovery (October 4, 2011)

KS2011: Kernel.org report (October 24, 2011)

A kernel.org update (October 29, 2013)

Kernel.org news: two-factor authentication and more (August 25, 2014)

Kernel debugging

The kernel lock validator (May 31, 2006)

Injecting faults into the kernel (November 14, 2006)

kmemcheck (November 27, 2007)

An object debugging infrastructure (March 3, 2008)

Bisection divides users and developers (April 15, 2008)

Netoops (November 10, 2010)

Displaying QR codes for kernel crashes (June 27, 2012)

Debugging ARM kernels using fast interrupts (May 29, 2014)

BPF-based error injection for the kernel (November 29, 2017)

A kernel debugger in Python: drgn (May 29, 2019)

Using drgn on production kernels (November 28, 2023)

Kernel tracing

Tracing infrastructures (September 19, 2006)

A generic tracing interface (September 19, 2007)

Tracing: no shortage of options (July 22, 2008)

Low-level tracing plumbing (September 30, 2008)

On the value of static tracepoints (April 28, 2009)

Dynamic probes with ftrace (July 28, 2009)

Fun with tracepoints (August 12, 2009)

TRACE_EVENT_ABI (September 30, 2009)

Debugging the kernel using Ftrace - part 1 (December 9, 2009)

Debugging the kernel using Ftrace - part 2 (December 22, 2009)

Using the TRACE_EVENT() macro (Part 1) (March 24, 2010)

Using the TRACE_EVENT() macro (Part 2) (March 31, 2010)

Using the TRACE_EVENT() macro (Part 3) (April 21, 2010)

ELC: Using LTTng (April 21, 2010)

One ring buffer to rule them all? (May 26, 2010)

trace-cmd: A front-end for Ftrace (October 20, 2010)

Conditional tracepoints (November 30, 2010)

Using KernelShark to analyze the real-time scheduler (February 2, 2011)

Ftrace, perf, and the tracing ABI (May 11, 2011)

LTTng rejection, next generation (December 14, 2011)

LTTng 2.0: Tracing for power users and developers - part 1 (April 11, 2012)

LTTng 2.0: Tracing for power users and developers - part 2 (April 18, 2012)

KS2012: Improving tracing and debugging (September 12, 2012)

Ktap — yet another kernel tracer (May 22, 2013)

Triggers for tracing (June 26, 2013)

Ktap almost gets into 3.13 (November 6, 2013)

Ktap or BPF? (April 23, 2014)

Ftrace: The hidden light switch (August 13, 2014)

Ftrace and histograms: a fork in the road (March 4, 2015)

KernelShark releases version 1.0 (July 31, 2019)

Unifying kernel tracing (October 30, 2019)

How to unbreak LTTng (April 20, 2020)

Comparing SystemTap and bpftrace (April 13, 2021)

Code tagging and memory-allocation profiling (May 31, 2023)

Memory-allocation profiling for the kernel (May 21, 2024)

kgdb

kgdb getting closer to being merged? (February 20, 2008)

Merging kdb and kgdb (February 17, 2010)

Linux kernel memory model

Calibrating your fear of big bad optimizing compilers (October 11, 2019)

Concurrency bugs should fear the big bad data-race detector (part 1) (April 8, 2020)

Concurrency bugs should fear the big bad data-race detector (part 2) (April 14, 2020)

LLVM

LFCS: Building the kernel with Clang (May 4, 2011)

LFCS: The LLVMLinux project (May 7, 2013)

mmiotrace

Tracing memory-mapped I/O operations (February 26, 2008)

MMTests

Testing for kernel performance regressions (August 3, 2012)

Scheduler benchmarking with MMTests (May 19, 2020)

rt-app

Notes from the LPC scheduler microconference (September 18, 2017)

Rust

Supporting Linux kernel development in Rust (August 31, 2020)

Rust heads into the kernel? (April 21, 2021)

Rust for Linux redux (July 7, 2021)

The Rust for Linux project (September 16, 2021)

Key Rust concepts for the kernel (September 17, 2021)

More Rust concepts for the kernel (September 20, 2021)

Using Rust for kernel development (September 27, 2021)

The kernel radar: folios, multi-generational LRU, and Rust (January 20, 2022)

Rustaceans at the border (April 14, 2022)

A pair of Rust kernel modules (September 12, 2022)

The perils of pinning (September 15, 2022)

Next steps for Rust in the kernel (September 19, 2022)

A first look at Rust in the 6.1 kernel (October 13, 2022)

Rust in the 6.2 kernel (November 17, 2022)

Kernel time APIs for Rust (March 2, 2023)

Preventing atomic-context violations in Rust code with klint (November 17, 2023)

Committing to Rust for kernel code (November 22, 2023)

A Rust implementation of Android's Binder (November 30, 2023)

Rust and C filesystem APIs (January 15, 2024)

A memory model for Rust code in the kernel (April 3, 2024)

Rust for embedded Linux kernels (April 23, 2024)

Giving Rust a chance for in-kernel codecs (April 26, 2024)

Rust for filesystems (June 21, 2024)

Whither the Apple AGX graphics driver? (September 4, 2024)

A discussion of Rust safety documentation (September 17, 2024)

SFrame

Reliable user-space stack traces with SFrame (May 22, 2023)

Sparse

Finding kernel problems automatically (June 1, 2004)

Using sparse for endianness verification (October 25, 2006)

Sparse gets a maintainer (November 8, 2006)

Sparse: a look under the hood (June 8, 2016)

Static analysis

One year of Coverity work (August 20, 2014)

Static code checks for the kernel (April 13, 2016)

Smatch: pluggable static analysis for C (June 22, 2016)

Testing

Automated kernel testing (June 8, 2005)

Kernel test automation with LTP (December 17, 2014)

Kernel testing (November 4, 2015)

Memory-management testing (April 27, 2016)

Notes from Linaro Connect (March 15, 2017)

Stack and driver testing (March 22, 2017)

Filesystem test suites (June 13, 2018)

A kernel unit-testing framework (March 1, 2019)

How many kernel test frameworks? (June 5, 2019)

Defragmenting the kernel development process (September 14, 2019)

The 2019 Automated Testing Summit (November 13, 2019)

Preparing for the realtime future (September 9, 2020)

The runtime verification subsystem (June 7, 2021)

Testing for storage and filesystems (July 12, 2023)

Challenges for KernelCI (August 1, 2023)

Faster kernel testing with virtme-ng (November 15, 2023)

Trinity

KS2012: Regression testing (August 30, 2012)

LCA: The Trinity fuzz tester (February 6, 2013)

Two sessions on kernel testing (October 29, 2013)

Trinity and memory management testing (March 26, 2014)

Undertaker

Three talks on kernel development tools (October 22, 2014)

xfstests

Toward better testing (March 26, 2014)

devfs

The end of the devfs story (June 13, 2005)

The return of devfs (May 6, 2009)

Device drivers

Generic DMA pools (February 3, 2004)

The end of init_etherdev() and friends (March 2, 2004)

The new way of ioctl() (January 18, 2005)

NETIF_F_LLTX and race conditions (February 1, 2005)

HALs considered harmful (March 15, 2005)

RapidIO support for Linux (June 8, 2005)

ACPI, device interrupts, and suspend states (August 3, 2005)

ZONE_DMA32 (September 20, 2005)

Dynamic USB device IDs (November 21, 2005)

bcm43xx and the 802.11 stack (December 6, 2005)

The Novell Partner Linux Driver Process (May 17, 2006)

Device drivers and non-disclosure agreements (October 9, 2006)

KS2007: Hardware support and the i386/x86_64 merger (September 6, 2007)

Linux driver project gets a full-time leader (October 3, 2007)

Short subjects: kerneloops, read-mostly, and port 80 (December 18, 2007)

Merging drivers early (February 27, 2008)

A new suspend/hibernate infrastructure (March 19, 2008)

Why some drivers are not merged early (June 18, 2008)

LIRC delurks (September 10, 2008)

UKUUG: Arnd Bergmann on interconnecting with PCIe (November 19, 2008)

Kernel support for infrared receivers (December 2, 2009)

LCA: Graphics driver ponies (January 26, 2010)

The USB composite framework (July 14, 2010)

Shielding driver authors from locking (October 20, 2010)

Deferred driver probing (July 7, 2011)

The pin control subsystem (November 22, 2011)

A firewall for device drivers (August 13, 2021)

The intersection of mlx5, netdev, and lockdown (December 18, 2023)

A tale of two troublesome drivers (April 12, 2024)

Considering kernel pass-through interfaces (September 20, 2024)

Accelerators

Not-a-GPU accelerator drivers cross the line (August 26, 2021)

Requirements for accelerator drivers (September 27, 2021)

Synchronized GPU priority scheduling (October 22, 2021)

Asynchronous probing

Slow probing + udev + SIGKILL = trouble (September 9, 2014)

Device dependencies and deferred probing (November 3, 2015)

Block drivers

Cleaning up the block driver API (August 28, 2007)

A new block request completion API (January 29, 2008)

Block layer discard requests (August 12, 2008)

Block layer: solid-state storage, timeouts, affinity, and more (October 15, 2008)

Linux and 4K disk sectors (March 11, 2009)

Reworking disk events handling (January 19, 2011)

Stream IDs and I/O hints (May 4, 2016)

Firmware loading

Firmware loading and suspend/resume (August 15, 2012)

Udev and firmware (October 10, 2012)

Firmware signing (May 27, 2015)

Graphics

A line in the sand for graphics drivers (July 5, 2010)

Toward a unified display driver framework (September 20, 2011)

The Android Graphics microconference (October 9, 2013)

An update on the freedreno graphics driver (April 8, 2015)

Atomic mode setting design overview, part 1 (August 5, 2015)

Atomic mode setting design overview, part 2 (August 12, 2015)

Graphics world domination may be closer than it appears (October 18, 2016)

AMD's Display Core difficulties (December 13, 2016)

Resurrecting fbdev (January 19, 2022)

A Nouveau graphics driver update (December 1, 2023)

The Linux graphics stack in a nutshell, part 1 (December 19, 2023)

The Linux graphics stack in a nutshell, part 2 (December 28, 2023)

Whither the Apple AGX graphics driver? (September 4, 2024)

Industrial I/O

Ambient light sensors (June 2, 2010)

(Partially) graduating IIO (November 2, 2011)

Input

LCA: Rationalizing the wacom driver (February 1, 2011)

In user space

User-space device drivers (January 20, 2004)

Handling interrupts in user space (March 15, 2005)

Support for drivers in user space (September 4, 2006)

UIO: user-space drivers (May 2, 2007)

Character devices in user space (November 25, 2008)

Safe device assignment with VFIO (January 3, 2012)

Linux drivers in user space — a survey (October 19, 2016)

Network drivers

Large receive offload (August 1, 2007)

Network transmit batching (August 22, 2007)

e1000 v. e1000e (April 15, 2008)

e1000e and the joy of development kernels (September 24, 2008)

Char devices for network interfaces (October 14, 2009)

Accelerating netfilter with hardware offload, part 1 (January 14, 2020)

Accelerating netfilter with hardware offload, part 2 (January 31, 2020)

Nouveau

LCA: The state of the Nouveau project (January 17, 2007)

KS2009: Staging, linux-next, and the development process (October 21, 2009)

The abrupt merging of Nouveau (December 15, 2009)

Nouveau and interface compatibility (March 10, 2010)

Platform drivers

LinuxCon: x86 platform drivers (August 24, 2011)

Support APIs

A new I/O memory access mechanism (September 15, 2004)

PCI error recovery (July 12, 2005)

Driver core API changes for 2.6.19 (September 26, 2006)

API changes: interrupt handlers and vectored I/O (October 2, 2006)

Driver API: sleeping poll(), exclusive I/O memory, and DMA API debugging (November 24, 2008)

Writing a WMI driver - an introduction (June 8, 2010)

Contiguous memory allocation for drivers (July 21, 2010)

APIs for sensors (March 16, 2011)

The platform device API (June 21, 2011)

What are they polling for? (July 7, 2011)

Sharing buffers between devices (August 15, 2011)

DMA buffer sharing in 3.3 (January 11, 2012)

The Android ION memory allocator (February 8, 2012)

The trouble with DMA masks (March 20, 2013)

vm_iomap_memory() (April 17, 2013)

In search of the right RGB LED interface (May 25, 2016)

Semantics of MMIO mapping attributes across architectures (August 24, 2016)

Rethinking device memory allocation (October 19, 2016)

Shared memory mappings for devices (May 7, 2018)

IR decoding with BPF (July 9, 2018)

Device-to-device memory-transfer offload with P2PDMA (October 2, 2018)

Controlling device peer-to-peer access from user space (March 7, 2019)

Destaging ION (July 9, 2019)

DMA-BUF cache handling: Off the DMA API map (part 1) (June 4, 2020)

DMA-BUF cache handling: Off the DMA API map (part 2) (June 11, 2020)

Managing multifunction devices with the auxiliary bus (December 17, 2020)

Video

Memory management for graphics processors (November 6, 2007)

LPC: The future of Linux graphics (September 24, 2008)

Large I/O memory in small address spaces (November 4, 2008)

Video4Linux2

The Video4Linux2 API: an introduction (October 11, 2006)

Video4Linux2 part 2: registration and open() (October 18, 2006)

Video4Linux2 part 3: Basic ioctl() handling (October 30, 2006)

Video4Linux2 part 4: inputs and outputs (December 13, 2006)

Video4Linux2 part 5a: colors and formats (January 24, 2007)

Video4Linux2 part 5b: format negotiation (March 23, 2007)

Video4Linux2 part 6a: Basic frame I/O (May 18, 2007)

Video4Linux2 part 6b: Streaming I/O (July 5, 2007)

Video4Linux2 part 7: Controls (August 31, 2007)

Videobuf: buffer management for V4L2 drivers (November 23, 2009)

2.6.35 Video4Linux2 enhancements (May 25, 2010)

The videobuf2 API (June 14, 2011)

Hardware face detection (November 29, 2011)

The growing image-processor unpleasantness (August 18, 2022)

Wireless networking

The ipw3945 project (March 1, 2006)

A new Intel wireless driver (February 20, 2007)

Regulating wireless devices (August 19, 2008)

Broadcom firmware and regulatory compliance (September 22, 2010)

Radar detection with Linux (December 21, 2010)

Broadcom's wireless drivers, one year later (August 29, 2011)

Device mapper

Kernel Summit: Multipath I/O (July 21, 2004)

Multipath support in the device mapper (February 23, 2005)

MD / DM (January 25, 2006)

Distributed storage (August 21, 2007)

Which I/O controller is the fairest of them all? (May 12, 2009)

Snapshot merge for the device mapper (November 24, 2009)

dm-verity (September 19, 2011)

Device model

Driver core functions: GPL only (September 29, 2004)

Some more 2.6.12 API changes (March 16, 2005)

Device model changes in store (March 22, 2005)

A big set of driver core changes (June 21, 2005)

Nested classes (October 5, 2005)

Sysfs and a stable kernel ABI (February 22, 2006)

Driver core API changes for 2.6.19 (September 26, 2006)

Toward a safer sysfs (April 9, 2007)

A fresh look at the kernel's device model (May 27, 2015)

A tour of /sys/devices (June 3, 2015)

Device naming

Lots of SCSI disks (March 16, 2004)

A new device naming scheme (April 6, 2004)

User-friendly disk names (June 22, 2011)

Reverting disk aliases? (November 16, 2011)

Device numbers

The future of device numbers (January 6, 2004)

A unified device number allocator (March 8, 2005)

Devicescape stack

The 2006 Wireless Networking Summit (April 10, 2006)

Kernel Summit 2006: Mini-summit summaries (July 18, 2006)

Toward a free Atheros driver (November 15, 2006)

A new Intel wireless driver (February 20, 2007)

Device tree

KS2009: Generic device trees (October 19, 2009)

ELCE: Grant Likely on device trees (November 10, 2010)

Dynamic devices and static configuration (March 29, 2011)

Platform devices and device trees (June 21, 2011)

The udev tail wags the dog (August 24, 2011)

Supporting multi-platform ARM kernels (May 9, 2012)

Device tree troubles (July 24, 2013)

Device trees as ABI (July 30, 2013)

Device tree bindings (October 29, 2013)

Device trees I: Are we having fun yet? (November 12, 2013)

Device trees II: The harder parts (November 18, 2013)

Device tree overlays (October 22, 2014)

An alternative device-tree source language (August 9, 2017)

Device-tree schemas (November 14, 2018)

/dev/kmem

Who needs /dev/kmem? (August 16, 2005)

User-space software suspend (September 26, 2005)

A software suspend decision point (November 16, 2005)

Killing off /dev/kmem (April 5, 2021)

Direct memory access

Generic DMA pools (February 3, 2004)

The DMA API changes (March 15, 2004)

A handful of DMA topics (June 23, 2004)

DMA issues, part 2 (June 30, 2004)

Kernel Summit 2005: I/O Busses (July 19, 2005)

ZONE_DMA32 (September 20, 2005)

Memory copies in hardware (December 7, 2005)

Kernel Summit 2006: DMA and IOMMU issues (July 19, 2006)

The chained scatterlist API (October 29, 2007)

Rationalizing scatter/gather chains (December 28, 2007)

A better DMA memory allocator (March 10, 2008)

Driver API: sleeping poll(), exclusive I/O memory, and DMA API debugging (November 24, 2008)

ARM, DMA, and memory management (April 27, 2011)

A reworked contiguous memory allocator (June 14, 2011)

CMA and ARM (July 5, 2011)

Reworking the DMA mapping code (especially on ARM) (November 16, 2011)

DMA buffer sharing in 3.3 (January 11, 2012)

The trouble with DMA masks (March 20, 2013)

Goodbye to GFP_TEMPORARY and dma_alloc_noncoherent() (August 28, 2017)

Bounce buffers for untrusted devices (April 26, 2019)

Destaging ION (July 9, 2019)

DMA-BUF cache handling: Off the DMA API map (part 1) (June 4, 2020)

DMA-BUF cache handling: Off the DMA API map (part 2) (June 11, 2020)

Restricted DMA (January 7, 2021)

Noncoherent DMA mappings (May 7, 2021)

A security fix briefly breaks DMA (April 1, 2022)

The trouble with 64-bit DMA (August 11, 2022)

Phyr: a potential scatterlist replacement (May 19, 2023)

A more dynamic software I/O TLB (August 24, 2023)

dirreadahead()

Two paths to a better readdir() (July 30, 2014)

Distributed lock management

Clusters and distributed lock management (May 18, 2005)

Merging GFS2 (September 7, 2005)

Distributions

SCALE 8x: Ubuntu kernel development process (March 3, 2010)

Kernel configuration for distributions (July 18, 2012)

Analyzing the patchiness of vendor kernels (April 6, 2016)

dma_declare_coherent_memory()

DMA issues, part 2 (June 30, 2004)

dma_get_required_mask()

A handful of DMA topics (June 23, 2004)

DMTCP

Checkpoint/restart: it's complicated (November 9, 2010)

Preparing for user-space checkpoint/restore (January 31, 2012)

Dnotify

Filesystem notification, part 1: An overview of dnotify and inotify (July 9, 2014)

Documentation

Kernel Summit 2006: Documentation (July 18, 2006)

Kevents and review of new APIs (August 23, 2006)

KS2008: Documentation (September 17, 2008)

In search of the perfect changelog (April 22, 2009)

Better documentation: the window of naive interest (July 3, 2012)

Kernel documentation (November 4, 2015)

The present and future of formatted kernel documentation (January 13, 2016)

Kernel documentation with Sphinx, part 1: how we got here (July 6, 2016)

Kernel documentation with Sphinx, part 2: how it works (July 13, 2016)

A report from the documentation maintainer (October 26, 2016)

Kernel documentation update (November 2, 2016)

Toward a kernel maintainer's guide (November 26, 2018)

How to contribute to kernel documentation (January 23, 2020)

Improving memory-management documentation (May 10, 2022)

Memory-management documentation and development process (June 2, 2023)

Documenting page flags by committee (May 22, 2024)

man pages

What's in a (type) name? (September 2, 2022)

Dracut

Dracut looks to replace the initramfs patchwork (February 4, 2009)

DRBD

DRBD: a distributed block device (April 22, 2009)

drop_caches

A survey of memory management patches (August 6, 2013)

Dynamic frequency selection

Radar detection with Linux (December 21, 2010)

Dynamic tick

Clockevents and dyntick (February 21, 2007)

Deferrable timers (March 28, 2007)

NoHZ tasks (December 20, 2010)

Relocating RCU callbacks (October 31, 2012)

(Nearly) full tickless operation in 3.10 (May 8, 2013)

Is the whole system idle? (July 10, 2013)

Dropping the timer tick — for real this time (October 7, 2015)

EDAC

The 2.6.16 straggler list (January 24, 2006)

EISA

Dropping x86 EISA support (January 21, 2015)

Elevator

Modular, switchable I/O schedulers (September 21, 2004)

Into the ABISS (November 9, 2004)

Which is the fairest I/O scheduler of them all? (December 8, 2004)

Some block layer patches (October 26, 2005)

Variations on fair I/O schedulers (December 3, 2008)

An IOPS-based I/O scheduler (January 4, 2012)

The BFQ I/O scheduler (June 11, 2014)

Embedded systems

Kernel Summit 2006: Embedded systems (July 19, 2006)

Reviving linux-tiny (September 26, 2007)

ELC: Morton and Saxena on working with the kernel community (April 21, 2008)

An interview with the new embedded maintainers (June 4, 2008)

Wakelocks and the embedded problem (February 10, 2009)

SamyGO: replacing television firmware (November 14, 2009)

ELC: Status of embedded Linux (April 14, 2010)

Networking on tiny machines (May 7, 2014)

Kernel tinification (August 20, 2014)

Splicing out syscalls for tiny kernels (December 3, 2014)

Linux as a single-user system (February 4, 2015)

An alternative TTY layer (April 27, 2017)

Shrinking the scheduler (June 14, 2017)

Shrinking the kernel with link-time garbage collection (December 15, 2017)

Shrinking the kernel with an axe (February 8, 2018)

Shrinking the kernel with a hammer (March 2, 2018)

Epoll

EPOLL_CTL_DISABLE and multithreaded applications (October 17, 2012)

EPOLL_CTL_DISABLE, epoll, and API design (October 23, 2012)

Epoll evolving (February 16, 2015)

Issues with epoll() (March 23, 2015)

A ring buffer for epoll (May 30, 2019)

epoll_pwait2(), close_range(), and encoded I/O (November 20, 2020)

The edge-triggered misunderstanding (August 5, 2021)

Two performance-oriented patches: epoll and NUMA balancing (November 4, 2022)

Error codes

-EWHICHERROR? (June 29, 2011)

Extended system call error reporting (September 16, 2015)

eventfs

Kernel events without kevents (March 13, 2007)

Events reporting

A kernel events layer (July 27, 2004)

Figuring out kernel event reporting (September 8, 2004)

Watching filesystem events with inotify (September 29, 2004)

Coming in 2.6.10 (October 20, 2004)

More hooks for kernel events (February 9, 2005)

Extending netlink (April 12, 2005)

Dealing with disk I/O problems (June 21, 2005)

The kevent interface (February 22, 2006)

OLS: A proposal for a new networking API (July 22, 2006)

Toward a kernel events interface (August 1, 2006)

Kevent take 26 (December 12, 2006)

The return of kevent? (May 8, 2007)

The return of syslets (May 30, 2007)

vringfd() (April 7, 2008)

A kernel event notification mechanism (July 25, 2018)

Generalized events notification and security policies (June 11, 2019)

exec()

How programs get run (January 28, 2015)

How programs get run: ELF binaries (February 4, 2015)

execns()

execns() (July 11, 2006)

Execute in place

Kernel Summit: kexec and fast booting (July 21, 2004)

Execute-in-place (May 11, 2005)

EXPORT_SYMBOL_GPL

On the value of EXPORT_SYMBOL_GPL (October 5, 2005)

EXPORT_SYMBOL_GPL_FUTURE() (February 13, 2006)

Questioning EXPORT_SYMBOL_GPL() (June 23, 2014)

The proper use of EXPORT_SYMBOL_GPL() (October 27, 2018)

Externsible firmware interface

The Extensible Firmware Interface - an introduction (August 9, 2011)

fallocate()

fallocate() (March 19, 2007)

The ongoing fallocate() story (July 3, 2007)

Punching holes in files (November 17, 2010)

Allocating uninitialized file blocks (April 17, 2012)

Volatile ranges with fallocate() (June 5, 2012)

Uninitialized blocks and unexpected flags (November 28, 2012)

A FALLOC_FL_NO_HIDE_STALE followup (December 5, 2012)

Finding the proper scope of a file collapse operation (March 5, 2014)

Inserting a hole into a file (January 21, 2015)

Blurred boundaries in the storage stack (March 24, 2016)

fallocate() and the block layer (April 27, 2016)

fanotify

The fanotify API (July 1, 2009)

In Brief (July 29, 2009)

Another new ABI for fanotify (November 11, 2009)

No fanotify for 2.6.36 (October 12, 2010)

Superblock watch for fsnotify (April 5, 2017)

Change notifications for network filesystems (May 25, 2022)

Fanotify and hierarchical storage management (May 23, 2023)

Monitoring mount operations (May 24, 2023)

Mount notifications (July 3, 2024)

Hierarchical storage management, fanotify, FUSE, and more (July 16, 2024)

Fast booting

Kernel Summit: kexec and fast booting (July 21, 2004)

LPC: Booting Linux in five seconds (September 22, 2008)

An asynchronous function call infrastructure (January 13, 2009)

fast_gup()

Toward better direct I/O scalability (March 31, 2008)

The lockless page cache (July 29, 2008)

fault()

Faulting out populate(), nopfn(), and nopage() (October 10, 2006)

fault() (July 23, 2007)

Fault injection

Injecting faults into the kernel (November 14, 2006)

BPF-based error injection for the kernel (November 29, 2017)

Fault tolerance

HWPOISON (August 26, 2009)

Hotplugging and poisoning (May 3, 2018)

How to cope with hardware-poisoned page-cache pages (May 5, 2022)

fcntl() method

The end of the fcntl() method (August 18, 2004)

Fibrils

Fibrils and asynchronous system calls (January 31, 2007)

Kernel fibrillation (February 6, 2007)

Alternatives to fibrils (February 13, 2007)

FIEMAP ioctl()

SEEK_HOLE or FIEMAP? (December 3, 2007)

Making FIEMAP and delayed allocation play well together (February 22, 2011)

The return of SEEK_HOLE (April 26, 2011)

File descriptors

Fun with file descriptors (June 4, 2007)

More fun with file descriptors (June 12, 2007)

File handle

Open by handle (February 23, 2010)

Filesystems

pramfs - a new filesystem (March 3, 2004)

Trapfs - an automounter on the cheap (November 3, 2004)

Debugfs (December 13, 2004)

The mini_fo filesystem (May 10, 2005)

A filesystem from Plan 9 space (May 25, 2005)

Files with negative offsets (May 31, 2005)

Coming soon: eCryptfs (October 25, 2005)

Shared subtrees (November 8, 2005)

KHB: A Filesystems reading list (August 21, 2006)

SEEK_HOLE or FIEMAP? (December 3, 2007)

What's AdvFS good for? (June 25, 2008)

Freezing filesystems and containers (June 25, 2008)

KS2008: Filesystem and block layer interaction (September 16, 2008)

A superficial introduction to fsblock (March 11, 2009)

That massive filesystem thread (March 31, 2009)

The two sides of reflink() (May 5, 2009)

This week's reflink() API (May 19, 2009)

Avoiding a read-only filesystem on errors (June 17, 2009)

Protected RAMFS (June 24, 2009)

Soft updates, hard problems (July 1, 2009)

O_*SYNC (September 1, 2009)

POSIX v. reality: A position on O_PONIES (September 9, 2009)

Featherstitch: Killing fsync() softly (September 30, 2009)

File holes, races, and mmap() (October 21, 2009)

LCA: Why filesystems are hard (January 20, 2010)

One billion files on Linux (August 18, 2010)

The return of SEEK_HOLE (April 26, 2011)

Runtime filesystem consistency checking (April 3, 2012)

O_HOT and O_COLD (April 24, 2012)

LSFMM: Range locking (May 1, 2013)

Two paths to a better readdir() (July 30, 2014)

Filesystem defragmentation (March 23, 2015)

UID/GID identity and filesystems (March 23, 2015)

Trading off safety and performance in the kernel (May 12, 2015)

Heading toward 2038-safe filesystems (January 21, 2016)

A case for variant symlinks (March 23, 2016)

Exposing extent information to user space (May 4, 2016)

Online filesystem scrubbing and repair (April 5, 2017)

Filesystem management interfaces (April 5, 2017)

Filesystem metadata memory management (April 24, 2018)

A filesystem "change journal" and other topics (June 4, 2018)

Implementing fully immutable files (April 19, 2019)

Filesystems for zoned block devices (May 21, 2019)

Filesystems and crash resistance (May 21, 2019)

Lazy file reflink (May 22, 2019)

Accessing zoned block devices with zonefs (July 23, 2019)

On-disk format robustness requirements for new filesystems (August 19, 2019)

Filesystem sandboxing with eBPF (November 6, 2019)

Zoned storage (June 14, 2022)

Toward a better definition for i_version (August 26, 2022)

Zoned storage and filesystems (May 25, 2023)

Improving i_version (July 5, 2023)

BPF iterators for filesystems (July 6, 2023)

The PuzzleFS container filesystem (September 25, 2023)

Rethinking multi-grain timestamps (October 9, 2023)

A new filesystem for pidfds (March 13, 2024)

Supporting larger block sizes in filesystems (May 22, 2024)

Handling the NFS change attribute (June 4, 2024)

Removing GFP_NOFS (June 5, 2024)

A new API for tree-in-dcache filesystems (July 9, 2024)

Access-time tracking

Once upon atime (August 8, 2007)

File creation times (July 26, 2010)

Deferring mtime and ctime updates (August 21, 2013)

Introducing lazytime (November 19, 2014)

Lazytime hits a snag (February 25, 2015)

APIs

New APIs for filesystems (May 30, 2024)

autofs

Fixing the unfixable autofs ABI (April 30, 2012)

bcachefs

The bcachefs filesystem (August 25, 2015)

An update on bcachefs (May 23, 2018)

Bcachefs gets closer (July 11, 2019)

Bringing bcachefs to the mainline (May 17, 2022)

Merging bcachefs (June 16, 2023)

Benchmarking

Kernel Hacker's Bookshelf: Generating Realistic Impressions for File-System Benchmarking (April 28, 2010)

Btrfs

btrfs and NILFS (June 19, 2007)

A better btrfs (January 15, 2008)

Btrfs to the mainline? (October 8, 2008)

Btrfs aims for the mainline (January 7, 2009)

A short history of btrfs (July 22, 2009)

JLS2009: A Btrfs update (October 27, 2009)

Supporting transactions in btrfs (November 11, 2009)

MeeGo and Btrfs (May 11, 2010)

Btrfs: broken by design? (June 22, 2010)

Data temperature in Btrfs (August 3, 2010)

A btrfs update at LinuxCon Europe (November 2, 2011)

Atime and btrfs: a bad combination? (May 31, 2012)

Btrfs send/receive (July 11, 2012)

LSFMM: Btrfs: "are we there yet?" (May 1, 2013)

The Btrfs filesystem: An introduction (December 11, 2013)

Btrfs: Getting started (December 17, 2013)

Btrfs: Working with multiple devices (December 30, 2013)

Btrfs: Subvolumes and snapshots (January 6, 2014)

Btrfs: Send/receive and ioctl() (January 22, 2014)

CoreOS looks to move from Btrfs to overlayfs (December 24, 2014)

In-band deduplication for Btrfs (March 9, 2016)

Btrfs and high-speed devices (August 24, 2016)

Adding encryption to Btrfs (September 21, 2016)

Authenticated Btrfs (April 30, 2020)

Btrfs at Facebook (July 2, 2020)

epoll_pwait2(), close_range(), and encoded I/O (November 20, 2020)

Btrfs on zoned block devices (April 19, 2021)

The Btrfs inode-number epic (part 1: the problem) (August 20, 2021)

The Btrfs inode-number epic (part 2: solutions) (August 23, 2021)

Snapshots, inodes, and filesystem identifiers (May 18, 2022)

Per-extent encrypted keys for fscrypt (January 5, 2023)

Case-independent lookups

The kernel and character set encodings (February 18, 2004)

Case-insensitive filesystem lookups (May 23, 2018)

Filesystems and case-insensitivity (November 28, 2018)

Case-insensitive ext4 (March 27, 2019)

Ceph

The Ceph filesystem (November 14, 2007)

Two that didn't make it (December 22, 2009)

LSFMM: FUSE and cloud storage (April 24, 2013)

Chunkfs

Filesystems: chunkfs and reiser4 (April 24, 2007)

What ever happened to chunkfs? (June 17, 2009)

Cluster

Should the Lustre preparation patches go in? (June 9, 2004)

The OCFS2 filesystem (May 24, 2005)

Time to merge GFS? (August 10, 2005)

Merging GFS2 (September 7, 2005)

A look inside the OCFS2 filesystem (September 1, 2010)

composefs

Composefs for integrity protection and data sharing (December 7, 2022)

Debating composefs (February 16, 2023)

A decision on composefs (June 7, 2023)

Compressed

Squashfs submitted for the mainline (October 29, 2008)

Copy on write

Sharing memory for shared file extents (May 24, 2022)

COW links

COW Links (March 29, 2004)

Deprecation policy

When and why to deprecate filesystems (March 7, 2022)

Trust in and maintenance of filesystems (November 21, 2023)

EROFS

An introduction to EROFS (June 7, 2023)

Memory-management: tiered memory, huge pages, and EROFS (August 15, 2024)

exFAT

The exfiltrated exFAT driver (July 24, 2013)

Examining exFAT (August 30, 2019)

ext3

ext3 block reservation (April 20, 2004)

Online resizing of ext3 filesystems (June 15, 2004)

Which filesystem for Samba4? (November 23, 2004)

Ext3 for large filesystems (June 12, 2006)

Time for ext4? (June 12, 2006)

A nasty file corruption bug - fixed (December 31, 2006)

ext3 metaclustering (January 16, 2008)

Barriers and journaling filesystems (May 21, 2008)

Solving the ext3 latency problem (April 14, 2009)

Ext3 and RAID: silent data killers? (August 31, 2009)

The Next3 filesystem (May 11, 2010)

rm -r fs/ext3 (July 21, 2015)

ext4

Time for ext4 (July 5, 2006)

Secure deletion and trash bin support (December 5, 2006)

A better ext4 (January 23, 2008)

Responding to ext4 journal corruption (May 27, 2008)

Online defragmentation for ext4 (February 4, 2009)

ext4 and data loss (March 11, 2009)

Removing ext2 and/or ext3 (February 9, 2011)

Ext4 snapshot concerns (June 8, 2011)

Securely deleting files from ext4 filesystems (October 11, 2011)

Improving ext4: bigalloc, inline data, and metadata checksums (November 29, 2011)

Supporting block I/O contexts (June 18, 2012)

Uninitialized blocks and unexpected flags (November 28, 2012)

A kernel change breaks GlusterFS (March 27, 2013)

Widening ext4's readdir() cookie (March 27, 2013)

Transparent decompression for ext4 (July 31, 2013)

Ext4 encryption (April 8, 2015)

A tale of two data-corruption bugs (May 24, 2015)

Encrypted file backup for ext4 (December 16, 2015)

Huge pages in the ext4 filesystem (March 28, 2017)

Evolving ext4 for SMR drives (April 19, 2017)

Case-insensitive ext4 (March 27, 2019)

The ABI status of filesystem formats (October 8, 2020)

Fast commits for ext4 (January 15, 2021)

Preventing information leaks from ext4 filesystems (April 27, 2021)

Ext4 data corruption hits the stable kernels (December 14, 2023)

Extended attributes

On reiserfs and external attributes (April 28, 2004)

Which filesystem for Samba4? (November 23, 2004)

Extended attributes for special files (September 9, 2021)

Retrieving kernel attributes (June 13, 2022)

Federated filesystem

LSFMM: FedFS (May 1, 2013)

File sealing

Sealed files (April 9, 2014)

Flash

LogFS (May 15, 2007)

UBIFS (April 2, 2008)

Block layer discard requests (August 12, 2008)

AXFS: a compressed, execute-in-place filesystem (August 26, 2008)

On the need for a new removable device filesystem (August 22, 2012)

An f2fs teardown (October 10, 2012)

A NILFS2 score card (November 7, 2012)

JFFS2, UBIFS, and the growth of flash storage (December 11, 2012)

Flash storage topics (June 6, 2018)

Supporting the UFS turbo-write mode (May 20, 2019)

fs-verity

File-level integrity (April 27, 2018)

Protecting files with fs-verity (August 30, 2018)

A setback for fs-verity (January 3, 2019)

Yet another try for fs-verity (June 3, 2019)

Fuzzing

Filesystem fuzzing (March 18, 2015)

A fuzzy issue of responsible disclosure (August 12, 2022)

Troubles with triaging syzbot reports (December 14, 2022)

GlusterFS

An introduction to GlusterFS (March 25, 2015)

InterMezzo

Goodbye to old code (May 19, 2004)

Internal API

Rust and C filesystem APIs (January 15, 2024)

Rust for filesystems (June 21, 2024)

In user space

FUSE - implementing filesystems in user space (January 27, 2004)

Should FUSE be merged? (November 23, 2004)

FUSE hits a snag (April 12, 2005)

FUSE and private namespaces (April 27, 2005)

LSFMM: FUSE and cloud storage (April 24, 2013)

LSFMM: Coprocessors, exit times, and volatile ranges, and more (April 23, 2013)

FUSE passthrough for file I/O (May 17, 2023)

FUSE and io_uring (May 19, 2023)

The FUSE BPF filesystem (July 11, 2023)

Hierarchical storage management, fanotify, FUSE, and more (July 16, 2024)

Famfs: a filesystem interface to shareable memory (July 30, 2024)

JFS

Kernel code on the chopping block (January 19, 2023)

ksmbd

A rough start for ksmbd (October 7, 2021)

Log-structured

Log-structured file systems: There's one in every SSD (September 18, 2009)

Lustre

Will staging lose its Lustre? (June 6, 2018)

Mounting

Unprivileged mounts (January 15, 2008)

Read-only bind mounts (May 6, 2008)

User and group mount options for ext filesystems (May 16, 2012)

Mount point removal and renaming (October 16, 2013)

A new API for mounting filesystems (April 2, 2017)

A new API for mounting filesystems (May 4, 2018)

Six (or seven) new system calls for filesystem mounting (July 12, 2018)

The mismatched mount mess (August 10, 2018)

configfd() and shifting bind mounts (January 10, 2020)

ID mapping for mounted filesystems (November 19, 2020)

ID-mapped mounts (May 30, 2022)

An operation for filesystem tucking (March 31, 2023)

Monitoring mount operations (May 24, 2023)

Mounting images inside a user namespace (June 13, 2023)

Retrieving mount and filesystem information in user space (June 14, 2023)

listmount() and statmount() (November 10, 2023)

Finishing the conversion to the "new" mount API (June 26, 2024)

Mount notifications (July 3, 2024)

Network

CRFS and POHMELFS (February 6, 2008)

Open by handle (February 23, 2010)

POHMELFS returns (February 8, 2012)

Network filesystem topics (May 4, 2016)

Network filesystem cache-management interfaces (March 29, 2017)

A network filesystem wish list (April 5, 2017)

Network filesystem topics (May 21, 2018)

SMB/CIFS compounding support (May 22, 2018)

The netfslib helper library (May 16, 2022)

Unique identifiers for NFS (May 18, 2022)

Change notifications for network filesystems (May 25, 2022)

NFS

LSFMM: NFS status (May 1, 2013)

Loopback NFS: theory and practice (April 23, 2014)

NFS performance (March 23, 2015)

NFS topics (May 14, 2019)

Common needs for Samba and NFS (May 15, 2019)

NFS: the early years (June 20, 2022)

NFS: the new millennium (June 24, 2022)

Converting NFSD to use iomap and folios (July 4, 2023)

Nonvolatile memory

The NOVA filesystem (August 4, 2017)

The NOVA filesystem (May 18, 2018)

The ZUFS zero-copy filesystem (June 6, 2018)

Taking ZUFS upstream (May 8, 2019)

ntfs3

Short subjects: Realtime, Futexes, and ntfs3 (August 16, 2021)

OrangeFS

The OrangeFS distributed filesystem (May 6, 2015)

osdfs

Linux and object storage devices (November 4, 2008)

Page cache

Dropping the page cache for filesystems (June 11, 2024)

POSIX locks

File-private POSIX locks (February 19, 2014)

Optional mandatory locking (December 9, 2015)

Pseudo

Dynamically allocated pseudo-filesystems (May 16, 2022)

Improving pseudo filesystems (July 10, 2024)

Reiser4

Reiser4 - the mammoth arrives (October 30, 2002)

On reiserfs and external attributes (April 28, 2004)

Looking at reiser4 (August 25, 2004)

More notes on reiser4 (September 1, 2004)

Toward merging reiser4 (September 11, 2005)

Reiser4 and kernel inclusion (September 21, 2005)

Debating reiser4 - again (August 1, 2006)

Filesystems: chunkfs and reiser4 (April 24, 2007)

Security

Unmaintained filesystems as a threat vector (July 28, 2023)

Defending mounted filesystems from the root user (August 21, 2023)

shiftfs

Container-aware filesystems (April 3, 2017)

Filesystem UID mapping for user namespaces: yet another shiftfs (February 17, 2020)

stat()

xstat() and fxstat() (June 30, 2010)

task_diag and statx() (May 4, 2016)

xstat() (May 4, 2016)

statx() v3 (November 30, 2016)

statx()

Making O_TMPFILE atomic (and statx() additions) (May 25, 2022)

Support APIs

Converting filesystems to iomap (June 27, 2023)

Filesystems and iomap (May 28, 2024)

Symbolic link depth

Supporting deeper symbolic links (June 30, 2004)

Testing

Filesystems, testing, and stable trees (May 31, 2022)

Challenges with fstests and blktests (June 1, 2022)

Best practices for fstests (June 7, 2022)

Filesystem testing for stable kernels (July 18, 2024)

tmpfs

Large-folio support for shmem and tmpfs (May 24, 2024)

Tux3

Tux3: the other next-generation filesystem (December 2, 2008)

Tux3 posted for review (May 21, 2014)

Union

Unionfs (January 10, 2007)

State of the unionfs (January 15, 2008)

Unifying filesystems with union mounts (December 24, 2008)

Unioning file systems: Architecture, features, and design choices (March 18, 2009)

Union file systems: Implementations, part I (March 25, 2009)

Unioning file systems: Implementations, part 2 (April 7, 2009)

A brief history of union mounts (July 14, 2010)

Another union filesystem approach (September 1, 2010)

Debating overlayfs (June 15, 2011)

Overlayfs for 3.10 (March 13, 2013)

CoreOS looks to move from Btrfs to overlayfs (December 24, 2014)

Overlayfs issues and experiences (March 17, 2015)

Sharing pages between mappings (March 26, 2017)

Overlayfs features (March 29, 2017)

Virtual filesystem layer

Kernel Summit 2005: Virtual filesystem topics (July 19, 2005)

Kernel Summit 2006: The VFS layer (July 19, 2006)

Some VFS address space operations changes (October 17, 2007)

A new way to truncate() files (July 15, 2009)

JLS: Increasing VFS scalability (November 3, 2009)

Big reader locks (March 16, 2010)

VFS scalability patches in 2.6.36 (August 24, 2010)

Resolving the inode scalability discussion (October 26, 2010)

Dcache scalability and RCU-walk (December 14, 2010)

Toward a safer fput() (April 24, 2012)

VFS hot-data tracking (November 20, 2012)

Virtual filesystem layer changes, past and future (March 16, 2015)

Pathname lookup in Linux (June 24, 2015)

RCU-walk: faster pathname lookup in Linux (July 1, 2015)

A walk among the symlinks (July 14, 2015)

An in-kernel file loading interface (February 17, 2016)

VFS parallel lookups (April 27, 2016)

Parallel pathname lookups and the importance of testing (June 29, 2016)

Restricting pathname resolution with AT_NO_JUMPS (May 17, 2017)

Messiness in removing directories (June 13, 2018)

New AT_ flags for restricting pathname lookup (October 4, 2018)

io_uring, SCM_RIGHTS, and reference-count cycles (February 13, 2019)

Restricting path name lookup with openat2() (August 22, 2019)

O_MAYEXEC — explicitly opening files for execution (May 11, 2020)

From O_MAYEXEC to trusted_for() (October 1, 2020)

Avoiding blocking file-name lookups (January 21, 2021)

Hole-punching races against page-cache filling (July 29, 2021)

trusted_for() bounces off the merge window (April 12, 2022)

Two VFS topics (June 9, 2023)

A virtual filesystem locking surprise (July 31, 2023)

Following up on file-position locking (August 11, 2023)

The hard life of a virtual-filesystem developer (February 1, 2024)

Virtualization

A filesystem for virtualization (May 14, 2019)

Workshops

Linux Storage and Filesystem workshop, day 1 (April 7, 2009)

Linux Storage and Filesystem Workshop, day 2 (April 8, 2009)

The 2010 Linux Storage and Filesystem Summit, day 1 (August 9, 2010)

The 2010 Linux Storage and Filesystem Summit, day 2 (August 10, 2010)

Linux Filesystem, Storage, and Memory Management Summit, Day 1 (April 5, 2011)

Linux Filesystem, Storage, and Memory Management Summit, Day 2 (April 6, 2011)

XFS

XFS: the filesystem of the future? (January 20, 2012)

XFS: There and back ... and there again? (April 1, 2015)

New tricks for XFS (February 21, 2018)

XFS parent pointers (May 7, 2018)

XFS online filesystem scrubbing and repair (May 16, 2018)

XFS, LSM, and low-level management APIs (October 2, 2018)

Atomic extent swapping for XFS (May 1, 2020)

XFS, stable kernels, and -rc releases (December 3, 2020)

XFS online filesystem check and repair (June 15, 2023)

Backporting XFS fixes to stable (June 20, 2023)

File Systems Workshop

2006

The 2006 Linux File Systems Workshop (July 5, 2006)

Filtered wakeups

Filtered wakeups (May 5, 2004)

Firmware

The kernel and binary firmware (April 6, 2005)

Using the firmware loader for static data (May 28, 2008)

Moving the firmware out (June 4, 2008)

KS2010: Lightning talks (November 2, 2010)

The trouble with firmware (January 5, 2011)

Firmware loading and suspend/resume (August 15, 2012)

Udev and firmware (October 10, 2012)

Firmware signing (May 27, 2015)

The Sound Open Firmware project launches (March 21, 2018)

Fistgen

Recent patches of interest (August 4, 2004)

Flexible arrays

Flexible arrays (August 5, 2009)

flink()

flink() at last? (August 7, 2013)

flink() flunks (August 28, 2013)

Forced unmount

revoke() and frevoke() (July 25, 2006)

Hotplug file descriptors and revoke() (April 14, 2009)

Fork bombs

Defending against fork bombs (May 3, 2005)

Fighting fork bombs (March 29, 2011)

fsblock

Large pages, large blocks, and large problems (September 19, 2007)

A superficial introduction to fsblock (March 11, 2009)

Various page cache issues (March 26, 2014)

FS-Cache

Credential records (September 25, 2007)

Justifying FS-Cache (December 24, 2008)

Large folios, swap, and FS-Cache (July 24, 2024)

Ftrace

The source of the e1000e corruption bug (October 21, 2008)

Speeding up ftrace printing (March 4, 2009)

A look at ftrace (March 13, 2009)

On the value of static tracepoints (April 28, 2009)

Seccomp and sandboxing (May 13, 2009)

Dynamic probes with ftrace (July 28, 2009)

Debugging the kernel using Ftrace - part 1 (December 9, 2009)

Debugging the kernel using Ftrace - part 2 (December 22, 2009)

Secrets of the Ftrace function tracer (January 20, 2010)

trace-cmd: A front-end for Ftrace (October 20, 2010)

Using KernelShark to analyze the real-time scheduler (February 2, 2011)

Ftrace, perf, and the tracing ABI (May 11, 2011)

Triggers for tracing (June 26, 2013)

Ftrace: The hidden light switch (August 13, 2014)

Ftrace and histograms: a fork in the road (March 4, 2015)

KernelShark releases version 1.0 (July 31, 2019)

Accurate timestamps for the ftrace ring buffer (September 22, 2020)

FUSYN

FUSYNs - robust user-space synchronization primitives (January 21, 2004)

Futex

FUTEX + rwsem = SNAFU (February 23, 2005)

Robust futexes - a new approach (February 15, 2006)

Priority inheritance in the kernel (April 3, 2006)

A futex overview and update (November 11, 2009)

Adaptive spinning futexes (May 11, 2010)

In pursuit of faster futexes (May 4, 2016)

Adaptive mutexes in user space (November 2, 2016)

Rethinking the futex API (June 18, 2020)

Short subjects: Realtime, Futexes, and ntfs3 (August 16, 2021)

A new futex API (August 14, 2023)

GCC

Shrinking the kernel with gcc (January 21, 2004)

The end of gcc 2.95 support (December 13, 2005)

GCC 4.3.0 exposes a kernel bug (March 7, 2008)

Better kernels with GCC plugins (October 5, 2011)

Betrayed by a bitfield (February 1, 2012)

Signed overflow optimization hazards in the kernel (August 15, 2012)

Rethinking optimization for size (January 30, 2013)

The future of GCC plugins in the kernel (April 1, 2021)

Moving the kernel to modern C (February 24, 2022)

General-purpose I/O

GPIO in the kernel: an introduction (January 16, 2013)

GPIO in the kernel: future directions (January 23, 2013)

get_user_inatomic()

FUTEX + rwsem = SNAFU (February 23, 2005)

get_vaddr_frames()

4.3 Merge window, part 3 (September 14, 2015)

gfp_t

Introducing gfp_t (October 11, 2005)

Avoiding memory-allocation deadlocks (April 16, 2014)

Understanding __GFP_FS (April 30, 2014)

GFS

Kernel Summit: Clustered storage (July 21, 2004)

Time to merge GFS? (August 10, 2005)

Merging GFS2 (September 7, 2005)

Git

The guts of git (April 12, 2005)

A very quick guide to starting with git (April 20, 2005)

Git approaches 1.0 (July 27, 2005)

Bisection divides users and developers (April 15, 2008)

How patches get into the mainline (February 10, 2009)

Rebasing and merging: some git best practices (April 14, 2009)

How old is our kernel? (February 17, 2010)

Finding a patch's kernel version with git (June 16, 2010)

Authenticating Git pull requests (November 9, 2011)

Rebasing and merging in kernel repositories (June 18, 2019)

Handling messy pull-request diffstats (April 22, 2022)

GmailFS

GmailFS - using Gmail as a filesystem (August 30, 2004)

Goldman Sachs

Kernel Summit: The customer panel (July 21, 2004)

Google

KS2009: How Google uses Linux (October 21, 2009)

Moving Google toward the mainline (October 5, 2021)

GPIO

GPIO in the kernel: an introduction (January 16, 2013)

GPIO in the kernel: future directions (January 23, 2013)

Grand Unified Flow Cache

The Grand Unified Flow Cache (August 7, 2006)

Graphics Execution Manager (GEM)

GEM v. TTM (May 28, 2008)

Greybus

Greybus (June 17, 2015)

Greybus (March 1, 2017)

Group scheduling

CFS group scheduling (July 2, 2007)

TTY-based group scheduling (November 17, 2010)

Group scheduling and alternatives (December 6, 2010)

CFS bandwidth control (February 16, 2011)

A group scheduling demonstration (March 16, 2011)

grsecurity

The future for grsecurity (January 7, 2009)

Post-init read-only memory (December 2, 2015)

Hardware abstraction layers

HALs considered harmful (March 15, 2005)

Hashing functions

Generic hashing functions and the platform problem (May 18, 2016)

SipHash in the kernel (January 10, 2017)

Hash table

A generic hash table (August 8, 2012)

Relativistic hash tables, part 1: Algorithms (September 17, 2014)

Relativistic hash tables, part 2: Implementation (September 17, 2014)

The rhashtable documentation I wanted to read (April 13, 2018)

Rhashtables: under the hood (April 21, 2018)

Head Bubba

KS2007: The customer panel (September 8, 2007)

HostAP

Toward a generic wireless access point stack (June 9, 2004)

Hotplug

Safe PCI hot removal (June 9, 2004)

Configuration of pluggable network adaptors (September 22, 2004)

Rationalizing CPU hotplugging (February 12, 2013)

Optimizing CPU hotplug locking (October 9, 2013)

Revisiting CPU hotplug locking (October 16, 2013)

Braking CPU hotplug (May 14, 2014)

The modernization of PCIe hotplug in Linux (October 8, 2018)

Memory

Fragmentation avoidance (November 2, 2005)

More on fragmentation avoidance (November 8, 2005)

VM followup: page migration and fragmentation avoidance (November 16, 2005)

Short topics in memory management (March 6, 2007)

Plans for hot adding and removing memory (June 12, 2013)

Hotplugging and poisoning (May 3, 2018)

hrtimer

The high-resolution timer API (January 16, 2006)

Clockevents and dyntick (February 21, 2007)

High- (but not too high-) resolution timeouts (September 2, 2008)

Greedy hrtimer expiration (October 4, 2011)

Short sleeps suffering from slack (February 17, 2012)

Leaping seconds and looping servers (July 2, 2012)

Huge pages

Fragmentation avoidance (November 2, 2005)

Application-friendly kernel interfaces (March 26, 2007)

Large pages, large blocks, and large problems (September 19, 2007)

Transparent hugepages (October 28, 2009)

Huge pages part 1 (Introduction) (February 16, 2010)

Huge pages part 2: Interfaces (February 24, 2010)

Huge pages part 3: Administration (March 3, 2010)

Huge pages part 4: benchmarking with huge pages (March 17, 2010)

Huge pages part 5: A deeper look at TLBs and costs (March 23, 2010)

Memory management for virtualization (April 7, 2010)

Transparent huge pages in 2.6.38 (January 19, 2011)

Huge pages, slow drives, and long delays (November 14, 2011)

Adding a huge zero page (September 26, 2012)

Supporting variable-sized huge pages (January 23, 2013)

A survey of memory management patches (August 6, 2013)

Huge page issues (March 26, 2014)

Transparent huge page reference counting (November 11, 2014)

Improving huge page handling (March 11, 2015)

Two transparent huge page cache implementations (April 20, 2016)

Transparent huge pages in the page cache (May 11, 2016)

Huge pages in the ext4 filesystem (March 28, 2017)

Transparent huge pages for filesystems (May 22, 2019)

Triggering huge-page collapse from user space (March 14, 2022)

Sharing page tables with mshare() (May 17, 2022)

The transparent huge page shrinker (September 8, 2022)

Toward the unification of hugetlbfs (May 22, 2024)

hugetlbfs

Huge pages part 1 (Introduction) (February 16, 2010)

Fixing a race in hugetlbfs (May 20, 2022)

Toward the unification of hugetlbfs (May 22, 2024)

HWPOISON

HWPOISON (August 26, 2009)

Hotplugging and poisoning (May 3, 2018)

How to cope with hardware-poisoned page-cache pages (May 5, 2022)

Hyperthreading

Is hyperthreading dangerous? (May 17, 2005)

HZ

Boot-time clock frequency selection (December 14, 2004)

How fast should HZ be? (August 2, 2005)

NoHZ tasks (December 20, 2010)

ia32e

Intel's new 64-bit architecture and Linux (February 25, 2004)

IDA

IDA: simplifying the complex task of allocating integers (September 4, 2018)

idr

idr - integer ID management (September 22, 2004)

A simplified IDR API (February 6, 2013)

Tags and IDs (June 19, 2013)

in_atomic()

Atomic context and kernel API design (March 25, 2008)

Include files

Kernel headers and user space (November 30, 2004)

The UAPI header file split (July 25, 2012)

Unscheduled maintenance for sched.h (February 8, 2017)

indirect()

sys_indirect() (November 19, 2007)

System call updates: indirect(), timerfd(), and hijack() (November 28, 2007)

Extending system calls (May 14, 2008)

Industrial I/O devices

Ambient light sensors (June 2, 2010)

(Partially) graduating IIO (November 2, 2011)

InfiniBand

InfiniBand: a proprietary standard? (October 13, 2004)

InfiniBand arrives (November 23, 2004)

A Linux kernel compatibility layer for FreeBSD? (January 5, 2011)

initramfs

Initramfs arrives (November 6, 2002)

initramfs and where user space truly begins (July 11, 2006)

Dracut looks to replace the initramfs patchwork (February 4, 2009)

Inline functions

The cost of inline functions (April 28, 2004)

Drawing the line on inline (January 3, 2006)

Who is the best inliner of all? (January 14, 2009)

Inotify

Recent patches of interest (August 4, 2004)

Watching filesystem events with inotify (September 29, 2004)

Filesystem notification, part 1: An overview of dnotify and inotify (July 9, 2014)

Filesystem notification, part 2: A deeper investigation of inotify (July 14, 2014)

Change notifications for network filesystems (May 25, 2022)

Integrity measurement architecture

The Integrity Measurement Architecture (May 24, 2005)

OLS: Linux and trusted computing (July 22, 2005)

Some trusted computing security modules (November 15, 2005)

Integrity management in the kernel (March 28, 2007)

The return of EVM (June 30, 2010)

IMA memory hog (October 20, 2010)

IMA appraisal extension (March 28, 2012)

A kernel integrity subsystem update (May 2, 2018)

Interactivity

The staircase scheduler (June 2, 2004)

Solving starvation problems in the scheduler (March 22, 2006)

The Rotating Staircase Deadline Scheduler (March 6, 2007)

RSDL hits a snag (March 14, 2007)

Schedulers: the plot thickens (April 17, 2007)

This week in the scheduling discussion (April 24, 2007)

TTY-based group scheduling (November 17, 2010)

InterMezzo

Goodbye to old code (May 19, 2004)

Internet protocol

On the alignment of IP packets (June 15, 2004)

Interrupts

Voluntary preemption and hardware interrupts (July 27, 2004)

Approaches to realtime Linux (October 12, 2004)

Handling interrupts in user space (March 15, 2005)

The dynamic tick patch (June 7, 2005)

Realtime and interrupt latency (June 14, 2005)

NAPI performance - a weighty matter (June 15, 2005)

A new generic IRQ layer (May 23, 2006)

API changes: interrupt handlers and vectored I/O (October 2, 2006)

Various topics, all related to interrupts (October 24, 2007)

KS2008: All about threads (September 17, 2008)

Moving interrupts to threads (October 8, 2008)

Interrupts, threads, and lockdep (March 3, 2009)

Eliminating rwlocks and IRQF_DISABLED (December 1, 2009)

Disabling IRQF_DISABLED (March 30, 2010)

Improving lost and spurious IRQ handling (June 15, 2010)

Irked by NO_IRQ (December 7, 2011)

Software

Software interrupts and realtime (October 17, 2012)

The 2012 realtime minisummit (October 24, 2012)

Threadable NAPI polling, softirqs, and proper fixes (May 18, 2016)

Per-vector software-interrupt masking (February 15, 2019)

Juggling software interrupts and realtime tasks (December 2, 2022)

Heuristics for software-interrupt processing (March 13, 2023)

Beginning the software-interrupt lock pushdown (August 4, 2023)

Nested bottom-half locking for realtime kernels (June 17, 2024)

I/O AT

Memory copies in hardware (December 7, 2005)

ioctl()

The Big Kernel Lock lives on (May 26, 2004)

ioctl(), the big kernel lock, and 32-bit compatibility (December 15, 2004)

The new way of ioctl() (January 18, 2005)

Kernel Summit 2006: The ioctl() interface (July 18, 2006)

Security modules and ioctl() (February 16, 2011)

Fixing FS_IOC_GETFLAGS (December 11, 2013)

XFS, LSM, and low-level management APIs (October 2, 2018)

ioctl() for io_uring (February 4, 2021)

ioctl() forever? (June 8, 2022)

__iomem

A new I/O memory access mechanism (September 15, 2004)

I/O memory

A new I/O memory access mechanism (September 15, 2004)

I/O space write barriers (September 22, 2004)

Big-endian I/O memory (April 20, 2005)

64-bit resources (June 13, 2006)

Device resource management (January 2, 2007)

Large I/O memory in small address spaces (November 4, 2008)

Driver API: sleeping poll(), exclusive I/O memory, and DMA API debugging (November 24, 2008)

CXL 2: Pooling, sharing, and I/O-memory resources (May 19, 2022)

IOMMU

Kernel Summit 2006: DMA and IOMMU issues (July 19, 2006)

Error handling for I/O memory management units (August 20, 2014)

ION

The Android ION memory allocator (February 8, 2012)

Integrating the ION memory allocator (September 4, 2013)

Destaging ION (July 9, 2019)

DMA-BUF cache handling: Off the DMA API map (part 1) (June 4, 2020)

ioremap()

ARM's multiply-mapped memory mess (October 12, 2010)

ioremap() and memremap() (August 5, 2015)

io_remap_page_range()

API changes under consideration (August 24, 2004)

io_remap_pfn_range()

io_remap_pfn_range() (March 29, 2005)

I/O scheduler

Modular, switchable I/O schedulers (September 21, 2004)

Coming in 2.6.10 (October 20, 2004)

Into the ABISS (November 9, 2004)

Which is the fairest I/O scheduler of them all? (December 8, 2004)

Variations on fair I/O schedulers (December 3, 2008)

The block I/O controller (November 7, 2009)

An IOPS-based I/O scheduler (January 4, 2012)

The BFQ I/O scheduler (June 11, 2014)

Two new block I/O schedulers for 4.12 (April 24, 2017)

io_uring

Ringing in a new asynchronous I/O API (January 15, 2019)

io_uring, SCM_RIGHTS, and reference-count cycles (February 13, 2019)

Redesigned workqueues for io_uring (October 25, 2019)

The rapid growth of io_uring (January 24, 2020)

Two new ways to read a file quickly (March 6, 2020)

Automatic buffer selection for io_uring (March 20, 2020)

Operations restrictions for io_uring (July 15, 2020)

Avoiding blocking file-name lookups (January 21, 2021)

ioctl() for io_uring (February 4, 2021)

BPF meets io_uring (March 4, 2021)

GDB and io_uring (March 31, 2021)

Auditing io_uring (June 3, 2021)

Descriptorless files for io_uring (July 19, 2021)

In search of an appropriate RLIMIT_MEMLOCK default (November 19, 2021)

Zero-copy network transmission with io_uring (December 30, 2021)

Security requirements for new kernel features (July 28, 2022)

An io_uring-based user-space block driver (August 8, 2022)

Crash recovery for user-space block drivers (August 29, 2022)

Introducing io_uring_spawn (September 20, 2022)

Rethinking splice() (February 17, 2023)

FUSE and io_uring (May 19, 2023)

Security topics: io_uring, VM attestation, and random-reseed notifications (September 4, 2023)

The trouble with iowait (September 10, 2024)

iov_iter

The iov_iter interface (December 9, 2014)

Virtual filesystem layer changes, past and future (March 16, 2015)

A farewell to set_fs()? (May 10, 2017)

ipchains

Goodbye, old code (September 22, 2004)

IPv6

Kernel Summit: Network summit summary (July 21, 2004)

irqd

Voluntary preemption and hardware interrupts (July 27, 2004)

iSCSI

Network block devices and OOM safety (March 30, 2005)

Jailhouse

Understanding the Jailhouse hypervisor, part 1 (January 1, 2014)

Understanding the Jailhouse hypervisor, part 2 (January 7, 2014)

JFS

The kernel and character set encodings (February 18, 2004)

Jump label

Minimizing instrumentation impacts (December 9, 2009)

Jump label (October 27, 2010)

Jump label reworked (March 30, 2011)

very_unlikely() very unliked (February 29, 2012)

KASan

The kernel address sanitizer (September 17, 2014)

Memory-management testing and debugging (March 16, 2015)

Software-tag-based KASAN (September 26, 2018)

Finding bugs with sanitizers (September 27, 2022)

kdb

Merging kdb and kgdb (February 17, 2010)

kdbus

ALS: Linux interprocess communication and kdbus (May 30, 2013)

The LPC Android microconference (October 17, 2013)

The unveiling of kdbus (January 13, 2014)

Kdbus meets linux-kernel (November 4, 2014)

Version 2 of the kdbus patch set (December 3, 2014)

Obstacles for kdbus (April 15, 2015)

The kdbuswreck (April 22, 2015)

Trying to head off kdbus (June 24, 2015)

The LPC Android microconference, part 1 (September 8, 2015)

A mismatch of development styles (November 11, 2015)

Bus1: a new Linux interprocess communication proposal (August 17, 2016)

Kernel

Scheduler

What remains to be done for proxy execution (December 4, 2023)

Kernel Hacker's Bookshelf

KHB: A Filesystems reading list (August 21, 2006)

KHB: Synthesis: An Efficient Implementation of Fundamental Operating Systems Services (February 20, 2008)

The Kernel Hacker's Bookshelf: Ultimate Physical Limits of Computation (June 18, 2008)

The Kernel Hacker's Bookshelf: UNIX Internals (September 3, 2008)

Kernel Hacker's Bookshelf: Generating Realistic Impressions for File-System Benchmarking (April 28, 2010)

Kernel markers

Kernel markers (August 15, 2007)

Kernel markers and binary-only modules (March 24, 2008)

Kernel messages

Sanitizing log file output (June 29, 2011)

The structured logging challenge (July 12, 2011)

KS2011: Structured error logging (October 24, 2011)

Toward more reliable logging (April 13, 2012)

Various tweaks to printk() (May 16, 2012)

printk() problems (June 26, 2012)

The perils of printk() (November 9, 2016)

printk() and KERN_CONT (August 30, 2017)

Improving printk() (November 1, 2017)

Reimplementing printk() (February 26, 2019)

Why printk() is so complicated (and how to fix it) (October 3, 2019)

Printbuf rebuffed for now (April 28, 2022)

A discussion on printk() (October 4, 2022)

The real realtime preemption end game (November 16, 2023)

Kernel.org

A kernel.org update (July 22, 2009)

Kernel development without kernel.org (September 13, 2011)

Kernel.org's road to recovery (October 4, 2011)

A kernel.org update (October 29, 2013)

Kernel.org news: two-factor authentication and more (August 25, 2014)

Kernel stack

4K Stacks in 2.6 (May 12, 2004)

4K stacks: some issues remain (May 18, 2004)

4K stacks for everyone? (September 7, 2005)

4K stacks - again (November 15, 2005)

4K stacks by default? (April 23, 2008)

Expanding the kernel stack (May 29, 2014)

Virtually mapped kernel stacks (June 22, 2016)

Virtually mapped stacks 2: thread_info strikes back (June 29, 2016)

Dynamically sizing the kernel stack (May 21, 2024)

Kernel Summit

The Ottawa Kernel Summit, Day One (June 24, 2002)

The Ottawa Kernel Summit, Day Two (June 25, 2002)

The 2003 Kernel Developers Summit (July 22, 2003)

The 2004 Kernel Summit (July 21, 2004)

The 2005 Linux Kernel Developers' Summit (July 19, 2005)

The 2006 Linux Kernel Summit (July 18, 2006)

Kernel Summit 2007 - an advance view (August 24, 2007)

The 2007 Kernel Summit (September 6, 2007)

The 2008 Linux Kernel Summit (September 16, 2008)

The 2009 Linux Kernel Summit (October 19, 2009)

The 2010 Kernel Summit (November 2, 2010)

The 2011 Kernel Summit (October 24, 2011)

Proposals for Kernel Summit discussions (June 20, 2012)

The 2012 Kernel Summit (August 29, 2012)

Kernel threads

Kernel threads made easy (January 6, 2004)

Too many threads (April 10, 2007)

The slow work mechanism (April 22, 2009)

Concurrency-managed workqueues (October 7, 2009)

Concurrency-managed workqueues and thread priorities (June 22, 2010)

Working on workqueues (September 7, 2010)

Improving (or removing) the kthread freezer (November 2, 2015)

The problematic kthread freezer (November 2, 2016)

Removing the kthread freezer? (April 25, 2018)

Removing the kthread freezer (June 23, 2023)

Ketchup

Ketchup with that? (April 28, 2004)

Kevent

The kevent interface (February 22, 2006)

Implementing network channels (May 1, 2006)

OLS: A proposal for a new networking API (July 22, 2006)

Toward a kernel events interface (August 1, 2006)

Kevents and review of new APIs (August 23, 2006)

This week's version of the kevent interface (November 7, 2006)

Kevent take 26 (December 12, 2006)

Kernel events without kevents (March 13, 2007)

The return of kevent? (May 8, 2007)

The return of syslets (May 30, 2007)

Kexec

Kernel Summit: kexec and fast booting (July 21, 2004)

Crash dumps with kexec (October 27, 2004)

Kernel Summit 2005: RAS tools (July 20, 2005)

Yet another approach to software suspend (July 18, 2007)

Reworking kexec for signatures (June 25, 2014)

Preserving guest memory across kexec (May 20, 2022)

kfifo

Coming in 2.6.10 (October 20, 2004)

A new API for kfifo? (August 19, 2009)

kgdb

Bringing kgdb into 2.6 (February 10, 2004)

kgdb getting closer to being merged? (February 20, 2008)

Merging kdb and kgdb (February 17, 2010)

klibc

initramfs and where user space truly begins (July 11, 2006)

Kernel Summit 2006: The user-space API (July 18, 2006)

klist

Device model changes in store (March 22, 2005)

A pair of klist API changes (September 7, 2005)

kmap_atomic()

On not getting burned by kmap_atomic() (November 16, 2004)

Fixing kmap_atomic() (October 13, 2009)

Four short stories about preempt_count() (September 18, 2020)

Atomic kmaps become local (November 6, 2020)

kmsg_dumper

kmsg_dumper (December 16, 2009)

kobject_hotplug()

Use in kernel events layer

Figuring out kernel event reporting (September 8, 2004)

KProbes

An introduction to KProbes (April 18, 2005)

Tracing infrastructures (September 19, 2006)

Kprobes

Dynamic probes with ftrace (July 28, 2009)

Minimizing instrumentation impacts (December 9, 2009)

kref

The debut of kref (March 16, 2004)

RCU-safe reference counting (July 14, 2004)

ksize()

Getting the measure of ksize() (February 17, 2009)

Ksplice

Ksplice: kernel patches without reboots (April 29, 2008)

Ksplice and kreplace (November 24, 2008)

Followups: performance counters, ksplice, and fsnotify (December 17, 2008)

Kswapd

Kswapd and high-order allocations (September 8, 2004)

ktask

ktask: optimizing CPU-intensive kernel work (November 9, 2018)

KVM

Patch summary: regulatory domains, network channels, and virtualization (October 25, 2006)

Some KVM developments (January 9, 2007)

KVM 15 (February 26, 2007)

Memory management notifiers (January 23, 2008)

KVM, QEMU, and kernel project management (March 23, 2010)

The native KVM tool (April 12, 2011)

Merging the kvm tool (August 23, 2011)

No kvmtool in the mainline (February 20, 2013)

Supporting KVM on the ARM architecture (July 3, 2013)

Realtime KVM (September 10, 2015)

A recap of KVM Forum 2019 (November 19, 2019)

Enhancing KVM for guest protection and security (November 20, 2019)

KVM for Android (November 11, 2020)

Why RISC-V doesn't (yet) support KVM (May 20, 2021)

kzalloc()

kzalloc() (August 10, 2005)

Laptop mode

Laptop mode for 2.6 (January 7, 2004)

Large-memory systems

The merging of anon_vma and 4G/4G (May 26, 2004)

Four-level page tables (October 12, 2004)

Rethinking four-level page tables (December 22, 2004)

Four-level page tables merged (January 5, 2005)

Latency

Addressing latency problems in 2.6 (July 14, 2004)

Voluntary preemption and hardware interrupts (July 27, 2004)

Update from the latency front (August 18, 2004)

The Big Kernel Semaphore? (September 15, 2004)

Approaches to realtime Linux (October 12, 2004)

Realtime preemption, part 2 (October 20, 2004)

Boot-time clock frequency selection (December 14, 2004)

Merging the realtime security module (January 11, 2005)

Low latency for audio applications (January 26, 2005)

Audio latency goes full circle (February 8, 2005)

Realtime preemption and read-copy-update (March 30, 2005)

Audio latency - resource limits win (May 3, 2005)

The beginning of the realtime preemption debate (June 1, 2005)

Realtime and interrupt latency (June 14, 2005)

An API for specifying latency constraints (August 28, 2006)

KS2007: The customer panel (September 8, 2007)

Finding system latency with LatencyTOP (January 23, 2008)

The big kernel lock strikes again (May 13, 2008)

Some notes from the BFS discussion (September 9, 2009)

Various scheduler-related topics (September 15, 2009)

The realtime preemption mini-summit (September 28, 2009)

Improving scheduler latency (September 14, 2010)

Realtime group scheduling doesn't know JACK (December 19, 2010)

The many faces of "latency nice" (May 18, 2020)

Improved response times with latency nice (March 17, 2022)

Reports from OSPM 2024, part 1 (July 11, 2024)

Legal issues

Long discussions about long names (May 4, 2009)

Lguest

An introduction to lguest (January 23, 2007)

libata

Big block transfers: good or bad? (March 29, 2004)

Parallel IDE drivers (September 5, 2006)

Library mode

Running the kernel in library mode (April 8, 2015)

likely()

How likely should likely() be? (February 10, 2004)

Briefly: patch quality, CKRM, likely(), and vmsplice() (May 3, 2006)

Likely unlikely()s (December 15, 2010)

linux-next

linux-next and patch management process (February 13, 2008)

A day in the life of linux-next (June 23, 2008)

The current development kernel is...linux-next? (July 8, 2008)

Linux-next meets the merge window (July 23, 2008)

Bypassing linux-next (January 19, 2011)

KS2012: Improving development processes: linux-next (September 12, 2012)

The state of linux-next (August 20, 2014)

Linux Plumbers Conference

2017

An update on live kernel patching (September 27, 2017)

LinuxTag

2010

The state of realtime Linux (June 15, 2010)

Live patching

Ksplice: kernel patches without reboots (April 29, 2008)

Ksplice and kreplace (November 24, 2008)

Followups: performance counters, ksplice, and fsnotify (December 17, 2008)

The initial kGraft submission (April 30, 2014)

The first kpatch submission (May 7, 2014)

A rough patch for live patching (February 25, 2015)

Compile-time stack validation (September 30, 2015)

Topics in live kernel patching (November 14, 2016)

Live patching for CPU vulnerabilities (December 20, 2018)

llseek()

Safe seeks (August 10, 2004)

local_t

The search for fast, scalable counters (February 1, 2006)

Lockdep

The kernel lock validator (May 31, 2006)

Interrupts, threads, and lockdep (March 3, 2009)

User-space lockdep (February 6, 2013)

Enhancing lockdep with crossrelease (December 21, 2016)

Lock elision

Scalability techniques (October 29, 2013)

Locking mechanisms

Windows NT synchronization primitives for Linux (February 16, 2024)

Local locks

Local locks in the kernel (August 11, 2020)

Mutexes

Reworking the semaphore interface (December 14, 2005)

Semaphores and mutexes (December 20, 2005)

Goodbye semaphores? (January 3, 2006)

The mutex API (January 10, 2006)

Priority inheritance in the kernel (April 3, 2006)

Btrfs aims for the mainline (January 7, 2009)

Preventing overly-optimistic spinning (August 25, 2010)

Wait/wound mutexes (May 1, 2013)

A surprise with mutexes and reference counts (December 4, 2013)

Reimplementing mutexes with a coupled lock (September 8, 2016)

Semaphores

The shrinking role of semaphores (April 7, 2023)

seqlocks

Driver porting: mutual exclusion with seqlocks (February 14, 2003)

The seqcount latch lock type (September 17, 2020)

lock_kernel()

The Big Kernel Lock lives on (May 26, 2004)

The big kernel lock strikes again (May 13, 2008)

Kill BKL Vol. 2 (May 21, 2008)

The BKL end game (March 30, 2010)

Might 2.6.35 be BKL-free? (April 27, 2010)

BKL-free in 2.6.37 (maybe) (September 20, 2010)

Lockless algorithms

Lockless algorithms for mere mortals (July 28, 2020)

An introduction to lockless algorithms (February 19, 2021)

Lockless patterns: relaxed access and partial memory barriers (February 26, 2021)

Lockless patterns: full memory barriers (March 5, 2021)

Lockless patterns: an introduction to compare-and-swap (March 12, 2021)

Lockless patterns: more read-modify-write operations (March 19, 2021)

Lockless patterns: some final topics (March 29, 2021)

Detecting missing memory barriers with KCSAN (December 2, 2021)

Lockless page cache

The lockless page cache (July 29, 2008)

Lockref

Introducing lockrefs (September 4, 2013)

LogFS

LogFS (May 15, 2007)

LogFS returns (November 24, 2009)

Logical memory block (LMB)

Moving x86 to LMB (May 11, 2010)

Long-term support initiative

The embedded long-term support initiative (October 29, 2011)

A long-term support initiative update (February 29, 2012)

LTSI and Fuego (July 20, 2016)

Backports and long-term stable kernels (September 14, 2016)

Super long-term kernel support (March 19, 2018)

Loopback device

Partitioned loopback devices (November 10, 2004)

Asynchronous block loop I/O (January 30, 2013)

Private loop devices with loopfs (May 7, 2020)

Lumpy reclaim

Avoiding - and fixing - memory fragmentation (November 28, 2006)

When writeback goes wrong (April 20, 2010)

Lustre

Should the Lustre preparation patches go in? (June 9, 2004)

Magic groups

Magic groups in 2.6 (May 11, 2004)

Magic links

Hardening magic links (June 14, 2023)

Managed Runtime Initiative

The Managed Runtime Initiative (June 16, 2010)

Maple trees

How to get rid of mmap_sem (May 8, 2019)

Introducing maple trees (February 12, 2021)

The ongoing search for mmap_lock scalability (May 6, 2022)

The next steps for the maple tree (May 27, 2024)

Media controller

The media controller subsystem (November 16, 2010)

membarrier()

sys_membarrier() (January 13, 2010)

Expediting membarrier() (July 26, 2017)

Memfd

Sealed files (April 9, 2014)

Keeping secrets in memfd areas (February 14, 2020)

Private memory for KVM guests (April 7, 2022)

Enabling non-executable memfds (December 19, 2022)

Memory barriers

Memory-mapped I/O barriers (September 10, 2006)

Concurrent code and expensive instructions (January 26, 2011)

Scalability techniques (October 29, 2013)

Memory barriers for TSO architectures (December 11, 2013)

Lockless patterns: relaxed access and partial memory barriers (February 26, 2021)

Protecting control dependencies with volatile_if() (June 18, 2021)

Memory management

Time to thrash the 2.6 VM? (March 3, 2004)

VM changes in 2.6.6 (April 14, 2004)

Faster page faulting through prezeroing (January 5, 2005)

Useful gadget: /proc/page_owner (February 1, 2005)

Flushing the page cache from user space (February 22, 2005)

Supporting RDMA on Linux (April 27, 2005)

Improving shared memory performance (August 31, 2005)

Tweaks to madvise() and posix_fadvise() (February 14, 2006)

Multi-protection VMAs (May 8, 2006)

A gnarly 2.6.19 file corruption bug (December 20, 2006)

Short topics in memory management (March 6, 2007)

ELC: How much memory are applications really using? (April 18, 2007)

Reworking vmap() (October 21, 2008)

Some ado about zero (July 7, 2009)

High-order GFP_ATOMIC allocation trouble (November 17, 2009)

Go's memory management, ulimit -v, and RSS control (February 15, 2011)

ARM, DMA, and memory management (April 27, 2011)

POSIX_FADV_VOLATILE (November 22, 2011)

DMA buffer sharing in 3.3 (January 11, 2012)

Volatile ranges with fallocate() (June 5, 2012)

Many more words on volatile ranges (November 5, 2012)

vmpressure_fd() (November 14, 2012)

In-kernel memory compression (April 3, 2013)

Avoiding game-score loss with per-process reclaim (April 3, 2013)

A survey of memory management patches (August 6, 2013)

Preparing for large-sector drives (January 29, 2014)

Optimizing VMA caching (March 5, 2014)

Memory accounting and limits (March 26, 2014)

Avoiding memory-allocation deadlocks (April 16, 2014)

User-space page fault handling (March 11, 2015)

Pagemap: security fixes vs. ABI compatibility (April 29, 2015)

Tracking actual memory utilization (April 29, 2015)

Partial address-space mirroring (April 27, 2016)

TLB flush optimization (April 27, 2016)

Performance-differentiated memory (April 27, 2016)

kvmalloc() (January 17, 2017)

Supporting shared TLB contexts (March 28, 2017)

The kernel's genpool subsystem (August 3, 2017)

MAP_FIXED_SAFE (December 13, 2017)

Read-only dynamic data (March 27, 2018)

Is it time to remove ZONE_DMA? (May 4, 2018)

New system calls for memory management (May 24, 2019)

process_madvise(), pidfd capabilities, and the revenge of the PIDs (January 21, 2020)

Not-so-anonymous virtual memory areas (September 3, 2021)

Replacing congestion_wait() (October 25, 2021)

Ways to reclaim unused page-table pages (May 9, 2022)

Seeking an acceptable unaccepted memory policy (April 6, 2023)

Memory-management changes for CXL (May 12, 2023)

User-space control of memory management (May 15, 2023)

Yet another memory allocator for executable code (June 8, 2023)

An ioctl() call to detect memory writes (August 10, 2023)

Address-space isolation

Exclusive page-frame ownership (September 14, 2016)

Containers and address space separation (May 1, 2019)

Generalizing address-space isolation (November 5, 2019)

Keeping memory contents secret (November 15, 2019)

Keeping secrets in memfd areas (February 14, 2020)

Two address-space-isolation patches get closer (October 27, 2020)

memfd_secret() in 5.14 (August 6, 2021)

Generalized address-space isolation (March 3, 2022)

Private memory for KVM guests (April 7, 2022)

A call to reconsider address-space isolation (September 29, 2022)

Guest-first memory for KVM (November 2, 2023)

Another try for address-space isolation (May 21, 2024)

BPF

A memory allocator for BPF code (February 4, 2022)

The BPF allocator runs into trouble (April 29, 2022)

A BPF-specific memory allocator (June 30, 2022)

Compound pages

An introduction to compound pages (November 11, 2014)

Minimizing the use of tail pages (May 4, 2019)

Reducing page structures for huge pages (December 11, 2020)

Conference sessions

Kernel Summit 2005: Virtual memory topics (July 19, 2005)

Kernel Summit 2005: Convergence of network and storage paths (July 20, 2005)

KS2007: Memory management (September 10, 2007)

Linux Filesystem, Storage, and Memory Management Summit, Day 1 (April 5, 2011)

Linux Filesystem, Storage, and Memory Management Summit, Day 2 (April 6, 2011)

KS2011: Memory management issues (October 24, 2011)

KS2012: The memcg/mm minisummit (September 17, 2012)

A discussion on virtual-memory topics (November 9, 2016)

Control groups

Controlling memory use in containers (July 31, 2007)

Integrating memory control groups (May 17, 2011)

Idle and stale page tracking (October 4, 2011)

Per-cgroup TCP buffer limits (December 6, 2011)

Two approaches to kernel memory usage accounting (March 7, 2012)

KS2012: memcg/mm: Improving kernel-memory accounting for memory cgroups (September 17, 2012)

KS2012: memcg/mm: Improving memory cgroups performance for non-users (September 17, 2012)

KS2012: memcg/mm: Hierarchical reclaim for memory cgroups (September 17, 2012)

KS2012: memcg/mm: Shared-memory accounting in memory cgroups (September 17, 2012)

The mempressure control group proposal (January 3, 2013)

Current issues with memory control groups (March 13, 2015)

Memory control group fairness (April 27, 2016)

Cleaning up after dying control groups (May 7, 2019)

Remote memory control-group charging (May 7, 2019)

Shrinking filesystem caches for dying control groups (May 29, 2019)

Cleaning up dying control groups, 2022 edition (May 19, 2022)

Fighting the zombie-memcg invasion (May 19, 2023)

The twilight of the version-1 memory controller (May 23, 2024)

DAMON

Memory-management optimization with DAMON (February 20, 2020)

Using DAMON for proactive reclaim (July 23, 2021)

LRU-list manipulation with DAMON (August 22, 2022)

A 2023 DAMON update (May 16, 2023)

An update and future plans for DAMON (May 17, 2024)

Development process

The state of memory-management development (May 10, 2022)

The state of the memory-management community in 2024 (May 28, 2024)

Direct map

The BPF allocator runs into trouble (April 29, 2022)

Solutions for direct-map fragmentation (May 12, 2022)

Reconsidering the direct-map fragmentation problem (May 11, 2023)

Documentation

Readahead: the documentation I wanted to read (April 8, 2022)

Improving memory-management documentation (May 10, 2022)

Memory-management documentation and development process (June 2, 2023)

During early boot

The NO_BOOTMEM patches (April 7, 2010)

Moving x86 to LMB (May 11, 2010)

A quick history of early-boot memory allocators (July 30, 2018)

Five-level page tables

Five-level page tables (March 15, 2017)

Folios

Clarifying memory management with page folios (March 18, 2021)

Kernel topics on the radar (August 2, 2021)

The folio pull-request pushback (September 10, 2021)

A discussion on folios (September 22, 2021)

The kernel radar: folios, multi-generational LRU, and Rust (January 20, 2022)

A memory-folio update (May 4, 2022)

The state of the page in 2023 (May 17, 2023)

Flexible-order anonymous folios (May 25, 2023)

Large folios for anonymous memory (July 6, 2023)

Prerequisites for large anonymous folios (September 8, 2023)

The state of the page in 2024 (May 15, 2024)

Four-level page tables

Four-level page tables (October 12, 2004)

Rethinking four-level page tables (December 22, 2004)

Four-level page tables merged (January 5, 2005)

get_user_pages()

The trouble with get_user_pages() (April 30, 2018)

get_user_pages() continued (May 4, 2018)

DMA and get_user_pages() (December 12, 2018)

Some slow progress on get_user_pages() (April 2, 2019)

Tracking pages from get_user_pages() (April 18, 2019)

get_user_pages(), pinned pages, and DAX (May 7, 2019)

Long-term get_user_pages() and truncate(): solved at last? (August 13, 2019)

Explicit pinning of user-space pages (December 13, 2019)

Preserving the mobility of ZONE_MOVABLE (January 22, 2021)

Patching until the COWs come home (part 1) (March 22, 2021)

Patching until the COWs come home (part 2) (March 25, 2021)

Page pinning and filesystems (May 10, 2022)

get_user_pages() and COW, 2022 edition (May 20, 2022)

The ongoing trouble with get_user_pages() (May 4, 2023)

GFP flags

Understanding __GFP_FS (April 30, 2014)

Some kernel memory-allocation improvements (September 23, 2015)

Ideas for rationalizing GFP flags (April 20, 2016)

Context information in memory-allocation requests (January 4, 2017)

Making sense of GFP_TEMPORARY (February 1, 2017)

Goodbye to GFP_TEMPORARY and dma_alloc_noncoherent() (August 28, 2017)

Some upcoming memory-management patches (November 12, 2021)

GFP flags and the end of __GFP_ATOMIC (January 27, 2023)

Reducing direct-map fragmentation with __GFP_UNMAPPED (March 20, 2023)

Removing GFP_NOFS (June 5, 2024)

Heterogeneous memory management

Heterogeneous memory management (March 13, 2015)

Heterogeneous memory management (April 27, 2016)

HMM and CDM (March 22, 2017)

Unaddressable device memory (March 22, 2017)

Heterogeneous memory management and MMU notifiers (April 27, 2018)

Heterogeneous memory management meets EXPORT_SYMBOL_GPL() (June 12, 2018)

The proper use of EXPORT_SYMBOL_GPL() (October 27, 2018)

Presenting heterogeneous memory to user space (May 8, 2019)

High memory

An end to high memory? (February 27, 2020)

Four short stories about preempt_count() (September 18, 2020)

Atomic kmaps become local (November 6, 2020)

Huge pages

Transparent hugepages (October 28, 2009)

Huge pages part 1 (Introduction) (February 16, 2010)

Huge pages part 2: Interfaces (February 24, 2010)

Huge pages part 3: Administration (March 3, 2010)

Huge pages part 4: benchmarking with huge pages (March 17, 2010)

Huge pages part 5: A deeper look at TLBs and costs (March 23, 2010)

Transparent huge pages in 2.6.38 (January 19, 2011)

Huge pages, slow drives, and long delays (November 14, 2011)

Adding a huge zero page (September 26, 2012)

Supporting variable-sized huge pages (January 23, 2013)

Huge page issues (March 26, 2014)

Transparent huge page reference counting (November 11, 2014)

Improving huge page handling (March 11, 2015)

Two transparent huge page cache implementations (April 20, 2016)

Transparent huge pages in the page cache (May 11, 2016)

Transparent huge pages, NUMA locality, and performance regressions (May 6, 2019)

Dueling memory-management performance regressions (June 14, 2019)

Triggering huge-page collapse from user space (March 14, 2022)

Fixing a race in hugetlbfs (May 20, 2022)

The transparent huge page shrinker (September 8, 2022)

High-granularity mappings for huge pages (May 17, 2023)

Formalizing policy zones for memory (March 5, 2024)

Toward the unification of hugetlbfs (May 22, 2024)

Allocator optimizations for transparent huge pages (May 24, 2024)

Two talks on multi-size transparent huge page performance (May 25, 2024)

Measuring memory fragmentation (May 28, 2024)

Memory-management: tiered memory, huge pages, and EROFS (August 15, 2024)

Internal API

remap_pfn_range() (September 29, 2004)

A proposal for a major memory management rework (March 1, 2005)

Cleaning up some page flags (August 17, 2005)

PG_reserved, VM_RESERVED, and VM_UNPAGED (November 22, 2005)

The evolution of driver page remapping (December 6, 2005)

nopage() and nopfn() (September 20, 2006)

Faulting out populate(), nopfn(), and nopage() (October 10, 2006)

The thorny case of kmalloc(0) (June 5, 2007)

Better per-CPU variables (November 12, 2007)

Getting the measure of ksize() (February 17, 2009)

Fixing kmap_atomic() (October 13, 2009)

When memory allocation failure is not an option (August 25, 2010)

The zsmalloc allocator (January 25, 2012)

An (unsigned) long story about page allocation (December 23, 2015)

Reworking page-table traversal (May 4, 2018)

Alignment guarantees for kmalloc() (May 8, 2019)

Implementing alignment guarantees for kmalloc() (October 18, 2019)

Kernel samepage merging

/dev/ksm: dynamic memory sharing (November 12, 2008)

KSM tries again (April 28, 2009)

Process-level kernel samepage merging control (April 13, 2023)

An overview of kernel samepage merging (KSM) (November 29, 2023)

Large allocations

Kswapd and high-order allocations (September 8, 2004)

Active memory defragmentation (October 5, 2004)

Yet another approach to memory fragmentation (February 1, 2005)

Fragmentation avoidance (November 2, 2005)

More on fragmentation avoidance (November 8, 2005)

VM followup: page migration and fragmentation avoidance (November 16, 2005)

Avoiding - and fixing - memory fragmentation (November 28, 2006)

Large pages, large blocks, and large problems (September 19, 2007)

Memory compaction (January 6, 2010)

Contiguous memory allocation for drivers (July 21, 2010)

The big chunk memory allocator (November 24, 2010)

A reworked contiguous memory allocator (June 14, 2011)

CMA and ARM (July 5, 2011)

The Android ION memory allocator (February 8, 2012)

A deep dive into CMA (March 14, 2012)

Integrating the ION memory allocator (September 4, 2013)

Memory compaction issues (March 26, 2014)

Fixing the contiguous memory allocator (March 11, 2015)

Making kernel pages movable (July 14, 2015)

CMA and compaction (April 23, 2016)

Proactive compaction (March 21, 2017)

Improving support for large, contiguous allocations (May 1, 2018)

Improving access to physically contiguous memory (May 8, 2019)

Proactive compaction for the kernel (April 21, 2020)

Designated movable (memory) blocks (April 21, 2023)

Memory descriptors

Pulling slabs out of struct page (October 8, 2021)

The proper time to split struct page (July 14, 2023)

Fleshing out memory descriptors (May 27, 2024)

Memory encryption

AMD memory encryption technologies (September 8, 2016)

Supporting Intel/AMD memory encryption (April 25, 2018)

A proposed API for full-memory encryption (January 18, 2019)

Memory encryption issues (May 1, 2019)

mmap_sem

LSFMM: Problems with mmap_sem (April 23, 2013)

Memory management locking (March 26, 2014)

Memory-management scalability (March 13, 2015)

Range reader/writer locks for the kernel (June 5, 2017)

The LRU lock and mmap_sem (April 30, 2018)

Zone-lock and mmap_sem scalability (May 3, 2018)

How to get rid of mmap_sem (May 8, 2019)

The ongoing search for mmap_lock scalability (May 6, 2022)

Concurrent page-fault handling with per-VMA locks (September 5, 2022)

Improving page-fault scalability (May 29, 2023)

Stabilizing per-VMA locking (July 13, 2023)

Faster page faults with RCU-protected VMA walks (May 22, 2024)

MMU notifiers

A last-minute MMU notifier change (September 5, 2017)

Heterogeneous memory management and MMU notifiers (April 27, 2018)

Nonvolatile memory

Preparing for nonvolatile RAM (May 23, 2012)

LFCS: Preparing Linux for nonvolatile memory devices (April 19, 2013)

Persistent memory (March 26, 2014)

Supporting filesystems in persistent memory (September 2, 2014)

Progress on persistent memory (March 11, 2015)

Improving page reclaim (March 17, 2015)

Huge pages and persistent memory (March 17, 2015)

Persistent memory support progress (April 15, 2015)

Persistent memory and page structures (May 13, 2015)

Persistent memory, with and without page structures (September 2, 2015)

Direct I/O and DMA for persistent memory (January 20, 2016)

Making use of persistent memory (February 10, 2016)

DAX and fsync: the cost of forgoing page structures (February 24, 2016)

The persistent memory "I know what I'm doing" flag (March 2, 2016)

Persistent-memory error handling (April 20, 2016)

Persistent memory as remote storage (April 20, 2016)

DAX, mmap(), and a "go faster" flag (April 26, 2016)

DAX on BTT (May 4, 2016)

ZONE_DEVICE and the future of struct page (March 21, 2017)

The future of DAX (March 27, 2017)

daxctl() — getting the other half of persistent-memory performance (June 26, 2017)

Two more approaches to persistent-memory writes (August 23, 2017)

Persistent memory for transient data (January 21, 2019)

The end of the DAX experiment (May 2, 2019)

NUMA nodes for persistent-memory management (May 6, 2019)

DAX semantics (May 13, 2019)

NUMA systems

Page migration (October 25, 2005)

The 2.6.16 straggler list (January 24, 2006)

Toward better NUMA scheduling (March 16, 2012)

AutoNUMA: the other approach to NUMA scheduling (March 27, 2012)

KS2012: memcg/mm: NUMA scheduling (September 17, 2012)

A potential NUMA scheduling solution (October 31, 2012)

NUMA in a hurry (November 14, 2012)

NUMA scheduling progress (October 1, 2013)

NUMA placement problems (March 26, 2014)

Rethinking NUMA (April 27, 2018)

NUMA policy and memory types (July 16, 2021)

Some upcoming memory-management patches (November 12, 2021)

NUMA rebalancing on tiered-memory systems (May 2, 2022)

Two performance-oriented patches: epoll and NUMA balancing (November 4, 2022)

Kernel-text replication on NUMA systems (January 5, 2024)

Object-based reverse mapping

Virtual Memory I: the problem (March 10, 2004)

Virtual Memory II: the return of objrmap (March 10, 2004)

Reverse mapping anonymous pages - again (March 24, 2004)

The status of object-based reverse mapping (May 19, 2004)

The merging of anon_vma and 4G/4G (May 26, 2004)

The case of the overly anonymous anon_vma (April 13, 2010)

Out-of-memory handling

Respite from the OOM killer (September 28, 2004)

Network block devices and OOM safety (March 30, 2005)

Defending against fork bombs (May 3, 2005)

Toward more robust network-based block I/O (August 8, 2005)

The return of network block device deadlock prevention (August 14, 2006)

Avoiding the OOM killer with mem_notify (January 30, 2008)

Taming the OOM killer (February 4, 2009)

Another OOM killer rewrite (June 7, 2010)

Delaying the OOM killer (March 9, 2011)

LSFMM: Improving the out-of-memory killer (April 23, 2013)

Toward reliable user-space OOM handling (June 5, 2013)

User-space out-of-memory handling (March 19, 2014)

User-space out-of-memory handling (March 26, 2014)

Toward more predictable and reliable out-of-memory handling (December 16, 2015)

Improving the OOM killer (April 27, 2016)

Three sessions on memory control groups (May 1, 2018)

Teaching the OOM killer about control groups (July 27, 2018)

Expedited memory reclaim from killed processes (April 12, 2019)

Android memory management (May 1, 2019)

Hastening process cleanup with process_mrelease() (July 26, 2021)

Better tools for out-of-memory debugging (May 11, 2022)

Per-file OOM badness (June 2, 2022)

Out-of-memory victim selection with BPF (August 17, 2023)

Page allocator

Speeding up the page allocator (February 25, 2009)

The "too small to fail" memory-allocation rule (December 23, 2014)

Memory management when failure is not an option (March 4, 2015)

Allowing small allocations to fail (March 11, 2015)

Reservations for must-succeed memory allocations (March 17, 2015)

Revisiting "too small to fail" (May 20, 2017)

Remote per-CPU page list draining (February 15, 2022)

Toward a real "too small to fail" rule (March 18, 2024)

Page cache

Large block size support (May 2, 2007)

Various page cache issues (March 26, 2014)

The future of the page cache (January 25, 2017)

Defending against page-cache attacks (January 17, 2019)

Fixing page-cache side channels, second attempt (February 5, 2019)

Buffered I/O without page-cache thrashing (December 12, 2019)

Sharing memory for shared file extents (May 24, 2022)

Page locking

Locking and pinning (June 4, 2014)

Deferred memory locking (July 8, 2015)

Page replacement algorithms

Simple resident set size limits (August 10, 2004)

A CLOCK-Pro page replacement implementation (August 16, 2005)

A framework for page replacement policies (March 25, 2006)

Toward improved page replacement (March 20, 2007)

Page replacement for huge memory systems (November 7, 2007)

The state of the pageout scalability patches (June 17, 2008)

Being nicer to executable pages (May 19, 2009)

Better active/inactive list balancing (May 2, 2012)

LSFMM: Coprocessors, exit times, and volatile ranges, and more (April 23, 2013)

LSFMM: Soft reclaim (April 23, 2013)

Proactively reclaiming idle memory (May 7, 2019)

Working-set protection for anonymous pages (March 19, 2020)

The multi-generational LRU (April 2, 2021)

Multi-generational LRU: the next generation (May 24, 2021)

The kernel radar: folios, multi-generational LRU, and Rust (January 20, 2022)

Merging the multi-generational LRU (May 12, 2022)

Memory-management short topics: page-table sharing and working sets (January 9, 2023)

Page aging with hardware counters (May 18, 2023)

Page-table sharing

Sharing page tables with mshare() (May 17, 2022)

Sharing page tables with msharefs (July 15, 2022)

Memory-management short topics: page-table sharing and working sets (January 9, 2023)

Merging msharefs (May 22, 2024)

Physical memory model

Memory: the flat, the discontiguous, and the sparse (May 27, 2019)

The path to deprecating SPARSEMEM (May 22, 2024)

Power management

Memory power management (June 7, 2011)

Memory power management, take 2 (February 8, 2012)

Memory power management, 2013 edition (April 17, 2013)

How much memory power management is useful? (October 2, 2013)

Readahead

Adaptive file readahead (October 12, 2005)

On-demand readahead (May 21, 2007)

Improving readahead (February 3, 2010)

Readahead: the documentation I wanted to read (April 8, 2022)

Scalability

Improving page fault scalability (December 7, 2004)

Another approach to page table scalability (October 26, 2005)

Toward better direct I/O scalability (March 31, 2008)

The lockless page cache (July 29, 2008)

Speculating on page faults (January 12, 2010)

Split PMD locks (September 25, 2013)

Memory-management scalability (March 13, 2015)

Bulk memory allocation without a new allocator (January 10, 2017)

Fast memory allocation for networking (March 22, 2017)

Another attempt at speculative page-fault handling (August 14, 2017)

Toward better performance on large-memory systems (May 2, 2018)

Improving fget() performance (May 6, 2019)

A pair of memory-allocation improvements in 5.13 (May 6, 2021)

Some upcoming memory-management patches (November 12, 2021)

Improving page-fault scalability (May 29, 2023)

Mitigating vmap lock contention (May 26, 2023)

The interaction between memory reclaim and RCU (May 22, 2024)

Shrinkers

KS2012: memcg/mm: Kernel-memory shrinking (September 17, 2012)

LSFMM: Shrinkers (April 23, 2013)

Smarter shrinkers (May 14, 2013)

Shrinking shrinker locking overhead (September 15, 2023)

Slab allocators

The SLUB allocator (April 11, 2007)

Some snags for SLUB (December 28, 2007)

SLQB - and then there were four (December 16, 2008)

The SLEB allocator (May 19, 2010)

Slab reduction (May 26, 2010)

Slab allocator of the week: SLUB+Queuing (June 29, 2010)

DISCONTIGMEM, !NUMA, and SLUB (April 20, 2011)

Toward a more efficient slab allocator (January 13, 2015)

Slab reclaim (March 22, 2017)

The slab and protected-memory allocators (May 1, 2018)

Making slab-allocated objects movable (April 8, 2019)

SLOB nears the end of the road (December 23, 2022)

A slab allocator (removal) update (May 22, 2023)

Randomness for kmalloc() (July 24, 2023)

Hardening the kernel against heap-spraying attacks (March 21, 2024)

What's next for the SLUB allocator (May 20, 2024)

Per-call-site slab caches for heap-spraying protection (August 20, 2024)

struct page

How many page flags do we really have? (June 3, 2009)

Cramming more into struct page (August 28, 2013)

Repurposing page->mapping (April 26, 2018)

Willy's memory-management to-do list (April 30, 2018)

Avoiding page reference-count overflows (April 16, 2019)

The search for available page flags (May 4, 2019)

Sidestepping kernel memory management with DMEMFS (December 7, 2020)

Reducing page structures for huge pages (December 11, 2020)

Struct slab comes to 5.17 (January 14, 2022)

Facing down mapcount madness (May 21, 2024)

Documenting page flags by committee (May 22, 2024)

Swapping

2.6 swapping behavior (May 5, 2004)

Swap prefetching (September 27, 2005)

Still waiting for swap prefetch (July 25, 2007)

Compcache: in-memory compressed swapping (May 26, 2009)

zcache: a compressed page cache (July 27, 2010)

Safely swapping over the net (April 19, 2011)

KS2012: memcg/mm: Moving zcache towards the mainline (September 17, 2012)

The zswap compressed swap cache (February 12, 2013)

LSFMM: Writeback latency issues (April 23, 2013)

LSFMM: Improving the swap subsystem (April 23, 2013)

Compressed swap (March 26, 2014)

Reconsidering swapping (June 7, 2016)

Making swapping scalable (October 26, 2016)

The next steps for swap (March 22, 2017)

The final step for huge-page swapping (July 2, 2018)

Toward a swap abstraction layer (May 22, 2023)

A new swap abstraction layer for the kernel (May 23, 2024)

Large folios, swap, and FS-Cache (July 24, 2024)

Tiered-memory systems

Top-tier memory management (May 28, 2021)

NUMA rebalancing on tiered-memory systems (May 2, 2022)

CXL 1: Management and tiering (May 13, 2022)

Proactive reclaim for tiered memory and more (May 13, 2022)

Two memory-tiering patch sets (June 27, 2022)

The future of memory tiering (May 12, 2023)

Moving physical pages from user space (September 18, 2023)

Weighted interleaving for memory tiering (October 25, 2023)

Weighted memory interleaving and new system calls (April 19, 2024)

Extending the mempolicy interface for heterogeneous systems (May 18, 2024)

Better support for locally-attached-memory tiering (May 20, 2024)

Memory-management: tiered memory, huge pages, and EROFS (August 15, 2024)

Token-based thrashing control

Token-based thrashing control (August 4, 2004)

Stopping unwanted OOM killer experiences (November 17, 2004)

User-space layout

Reorganizing the address space (June 30, 2004)

Address space randomization in 2.6 (February 2, 2005)

Tangled up in threads (August 19, 2008)

KAISER: hiding the kernel from user space (November 15, 2017)

The current state of kernel page-table isolation (December 20, 2017)

User-space memory locking

Capabilities in 2.6 (April 6, 2004)

Magic groups in 2.6 (May 11, 2004)

Recent patches of interest (August 4, 2004)

In search of an appropriate RLIMIT_MEMLOCK default (November 19, 2021)

Video memory

Memory management for graphics processors (November 6, 2007)

Large I/O memory in small address spaces (November 4, 2008)

Virtualization

Guest page hinting (September 6, 2006)

Memory management notifiers (January 23, 2008)

Transcendent memory (July 8, 2009)

Memory management for virtualization (April 7, 2010)

Cleancache and Frontswap (May 4, 2010)

Unmapped page cache control (December 13, 2010)

Transcendent memory in a nutshell (August 12, 2011)

User-space page fault handling (May 14, 2013)

Page faults in user space: MADV_USERFAULT, remap_anon_range(), and userfaultfd() (October 7, 2014)

Two address-space-isolation patches get closer (October 27, 2020)

Memory overcommit in containerized environments (May 15, 2023)

Memory passthrough for virtual machines (May 19, 2023)

Writeback

Flushing out pdflush (April 1, 2009)

In defense of per-BDI writeback (September 30, 2009)

When writeback goes wrong (April 20, 2010)

Fixing writeback from direct reclaim (July 20, 2010)

Dynamic writeback throttling (September 15, 2010)

No-I/O dirty throttling (August 31, 2011)

KS2012: memcg/mm: Dirty/writeback LRU (September 17, 2012)

The pernicious USB-stick stall problem (November 6, 2013)

Writeback and control groups (June 17, 2015)

Toward less-annoying background writeback (April 13, 2016)

Background writeback (May 4, 2016)

Writeout throttling

Predictive per-task write throttling (September 21, 2005)

Smarter write throttling (August 14, 2007)

Writeout throttling (December 11, 2007)

Memory model

A formal kernel memory-ordering model (part 1) (April 14, 2017)

A formal kernel memory-ordering model (part 2) (April 20, 2017)

A memory model for Rust code in the kernel (April 3, 2024)

Support for the TSO memory model on Arm CPUs (April 26, 2024)

Memory protection keys

Memory protection keys (May 13, 2015)

Memory protection keys v5 (December 9, 2015)

System calls for memory protection keys (June 2, 2016)

Memory protection keys pushback (July 27, 2016)

Memory protection keys for the kernel (July 21, 2020)

Stray-write protection for persistent memory (February 3, 2022)

Seeking an API for protection keys supervisor (May 11, 2022)

memremap()

ioremap() and memremap() (August 5, 2015)

Message passing

Fast interprocess messaging (September 15, 2010)

Fast interprocess communication revisited (November 9, 2011)

Speeding up D-Bus (February 29, 2012)

Missing the AF_BUS (July 3, 2012)

ALS: Linux interprocess communication and kdbus (May 30, 2013)

The unveiling of kdbus (January 13, 2014)

Kdbus meets linux-kernel (November 4, 2014)

Version 2 of the kdbus patch set (December 3, 2014)

Bus1: a new Linux interprocess communication proposal (August 17, 2016)

Messages

Getting the message from the kernel (June 19, 2007)

A kernel message catalog (August 4, 2008)

Organizing kernel messages (September 29, 2010)

KS2011: Structured error logging (October 24, 2011)

Toward more reliable logging (April 13, 2012)

Various tweaks to printk() (May 16, 2012)

printk() problems (June 26, 2012)

Extended system call error reporting (September 16, 2015)

printk() indexing (May 27, 2021)

mmiotrace

Tracing memory-mapped I/O operations (February 26, 2008)

mmiowb()

I/O space write barriers (September 22, 2004)

Memory-mapped I/O barriers (September 10, 2006)

Memory-mapped I/O without mysterious macros (February 26, 2019)

MOD_INC_USE_COUNT

Goodbye, old code (September 22, 2004)

module_param()

Module parameters in sysfs (May 18, 2004)

Modules

Module unloading in a reference counted world (January 27, 2004)

Building external modules (April 13, 2004)

Goodbye, old code (September 22, 2004)

MODULE_PARM deprecated (October 20, 2004)

Some patches of interest (February 28, 2006)

Tracking down a "runaway loop" (December 10, 2008)

Loading modules from file descriptors (October 10, 2012)

A crypto module loading vulnerability (January 28, 2015)

The end of modversions? (November 30, 2016)

Restricting automatic kernel-module loading (December 4, 2017)

Building header files into the kernel (March 21, 2019)

The intersection of modules, GKI, and rocket science (October 11, 2021)

Debugging

Debugging kernel modules (June 23, 2004)

Kernel markers and binary-only modules (March 24, 2008)

ELF modules

BPF comes to firewalls (February 19, 2018)

Designing ELF modules (March 13, 2018)

Bpfilter (and user-mode blobs) for 4.18 (May 30, 2018)

Rethinking bpfilter and user-mode helpers (June 12, 2020)

Exported symbols

The abrupt un-exporting of symbols (January 12, 2005)

Removing exported symbols in a stable kernel (March 1, 2005)

EXPORT_SYMBOL_GPL_FUTURE() (February 13, 2006)

Exported symbols and the internal API (September 11, 2007)

Tightening symbol exports (November 27, 2007)

Questioning EXPORT_SYMBOL_GPL() (June 23, 2014)

Improving EXPORT_SYMBOL() (February 3, 2016)

Kernel symbol namespacing (July 18, 2018)

Unexporting kallsyms_lookup_name() (February 28, 2020)

How to unbreak LTTng (April 20, 2020)

Controlling realtime priorities in kernel threads (April 23, 2020)

Netgpu and the hazards of proprietary kernel modules (July 31, 2020)

Exported-symbol changes in 5.13 (May 17, 2021)

A stable bug fix bites proprietary modules (June 21, 2021)

A disagreement over get_mm_exe_file() (October 18, 2021)

Making life (even) harder for proprietary modules (August 3, 2023)

A new version of modversions (August 26, 2024)

Licensing

invalidate_page_range() for non-GPL modules (February 18, 2004)

invalidate_mmap_range() again (February 25, 2004)

Being honest with MODULE_LICENSE (April 27, 2004)

Driver core functions: GPL only (September 29, 2004)

On the value of EXPORT_SYMBOL_GPL (October 5, 2005)

The trouble with MODULE_LICENSE() in non-modules (March 30, 2023)

Parameters in sysfs

Module parameters in sysfs (May 18, 2004)

Recent patches of interest (August 4, 2004)

Security modules

Stackable security modules (November 10, 2004)

Merging the realtime security module (January 11, 2005)

Complete coverage in Linux security modules (October 3, 2005)

Kernel Summit 2006: Security (July 19, 2006)

Smack for simplified access control (August 8, 2007)

The return of authoritative hooks (March 18, 2008)

TOMOYO Linux and pathname-based security (April 14, 2008)

LCA: The security panel (January 21, 2009)

The return of loadable security modules? (November 28, 2012)

Writing your own security module (February 10, 2016)

The LoadPin security module (April 6, 2016)

Safename: restricting "dangerous" file names (May 11, 2016)

Unprivileged BPF and authoritative security hooks (April 27, 2023)

Signed

Cryptographic signatures on kernel modules (July 7, 2004)

Kernel Summit: Security (July 21, 2004)

Loading signed kernel modules (December 7, 2011)

KS2012: Module signing (September 6, 2012)

The module signing endgame (November 21, 2012)

Tracing unsigned modules (March 5, 2014)

Toward signed BPF programs (April 22, 2021)

Multipath I/O

Kernel Summit: Multipath I/O (July 21, 2004)

Multipath support in the device mapper (February 23, 2005)

Some block layer patches (October 26, 2005)

__must_check

Return values, warnings, and error situations (October 17, 2006)

Named streams

More notes on reiser4 (September 1, 2004)

Namespaces

A system call for unsharing (May 10, 2005)

Sysfs and namespaces (August 26, 2008)

Divorcing namespaces from processes (March 3, 2010)

Namespace file descriptors (September 29, 2010)

Namespaces in operation, part 1: namespaces overview (January 4, 2013)

Namespaces in operation, part 2: the namespaces API (January 8, 2013)

Namespaces in operation, part 7: Network namespaces (January 22, 2014)

Control group namespaces (November 19, 2014)

Audit, namespaces, and containers (September 8, 2016)

Time namespaces (September 21, 2018)

A filesystem for namespaces (December 3, 2021)

Device namespaces

Device namespaces (August 28, 2013)

Mount namespaces

FUSE and private namespaces (April 27, 2005)

Shared subtrees (November 8, 2005)

Mount namespaces and shared subtrees (June 8, 2016)

Mount namespaces, mount propagation, and unbindable mounts (June 15, 2016)

PID namespaces

Namespaces in operation, part 3: PID namespaces (January 16, 2013)

Namespaces in operation, part 4: more on PID namespaces (January 23, 2013)

Syslog namespaces

Stepping closer to practical containers: "syslog" namespaces (December 5, 2012)

User namespaces

A new approach to user namespaces (April 10, 2012)

User namespaces progress (December 13, 2012)

Namespaces in operation, part 5: User namespaces (February 27, 2013)

Namespaces in operation, part 6: more on user namespaces (March 6, 2013)

Anatomy of a user namespaces vulnerability (March 20, 2013)

Mount point removal and renaming (October 16, 2013)

The trouble with dropping groups (November 19, 2014)

User namespaces and setgroups() (December 17, 2014)

Filesystem mounts in user namespaces (July 29, 2015)

Controlling access to user namespaces (January 27, 2016)

Filesystem mounts in user namespaces — one year later (August 17, 2016)

Namespaced file capabilities (June 30, 2017)

Unprivileged filesystem mounts, 2018 edition (May 30, 2018)

Filesystem UID mapping for user namespaces: yet another shiftfs (February 17, 2020)

ID mapping for mounted filesystems (November 19, 2020)

Resource limits in user namespaces (January 18, 2021)

Sticky groups in the shadows (May 14, 2021)

ID-mapped mounts (May 30, 2022)

A security-module hook for user-namespace creation (August 4, 2022)

A capability set for user namespaces (June 20, 2024)

UTS namespaces

Namespaces in operation, part 2: the namespaces API (January 8, 2013)

NAPI

Driver porting: Network drivers (April 28, 2003)

NAPI performance - a weighty matter (June 15, 2005)

Reworking NAPI (December 18, 2006)

Newer, newer NAPI (August 7, 2007)

Threadable NAPI polling, softirqs, and proper fixes (May 18, 2016)

NAPI polling in kernel threads (October 9, 2020)

NDISwrapper

4K stacks for everyone? (September 7, 2005)

4K stacks - again (November 15, 2005)

GPL-only symbols and ndiswrapper (October 25, 2006)

NDISwrapper dodges another bullet (March 5, 2008)

Negative groups

The trouble with dropping groups (November 19, 2014)

User namespaces and setgroups() (December 17, 2014)

Sticky groups in the shadows (May 14, 2021)

Netfilter

Goodbye, old code (September 22, 2004)

Proceedings of Netfilter Developer Workshop 2004 (September 26, 2004)

NETIF_F_LLTX

NETIF_F_LLTX (September 8, 2004)

NETIF_F_LLTX and race conditions (February 1, 2005)

Network

Virtual private networks

Progress on Zinc (thus WireGuard) (September 26, 2018)

Network filesystems

CRFS and POHMELFS (February 6, 2008)

New NFS to bring parallel storage to the masses (January 21, 2009)

LSFMM: NFS status (May 1, 2013)

The netfslib helper library (May 16, 2022)

Snapshots, inodes, and filesystem identifiers (May 18, 2022)

Unique identifiers for NFS (May 18, 2022)

Caching layer

A general caching filesystem (September 1, 2004)

Justifying FS-Cache (December 24, 2008)

Networking

The end of init_etherdev() and friends (March 2, 2004)

Netpoll is merged (March 16, 2004)

TCP vulnerability: cancel red alert (April 21, 2004)

On the alignment of IP packets (June 15, 2004)

Configuration of pluggable network adaptors (September 22, 2004)

alloc_skb_from_cache() (January 4, 2005)

Network block devices and OOM safety (March 30, 2005)

Toward more robust network-based block I/O (August 8, 2005)

Linux and TCP offload engines (August 22, 2005)

On the safety of Linux random numbers (May 9, 2006)

OLS: A proposal for a new networking API (July 22, 2006)

The return of network block device deadlock prevention (August 14, 2006)

Network namespaces (January 30, 2007)

Large receive offload (August 1, 2007)

Network transmit batching (August 22, 2007)

Multiqueue networking (July 8, 2008)

Char devices for network interfaces (October 14, 2009)

JLS2009: Generic receive offload (October 27, 2009)

Receive packet steering (November 17, 2009)

Receive flow steering (April 7, 2010)

ICMP sockets (December 22, 2010)

SKB fragment lifetime tracking (July 25, 2011)

Network transmit queue limits (August 9, 2011)

TCP connection hijacking and parasites - as a good thing (August 9, 2011)

Routing Open vSwitch into the mainline (November 30, 2011)

TCP connection repair (May 1, 2012)

TCP Fast Open: expediting web services (August 1, 2012)

TCP friends (August 15, 2012)

Low-latency Ethernet device polling (May 21, 2013)

Ethernet polling and patch-pulling latency (July 10, 2013)

TSO sizing and the FQ scheduler (August 28, 2013)

Networking on tiny machines (May 7, 2014)

Foo over UDP (October 1, 2014)

Kernel support for SYN packet fingerprinting (May 20, 2015)

The kernel connection multiplexer (September 21, 2015)

SOCK_DESTROY: an old Android patch aims upstream (December 2, 2015)

A BoF on kernel network performance (February 24, 2016)

Transport-level protocols in user space (June 20, 2016)

The NET policy mechanism (August 10, 2016)

The rise of Linux-based networking hardware (April 19, 2017)

Time-based packet transmission (March 8, 2018)

Let them run CAKE (June 27, 2018)

Writing network flow dissectors in BPF (September 6, 2018)

End-to-end network programmability (August 10, 2020)

Better visibility into packet-dropping decisions (February 25, 2022)

P4TC hits a brick wall (June 10, 2024)

Direct-to-device networking (June 27, 2024)

Bufferbloat

LPC: An update on bufferbloat (September 13, 2011)

The CoDel queue management algorithm (May 9, 2012)

TCP small queues (July 17, 2012)

A damp discussion of network queuing (October 15, 2014)

Channels

Van Jacobson's network channels (January 31, 2006)

Implementing network channels (May 1, 2006)

Reconsidering network channels (July 25, 2006)

The Grand Unified Flow Cache (August 7, 2006)

Patch summary: regulatory domains, network channels, and virtualization (October 25, 2006)

The return of network channels (December 4, 2007)

Congestion control

Pluggable congestion avoidance modules (March 22, 2005)

The CHOKe packet scheduler (January 11, 2011)

Increasing the TCP initial congestion window (February 9, 2011)

LPC: Making the net go faster (September 13, 2011)

Delay-gradient congestion control (May 20, 2015)

BBR congestion control (September 21, 2016)

The congestion-notification conflict (March 22, 2019)

D-Bus

Fast interprocess messaging (September 15, 2010)

Speeding up D-Bus (February 29, 2012)

Missing the AF_BUS (July 3, 2012)

eXpress Data Path (XDP)

Early packet drop — and more — with BPF (April 6, 2016)

Debating the value of XDP (December 6, 2016)

Accelerating networking with AF_XDP (April 9, 2018)

Lua in the kernel? (September 9, 2020)

hard_start_xmit() locking

NETIF_F_LLTX (September 8, 2004)

NETIF_F_LLTX and race conditions (February 1, 2005)

IPv6

LCA: IP address exhaustion and the end of the open net (January 26, 2011)

IPv6 NAT (July 20, 2011)

Identifier locator addressing (September 10, 2015)

IPv6 segment routing (May 17, 2017)

The trouble with IPv6 extension headers (January 7, 2020)

Going big with TCP packets (February 14, 2022)

NAPI

NAPI performance - a weighty matter (June 15, 2005)

Reworking NAPI (December 18, 2006)

Newer, newer NAPI (August 7, 2007)

NAPI polling in kernel threads (October 9, 2020)

Netlink

Extending netlink (April 12, 2005)

Networking summits

Kernel Summit: Network summit summary (July 21, 2004)

Kernel Summit 2005: Report from the networking summit (July 19, 2005)

KS2010: Minisummit reports (November 3, 2010)

A report from the networking miniconference (August 27, 2014)

Netconf discussions, part 1 (February 10, 2016)

Nonlinear packets v. large allocations

Kswapd and high-order allocations (September 8, 2004)

Packet filtering

Nftables: a new packet filtering engine (March 24, 2009)

A JIT for packet filters (April 12, 2011)

Xtables2 vs. nftables (January 9, 2013)

The return of nftables (August 20, 2013)

Network filtering for control groups (August 24, 2016)

BPF comes to firewalls (February 19, 2018)

Bpfilter (and user-mode blobs) for 4.18 (May 30, 2018)

Accelerating netfilter with hardware offload, part 1 (January 14, 2020)

Accelerating netfilter with hardware offload, part 2 (January 31, 2020)

Rethinking bpfilter and user-mode helpers (June 12, 2020)

Nftables reaches 1.0 (August 27, 2021)

Performance

Bulk network packet transmission (October 8, 2014)

Improving Linux networking performance (January 13, 2015)

Measuring packet classifier performance (February 10, 2016)

Bulk memory-allocation APIs (April 23, 2016)

Zero-copy networking (July 3, 2017)

Zero-copy TCP receive (April 19, 2018)

A reworked TCP zero-copy receive API (May 18, 2018)

Batch processing of network packets (August 21, 2018)

Memory management for 400Gb/s interfaces (May 8, 2019)

Zero-copy network transmission with io_uring (December 30, 2021)

The BPF-programmable network device (November 6, 2023)

Protocols

Linux gets DCCP (August 30, 2005)

PF_CAN (October 8, 2007)

How not to get a protocol implementation merged (January 12, 2011)

Mesh networking with batman-adv (February 8, 2011)

Multipath TCP: an overview (March 26, 2013)

TLS in the kernel (December 2, 2015)

Checksum offloads and protocol ossification (December 8, 2015)

The trouble with SMC-R (May 18, 2017)

QUIC as a solution to protocol ossification (January 29, 2018)

Upstreaming multipath TCP (September 26, 2019)

Extending in-kernel TLS support (April 25, 2022)

Adding an in-kernel TLS handshake (June 1, 2022)

Security

A proposal for "silent" port knocking (December 18, 2013)

The TCP SACK panic (June 19, 2019)

Fingerprinting systems with TCP source-port selection (October 6, 2022)

SO_REUSEPORT

The SO_REUSEPORT socket option (March 13, 2013)

Avoiding unintended connection failures with SO_REUSEPORT (April 23, 2021)

Virtual private networks

Virtual private networks with WireGuard (March 6, 2018)

WireGuarding the mainline (August 6, 2018)

Whither WireGuard? (March 25, 2019)

WireGuard and the crypto API (October 16, 2019)

Window scaling

TCP window scaling and broken routers (July 7, 2004)

Wireless

Toward a generic wireless access point stack (June 9, 2004)

Reworking the wireless extensions (June 23, 2004)

bcm43xx and the 802.11 stack (December 6, 2005)

Linux and wireless networking (January 11, 2006)

The 2006 Wireless Networking Summit (April 10, 2006)

Kernel Summit 2006: Mini-summit summaries (July 18, 2006)

The final wireless extension? (October 4, 2006)

Patch summary: regulatory domains, network channels, and virtualization (October 25, 2006)

Toward a free Atheros driver (November 15, 2006)

Wireless regulatory compliance (June 6, 2007)

Regulating wireless devices (August 19, 2008)

Broadcom firmware and regulatory compliance (September 22, 2010)

Radar detection with Linux (December 21, 2010)

Airplane mode and rfkill (March 2, 2016)

Making WiFi fast (November 8, 2016)

TCP small queues and WiFi aggregation — a war story (June 18, 2018)

Nftables

Nftables: a new packet filtering engine (March 24, 2009)

KS2010: Minisummit reports (November 3, 2010)

A JIT for packet filters (April 12, 2011)

Xtables2 vs. nftables (January 9, 2013)

The return of nftables (August 20, 2013)

Nftables reaches 1.0 (August 27, 2021)

NILFS

btrfs and NILFS (June 19, 2007)

__nocast

The __nocast attribute (March 29, 2005)

Nolibc

Nolibc: a minimal C-library replacement shipped with the kernel (January 20, 2023)

Non-seekable objects

Safe seeks (August 10, 2004)

nopage()

Two API changes in 2.6 (January 6, 2004)

Faulting out populate(), nopfn(), and nopage() (October 10, 2006)

nopfn()

nopage() and nopfn() (September 20, 2006)

Faulting out populate(), nopfn(), and nopage() (October 10, 2006)

Notifiers

Making notifiers safe (November 21, 2005)

Notifiers, 2.6.17 style (May 29, 2006)

Task watchers (November 7, 2006)

Rationalizing CPU hotplugging (February 12, 2013)

Nouveau

LCA: The state of the Nouveau project (January 17, 2007)

KS2007: Hardware support and the i386/x86_64 merger (September 6, 2007)

KS2009: Staging, linux-next, and the development process (October 21, 2009)

The abrupt merging of Nouveau (December 15, 2009)

LCA: Graphics driver ponies (January 26, 2010)

NULL and zero

NULL v. zero (July 14, 2004)

NUMA

Scheduling domains (April 19, 2004)

Page migration (October 25, 2005)

VM followup: page migration and fragmentation avoidance (November 16, 2005)

The 2.6.16 straggler list (January 24, 2006)

Toward better NUMA scheduling (March 16, 2012)

AutoNUMA: the other approach to NUMA scheduling (March 27, 2012)

A potential NUMA scheduling solution (October 31, 2012)

NUMA in a hurry (November 14, 2012)

NUMA scheduling progress (October 1, 2013)

NUMA placement problems (March 26, 2014)

Rethinking NUMA (April 27, 2018)

NUMA-aware qspinlocks (April 12, 2021)

NUMA policy and memory types (July 16, 2021)

Two performance-oriented patches: epoll and NUMA balancing (November 4, 2022)

Kernel-text replication on NUMA systems (January 5, 2024)

NVMe

Peer-to-peer DMA (May 16, 2023)

Computational storage (May 17, 2023)

NX support

x86 NX support (June 2, 2004)

O_BENEATH

open() flags: O_TMPFILE and O_BENEATH (November 5, 2014)

Object-based reverse mapping

Virtual Memory II: the return of objrmap (March 10, 2004)

Reverse mapping anonymous pages - again (March 24, 2004)

VM changes in 2.6.6 (April 14, 2004)

The status of object-based reverse mapping (May 19, 2004)

The merging of anon_vma and 4G/4G (May 26, 2004)

Object storage devices

Linux and object storage devices (November 4, 2008)

OCFS2

The OCFS2 filesystem (May 24, 2005)

O_NOMTIME

Trading off safety and performance in the kernel (May 12, 2015)

OOM killer

Respite from the OOM killer (September 28, 2004)

Stopping unwanted OOM killer experiences (November 17, 2004)

Defending against fork bombs (May 3, 2005)

Kernel Summit 2005: Virtual memory topics (July 19, 2005)

Avoiding the OOM killer with mem_notify (January 30, 2008)

Taming the OOM killer (February 4, 2009)

Another OOM killer rewrite (June 7, 2010)

Delaying the OOM killer (March 9, 2011)

Fighting fork bombs (March 29, 2011)

LSFMM: Improving the out-of-memory killer (April 23, 2013)

Toward reliable user-space OOM handling (June 5, 2013)

A survey of memory management patches (August 6, 2013)

User-space out-of-memory handling (March 19, 2014)

User-space out-of-memory handling (March 26, 2014)

Toward more predictable and reliable out-of-memory handling (December 16, 2015)

Improving the OOM killer (April 27, 2016)

Expedited memory reclaim from killed processes (April 12, 2019)

Open vSwitch

Routing Open vSwitch into the mainline (November 30, 2011)

Optimization tools

Shrinking the kernel with gcc (January 21, 2004)

Link-time optimization for the kernel (August 21, 2012)

Shrinking the kernel with link-time garbage collection (December 15, 2017)

Shrinking the kernel with link-time optimization (January 18, 2018)

Profile-guided optimization for the kernel (September 3, 2020)

OSDL

Kernel Summit: OSDL relations (July 21, 2004)

O_SYNC

O_*SYNC (September 1, 2009)

O_TMPFILE

Unreviewed code in 3.11 (August 7, 2013)

On saying "no" (October 29, 2013)

open() flags: O_TMPFILE and O_BENEATH (November 5, 2014)

Making O_TMPFILE atomic (and statx() additions) (May 25, 2022)

Overlayfs

Another union filesystem approach (September 1, 2010)

Debating overlayfs (June 15, 2011)

Overlayfs for 3.10 (March 13, 2013)

Overlayfs issues and experiences (March 17, 2015)

Overlayfs features (March 29, 2017)

Overlayfs snapshots (April 12, 2017)

Packet filtering

Attaching eBPF programs to sockets (December 10, 2014)

Accelerating netfilter with hardware offload, part 1 (January 14, 2020)

Accelerating netfilter with hardware offload, part 2 (January 31, 2020)

Lua in the kernel? (September 9, 2020)

padata

The padata parallel execution mechanism (April 6, 2010)

PandaBoard

Dynamic devices and static configuration (March 29, 2011)

Parallel ATA

Parallel IDE drivers (September 5, 2006)

Parallel execution

The padata parallel execution mechanism (April 6, 2010)

ktask: optimizing CPU-intensive kernel work (November 9, 2018)

paravirt_ops

Kernel Summit 2006: Paravirtualization and containers (July 19, 2006)

Connecting Linux to hypervisors (August 8, 2006)

Some KVM developments (January 9, 2007)

paravirt_ops considered harmful? (March 14, 2007)

Partial array self refresh (PASR)

Memory power management (June 7, 2011)

Memory power management, take 2 (February 8, 2012)

Partitions

Partitioned loopback devices (November 10, 2004)

Block layer: integrity checking and lots of partitions (July 15, 2008)

Patchwork

KS2008: Development tools (September 16, 2008)

Snowpatch: continuous-integration testing for the kernel (January 26, 2019)

PC9800 architecture

Goodbye to old code (May 19, 2004)

PCI

Safe PCI hot removal (June 9, 2004)

Some 2.6.11 API changes (January 25, 2005)

PCI error recovery (July 12, 2005)

Some 2.6.13 API changes (July 12, 2005)

Kernel Summit 2005: I/O Busses (July 19, 2005)

Device-to-device memory-transfer offload with P2PDMA (October 2, 2018)

Controlling device peer-to-peer access from user space (March 7, 2019)

PCIe

UKUUG: Arnd Bergmann on interconnecting with PCIe (November 19, 2008)

The modernization of PCIe hotplug in Linux (October 8, 2018)

PCMCIA

A PCMCIA subsystem change (August 3, 2005)

Per-CPU variables

The search for fast, scalable counters (February 1, 2006)

Better per-CPU variables (November 12, 2007)

Per-CPU variables and the realtime tree (July 26, 2011)

Performance monitoring

Dueling performance monitors (December 9, 2008)

Followups: performance counters, ksplice, and fsnotify (December 17, 2008)

Perfcounters added to the mainline (July 1, 2009)

Fun with tracepoints (August 12, 2009)

KS2009: The future of perf events (October 19, 2009)

Scripting support for perf (February 10, 2010)

A "live mode" for perf (April 7, 2010)

Using the perf code to create a RAS daemon (February 2, 2011)

Raw events and the perf ABI (May 3, 2011)

Ftrace, perf, and the tracing ABI (May 11, 2011)

Virtualization and the perf ABI (December 19, 2012)

A perf ABI fix (September 24, 2013)

Lots of new perf features (April 9, 2014)

Fuzzing perf_events (August 5, 2015)

Disallowing perf_event_open() (August 3, 2016)

Tracking pressure-stall information (July 13, 2018)

Pressure stall monitors (January 4, 2019)

Performance regressions

KS2010: Performance regressions (November 2, 2010)

Testing for kernel performance regressions (August 3, 2012)

RCU, cond_resched(), and performance regressions (June 24, 2014)

Kernel performance regressions (August 20, 2014)

Benchmarking and performance trends (November 4, 2015)

Repealing the poll() tax (June 27, 2018)

Dueling memory-management performance regressions (June 14, 2019)

Philips driver

The return of the Philips driver? (September 1, 2004)

The Philips webcam driver returns (September 15, 2004)

The Philips webcam driver - again (May 4, 2005)

pidfd

Toward race-free process signaling (December 6, 2018)

Rethinking race-free process signaling (April 4, 2019)

New system calls: pidfd_open() and close_range() (May 23, 2019)

Completing the pidfd API (July 26, 2019)

Adding the pidfd abstraction to the kernel (October 7, 2019)

process_madvise(), pidfd capabilities, and the revenge of the PIDs (January 21, 2020)

A new filesystem for pidfds (March 13, 2024)

One more pidfdfs surprise (May 31, 2024)

Pin controller

The pin control subsystem (November 22, 2011)

Pipes

Circular pipes (January 11, 2005)

The evolution of pipe buffers (January 18, 2005)

tee() with your splice()? (April 11, 2006)

Plan 9

A filesystem from Plan 9 space (May 25, 2005)

Platform data

Dynamic devices and static configuration (March 29, 2011)

The platform device API (June 21, 2011)

Platform devices and device trees (June 21, 2011)

pmdisk

Which is the real software suspend? (March 16, 2004)

Software suspend: and then there were two (July 21, 2004)

poll()

Driver API: sleeping poll(), exclusive I/O memory, and DMA API debugging (November 24, 2008)

What are they polling for? (July 7, 2011)

A new kernel polling interface (January 9, 2018)

Repealing the poll() tax (June 27, 2018)

Popcorn Linux

Popcorn Linux pops up on linux-kernel (May 5, 2020)

populate()

Faulting out populate(), nopfn(), and nopage() (October 10, 2006)

posix_fadvise()

Tweaks to madvise() and posix_fadvise() (February 14, 2006)

Two new system calls: splice() and sync_file_range() (April 3, 2006)

POSIX_FADV_VOLATILE (November 22, 2011)

Power management

Laptop mode for 2.6 (January 7, 2004)

Power management: looking for a direction (August 18, 2004)

ACPI, device interrupts, and suspend states (August 3, 2005)

Some power management changes for 2.6.15 (November 1, 2005)

Driver core API changes for 2.6.19 (September 26, 2006)

OLS: Three talks on power management (June 30, 2007)

Tripping over trip points (August 7, 2007)

A new suspend/hibernate infrastructure (March 19, 2008)

Making power policy just work (June 30, 2008)

Runtime power management (August 19, 2009)

Redesigning asynchronous suspend/resume (December 16, 2009)

Fixing the ondemand governor (April 20, 2010)

Reworking pm_qos (May 4, 2010)

Detecting idle patterns (May 11, 2010)

What comes after suspend blockers (June 1, 2010)

Idling ACPI idle (June 1, 2010)

A single power preference knob (June 23, 2010)

LCA: Server power management (January 26, 2011)

Powering down APM (March 30, 2011)

ELC: Linaro power management work (April 20, 2011)

Memory power management (June 7, 2011)

PCIe, power management, and problematic BIOSes (June 29, 2011)

Dealing with complexity: power domains and asymmetric multiprocessing (June 29, 2011)

Memory power management, take 2 (February 8, 2012)

Linux power management: The documentation I wanted to read (July 10, 2012)

Memory power management, 2013 edition (April 17, 2013)

How much memory power management is useful? (October 2, 2013)

Supporting connected standby (January 15, 2014)

Toward better CPU idle-time predictions (October 29, 2014)

The difficult task of doing nothing (June 9, 2015)

Power-management knobs (November 2, 2015)

Next-interrupt prediction (January 27, 2016)

Tracking functional dependencies between devices (January 3, 2017)

The first Operating-System-Directed Power-Management Summit (May 3, 2017)

Active state management of power domains (January 15, 2018)

Notes from the 2nd Operating-System-Directed Power-Management Summit (May 25, 2018)

cpuidle

The cpuidle subsystem (April 26, 2010)

Improving idle behavior in tickless systems (December 28, 2018)

The weighted TEO cpuidle governor (May 14, 2020)

The pseudo cpuidle driver (May 21, 2020)

The deadline scheduler and CPU idle states (May 22, 2020)

CPU scheduling

Rethinking power-aware scheduling (January 10, 2012)

The return of power-aware scheduling (August 21, 2012)

Small-task packing (October 24, 2012)

Toward a more power-efficient scheduler (April 10, 2013)

Power-aware scheduling meets a line in the sand (June 5, 2013)

A power-aware scheduling update (June 19, 2013)

A new direction for power-aware scheduling (October 15, 2013)

The power-aware scheduling mini-summit (October 23, 2013)

Another attempt at power-aware scheduling (June 4, 2014)

Teaching the scheduler about power management (June 18, 2014)

The power-aware scheduling miniconference (August 27, 2014)

Steps toward power-aware scheduling (August 25, 2015)

Energy-aware scheduling on asymmetric systems (March 22, 2018)

Evaluating vendor changes to the scheduler (May 19, 2020)

Removing the scheduler's energy-margin heuristic (July 1, 2022)

Device power management

Better device power management for 3.2 (November 8, 2011)

Controlling device power management (February 12, 2014)

Device power management with the OPP library (April 26, 2017)

Frequency scaling

Improvements in CPU frequency management (April 6, 2016)

CPU frequency governors and remote callbacks (September 4, 2017)

Frequency-invariant utilization tracking for x86 (April 2, 2020)

Saving frequency scaling in the data center (May 21, 2020)

Opportunistic suspend

From wakelocks to a real solution (February 18, 2009)

Suspend block (April 28, 2010)

Blocking suspend blockers (May 18, 2010)

Suspend blocker suspense (May 26, 2010)

What comes after suspend blockers (June 1, 2010)

Another wakeup event mechanism (June 23, 2010)

Whack-a-droid (August 3, 2010)

An alternative to suspend blockers (November 24, 2010)

A new approach to opportunistic suspend (September 27, 2011)

Yet another opportunity for opportunistic suspend (October 18, 2011)

Autosleep and wake locks (February 7, 2012)

preadv()

Some new system calls (December 20, 2005)

Preemption

Addressing latency problems in 2.6 (July 14, 2004)

Approaches to realtime Linux (October 12, 2004)

Realtime preemption, part 2 (October 20, 2004)

Realtime preemption and read-copy-update (March 30, 2005)

The beginning of the realtime preemption debate (June 1, 2005)

Interview: the return of the realtime preemption tree (February 16, 2009)

Optimizing preemption (August 14, 2013)

Four short stories about preempt_count() (September 18, 2020)

Revisiting the kernel's preemption models (part 1) (September 21, 2023)

Revisiting the kernel's preemption model, part 2 (October 2, 2023)

Prefetch

Prefetching considered harmful (September 8, 2010)

The problem with prefetch (May 24, 2011)

Prefetching

Predictive ELF bitmaps (March 26, 2008)

fincore() (January 27, 2010)

printk()

Enhanced printk() merged (July 9, 2008)

The perils of pr_info() (March 21, 2012)

Stepping closer to practical containers: "syslog" namespaces (December 5, 2012)

The perils of printk() (November 9, 2016)

printk() and KERN_CONT (August 30, 2017)

Improving printk() (November 1, 2017)

Reimplementing printk() (February 26, 2019)

Why printk() is so complicated (and how to fix it) (October 3, 2019)

Dumping kernel data structures with BPF (April 27, 2020)

printk() indexing (May 27, 2021)

Printbuf rebuffed for now (April 28, 2022)

A discussion on printk() (October 4, 2022)

printk_ratelimit()

Keeping printk() under control (January 13, 2004)

Priority inheritance

Priority inheritance in the kernel (April 3, 2006)

/proc

Enforcing mount options for sysfs and proc (June 10, 2015)

task_diag and statx() (May 4, 2016)

Hiding a process's executable from itself (January 23, 2023)

Inode locking

A VFS deadlock post-mortem (April 3, 2013)

/proc/buddyinfo

Kswapd and high-order allocations (September 8, 2004)

Processor Trace

Adding Processor Trace support to Linux (July 1, 2015)

/proc/latency

Update from the latency front (August 18, 2004)

/proc/page_owner

Useful gadget: /proc/page_owner (February 1, 2005)

Profiling

Profiling kernel code coverage (June 4, 2008)

Pstore

Persistent storage for a kernel's "dying breath" (March 23, 2011)

ptrace()

Introducing utrace (March 7, 2007)

Another mainline push for utrace (December 2, 2009)

Replacing ptrace() (January 27, 2010)

Improving ptrace() (March 8, 2011)

TCP connection hijacking and parasites - as a good thing (August 9, 2011)

QEMU

KVM, QEMU, and kernel project management (March 23, 2010)

The native KVM tool (April 12, 2011)

Speeding up kernel development with QEMU (October 14, 2015)

Race conditions

sleep_on() in 2.6. (January 27, 2004)

Module unloading in a reference counted world (January 27, 2004)

Safe sysfs support (February 11, 2004)

RCU-safe reference counting (July 14, 2004)

NETIF_F_LLTX and race conditions (February 1, 2005)

FUTEX + rwsem = SNAFU (February 23, 2005)

Making notifiers safe (November 21, 2005)

Memory-mapped I/O barriers (September 10, 2006)

Various topics, all related to interrupts (October 24, 2007)

A surprise with mutexes and reference counts (December 4, 2013)

The problem with nested sleeping primitives (January 7, 2015)

Radix tree

Trees I: Radix trees (March 13, 2006)

The multi-order radix tree (April 27, 2016)

A multi-order radix tree (May 24, 2016)

The XArray data structure (January 24, 2018)

RAID

MD / DM (January 25, 2006)

Ext3 and RAID: silent data killers? (August 31, 2009)

Journal-guided RAID resync (November 24, 2009)

DM and MD come a little closer (April 20, 2010)

The MD roadmap (February 16, 2011)

Another kernel RAID5 implementation (October 18, 2011)

A tale of two data-corruption bugs (May 24, 2015)

A journal for MD/RAID5 (November 24, 2015)

Cluster support for MD/RAID 1 (February 3, 2016)

Ramback

How to use a terabyte of RAM (March 12, 2008)

Random numbers

On the safety of Linux random numbers (May 9, 2006)

On entropy and randomness (December 12, 2007)

Appropriate sources of entropy (May 21, 2008)

Linux ASLR vulnerabilities (April 29, 2009)

Random numbers for embedded devices (July 17, 2012)

LCE: Don't play dice with random numbers (November 20, 2012)

The search for truly random numbers in the kernel (September 18, 2013)

Adding CPU randomness to the entropy pool (February 19, 2014)

Unmixing the pool (March 12, 2014)

A system call for random numbers: getrandom() (July 23, 2014)

Random numbers from CPU execution time jitter (April 29, 2015)

Random number scalability (September 28, 2015)

Other approaches to random number scalability (October 21, 2015)

Replacing /dev/urandom (May 4, 2016)

Waiting for entropy (June 6, 2017)

Initializing the entropy pool using RDRAND and friends (July 24, 2018)

Fixing getrandom() (September 27, 2019)

Really fixing getrandom() (October 17, 2019)

Removing the Linux /dev/random blocking pool (January 7, 2020)

Theoretical vs. practical cryptography in the kernel (August 13, 2020)

FIPS-compliant random numbers for the kernel (December 7, 2021)

Uniting the Linux random-number devices (February 16, 2022)

Random numbers and virtual-machine forks (March 11, 2022)

A vDSO implementation of getrandom() (January 6, 2023)

Security topics: io_uring, VM attestation, and random-reseed notifications (September 4, 2023)

Pitchforks for RDSEED (February 8, 2024)

A RDRAND followup (February 26, 2024)

Another try for getrandom() in the vDSO (July 4, 2024)

What became of getrandom() in the vDSO (July 25, 2024)

Range locks

Range reader/writer locks for the kernel (June 5, 2017)

RapidIO

RapidIO support for Linux (June 8, 2005)

RAS tools

Kernel Summit: RAS tools (July 21, 2004)

Kernel Summit 2005: RAS tools (July 20, 2005)

RDMA

Supporting RDMA on Linux (April 27, 2005)

Persistent memory as remote storage (April 20, 2016)

Readahead

Adaptive file readahead (October 12, 2005)

On-demand readahead (May 21, 2007)

Improving readahead (February 3, 2010)

Readahead: the documentation I wanted to read (April 8, 2022)

A discussion on readahead (June 15, 2022)

Read-copy-update

Read-copy-update and interrupt latency (January 10, 2004)

RCU-safe reference counting (July 14, 2004)

Realtime preemption, part 2 (October 20, 2004)

Realtime preemption and read-copy-update (March 30, 2005)

API change: synchronize_kernel() deprecated (May 3, 2005)

What's holding up 2.6.14: two difficult bugs (October 18, 2005)

Making notifiers safe (November 21, 2005)

EXPORT_SYMBOL_GPL_FUTURE() (February 13, 2006)

RCU and open file accounting (March 7, 2006)

Read-copy-update for realtime (September 26, 2006)

Sleepable RCU (October 9, 2006)

RCU and Unloadable Modules (January 14, 2007)

Priority-Boosting RCU Read-Side Critical Sections (February 5, 2007)

The design of preemptible read-copy-update (October 8, 2007)

What is RCU, Fundamentally? (December 17, 2007)

What is RCU? Part 2: Usage (December 24, 2007)

RCU part 3: the RCU API (January 7, 2008)

Integrating and Validating dynticks and Preemptable RCU (April 22, 2008)

Hierarchical RCU (November 4, 2008)

RCU: The Bloatwatch Edition (March 17, 2009)

RCU mistakes (December 15, 2009)

RCU strings (January 5, 2010)

sys_membarrier() (January 13, 2010)

Lockdep-RCU (February 1, 2010)

The RCU API, 2010 Edition (December 8, 2010)

NoHZ tasks (December 20, 2010)

3.0 and RCU: what went wrong (July 27, 2011)

The new visibility of RCU processing (October 10, 2012)

Relocating RCU callbacks (October 31, 2012)

Simplifying RCU (March 6, 2013)

(Nearly) full tickless operation in 3.10 (May 8, 2013)

Is the whole system idle? (July 10, 2013)

Scalability techniques (October 29, 2013)

RCU, cond_resched(), and performance regressions (June 24, 2014)

The RCU-tasks subsystem (July 30, 2014)

The RCU API, 2014 Edition (September 4, 2014)

Using RCU for linked lists — a case study (September 10, 2014)

Relativistic hash tables, part 1: Algorithms (September 17, 2014)

Relativistic hash tables, part 2: Implementation (September 17, 2014)

Recent read-mostly research (November 11, 2014)

When real validation begins (January 21, 2015)

Requirements for RCU part 1: the fundamentals (July 29, 2015)

RCU requirements part 2 — parallelism and software engineering (August 5, 2015)

RCU requirements part 3 (August 12, 2015)

Read-mostly research in 2015 (December 16, 2015)

RCU and the mid-boot dead zone (March 7, 2017)

The RCU API, 2019 edition (January 23, 2019)

Recent RCU changes (May 10, 2022)

The intersection of lazy RCU and memory reclaim (May 18, 2023)

The interaction between memory reclaim and RCU (May 22, 2024)

The RCU API, 2024 edition (September 13, 2024)

rcu_sync

Optimizing CPU hotplug locking (October 9, 2013)

Reader-writer spinlocks

Eliminating rwlocks and IRQF_DISABLED (December 1, 2009)

__read_mostly

Short subjects: kerneloops, read-mostly, and port 80 (December 18, 2007)

Realtime

Approaches to realtime Linux (October 12, 2004)

Realtime preemption, part 2 (October 20, 2004)

The ongoing realtime story (October 27, 2004)

Schedulers, pluggable and realtime (November 3, 2004)

Merging the realtime security module (January 11, 2005)

Low latency for audio applications (January 26, 2005)

Realtime preemption and read-copy-update (March 30, 2005)

The beginning of the realtime preemption debate (June 1, 2005)

Realtime and interrupt latency (June 14, 2005)

Kernel Summit 2005: Realtime capabilities (July 20, 2005)

A new approach to kernel timers (September 20, 2005)

Priority inheritance in the kernel (April 3, 2006)

Kernel Summit 2006: Realtime (July 19, 2006)

Read-copy-update for realtime (September 26, 2006)

KS2007: Realtime and syslets (September 9, 2007)

What's in the realtime tree (October 3, 2007)

Fair user scheduling and other scheduler patches (October 16, 2007)

Realtime adaptive locks (March 5, 2008)

SCHED_FIFO and realtime throttling (September 1, 2008)

A new realtime tree (December 9, 2008)

Interview: the return of the realtime preemption tree (February 16, 2009)

The realtime preemption endgame (August 5, 2009)

The realtime preemption mini-summit (September 28, 2009)

Scenes from the Real Time Linux Workshop (October 5, 2009)

KS2009: Realtime preemption (October 21, 2009)

The state of realtime Linux (June 15, 2010)

Realtime Linux: academia v. reality (July 26, 2010)

Realtime group scheduling doesn't know JACK (December 19, 2010)

ELC: A PREEMPT_RT roadmap (April 27, 2011)

Per-CPU variables and the realtime tree (July 26, 2011)

Software interrupts and realtime (October 17, 2012)

The 2012 realtime minisummit (October 24, 2012)

LCE: Realtime, present and future (November 13, 2012)

The future of realtime Linux (November 6, 2013)

The future of the realtime patch set (October 21, 2014)

Realtime mainlining (November 3, 2015)

Time-based packet transmission (March 8, 2018)

BPF and the realtime patch set (October 23, 2019)

Controlling realtime priorities in kernel threads (April 23, 2020)

Local locks in the kernel (August 11, 2020)

Preparing for the realtime future (September 9, 2020)

Migration disable for the mainline (November 9, 2020)

The runtime verification subsystem (June 7, 2021)

Short subjects: Realtime, Futexes, and ntfs3 (August 16, 2021)

A Q&A about the realtime patches (July 18, 2023)

The real realtime preemption end game (November 16, 2023)

Nested bottom-half locking for realtime kernels (June 17, 2024)

Deadline scheduling

Deadline scheduling for Linux (October 13, 2009)

A new deadline scheduler patch (March 10, 2010)

Adding periods to SCHED_DEADLINE (July 20, 2010)

The IRMOS realtime scheduler (August 3, 2010)

KS2010: Deadline scheduling (November 2, 2010)

A deadline scheduler update (March 14, 2017)

Deadline scheduling part 1 — overview and theory (January 16, 2018)

Deadline scheduler part 2 — details and usage (January 19, 2018)

The deadline scheduler and CPU idle states (May 22, 2020)

Capacity awareness for the deadline scheduler (May 29, 2020)

recvmmsg()

In brief (May 27, 2009)

Red-black trees

Trees II: red-black trees (June 22, 2006)

Augmented red-black trees (May 18, 2010)

Generic red-black trees (June 5, 2012)

Reference counting

The debut of kref (March 16, 2004)

RCU-safe reference counting (July 14, 2004)

Per-CPU reference counts (July 3, 2013)

Introducing lockrefs (September 4, 2013)

A surprise with mutexes and reference counts (December 4, 2013)

Two approaches to reference count hardening (July 7, 2016)

The bumpy road to reference-count protection in the kernel (November 16, 2016)

refcount_t meets the network stack (March 29, 2017)

Faster reference-count overflow protection (July 24, 2017)

Avoiding page reference-count overflows (April 16, 2019)

A reference-count tracking infrastructure (December 6, 2021)

reflink()

The two sides of reflink() (May 5, 2009)

This week's reflink() API (May 19, 2009)

In brief (September 9, 2009)

copy_range() (May 15, 2013)

copy_file_range() (October 7, 2015)

reflink() and other topics (April 26, 2016)

register_chrdev_region()

The cdev interface (August 16, 2006)

Regression testing

Toward better kernel releases (December 7, 2004)

Automated kernel testing (June 8, 2005)

Kernel testing and regressions: an example (July 26, 2005)

Kernel Summit 2006: Automated testing (July 19, 2006)

KS2012: Regression testing (August 30, 2012)

Toward better testing (March 26, 2014)

Kernel self tests (August 20, 2014)

Kernel testing (November 4, 2015)

Testing and the stable tree (May 28, 2019)

Storage testing (May 28, 2019)

Regression tracking

Kernel regression tracking, part 1 (October 31, 2017)

Kernel regression tracking, part 2 (November 6, 2017)

Better regression handling for the kernel (September 19, 2022)

Relayfs

Some upcoming sysfs enhancements (March 7, 2006)

Releases

Another look at the new development model (July 27, 2004)

Toward better kernel releases (December 7, 2004)

Linux 3.0? (September 3, 2008)

2.6.x-rc0 (October 7, 2009)

2.6.20

Who wrote 2.6.20? (February 21, 2007)

2.6.21

Who's writing 2.6.21 and related issues (March 7, 2007)

2.6.22

Merged (and to be merged) for 2.6.22 (May 2, 2007)

More stuff for 2.6.22 (May 9, 2007)

Who wrote - and approved - 2.6.22 (June 11, 2007)

A summary of 2.6.22 internal API changes (June 24, 2007)

2.6.23

The 2.6.23 merge window opens (July 11, 2007)

Merged for 2.6.23 (July 18, 2007)

The 2.6.23 stragglers (July 23, 2007)

Who wrote 2.6.23 (September 11, 2007)

A summary of 2.6.23 internal API changes (September 17, 2007)

2.6.24

Merged for 2.6.24 (October 17, 2007)

Merged for 2.6.24, part 2 (October 24, 2007)

2.6.24 - some statistics (January 9, 2008)

2.6.25

What got into 2.6.25 (January 30, 2008)

More stuff for 2.6.25 (February 6, 2008)

Before the 2.6.25 merge window closed... (February 12, 2008)

Where 2.6.25 came from (April 2, 2008)

2.6.26

The 2.6.26 merge window opens (April 23, 2008)

The 2.6.26 merge window, part 2 (April 30, 2008)

The last things through the 2.6.26 merge window (May 5, 2008)

A summary of 2.6.26 API changes (June 11, 2008)

Some development statistics for 2.6.26 - and beyond (July 2, 2008)

2.6.27

2.6.27: what's coming (part 1) (July 16, 2008)

2.6.27 merge window, part 2 (July 23, 2008)

Linux-next meets the merge window (July 23, 2008)

2.6.27 - the rest of the story (July 29, 2008)

Some development statistics for 2.6.27 (October 7, 2008)

The source of the e1000e corruption bug (October 21, 2008)

Tracking of testers and bug reporters - a status report (November 11, 2008)

2.6.28

Merged for 2.6.28 (October 15, 2008)

2.6.28 merge window, part 2 (October 22, 2008)

Closing out the 2.6.28 merge window (October 27, 2008)

Development statistics for 2.6.28 (December 18, 2008)

2.6.29

2.6.29 merge window, part 1 (January 7, 2009)

2.6.29 merge window, part 2 (January 14, 2009)

A summary of 2.6.29 internal API changes (March 3, 2009)

Where 2.6.29 came from (March 18, 2009)

2.6.30

2.6.30 merge window, part I (April 1, 2009)

2.6.30 merge window, part 2 (April 8, 2009)

Developer statistics for 2.6.30 (May 27, 2009)

2.6.31

2.6.31 merge window, week 1 (June 17, 2009)

2.6.31 merge window, week 2 (June 24, 2009)

Development statistics for 2.6.31 (August 26, 2009)

2.6.32

2.6.32 merge window, part 1 (September 16, 2009)

2.6.32 merge window, part 2 (September 23, 2009)

2.6.32 merge window, part 3 (September 30, 2009)

Who wrote 2.6.32 (November 24, 2009)

2.6.32.9 Release notes (February 21, 2010)

2.6.33

2.6.33 merge window part 1 (December 9, 2009)

2.6.33 merge window part 2 (December 16, 2009)

Who wrote 2.6.33 (February 9, 2010)

How old is our kernel? (February 17, 2010)

2.6.34

2.6.34 Merge window, part 1 (March 3, 2010)

2.6.34 Merge window, part 2 (March 10, 2010)

Kernel development statistics for 2.6.34 and beyond (May 4, 2010)

2.6.35

2.6.35 merge window part 1 (May 19, 2010)

2.6.35 merge window part 2 (May 26, 2010)

2.6.35 merge window part 3 (May 31, 2010)

Kernel development statistics for 2.6.35 (July 14, 2010)

2.6.36

2.6.36 merge window part 1 (August 4, 2010)

2.6.36 merge window: the sequel (August 11, 2010)

The conclusion of the 2.6.36 merge window (August 16, 2010)

Statistics for the 2.6.36 development cycle (October 13, 2010)

2.6.37

2.6.37 merge window, part 1 (October 27, 2010)

The second half of the 2.6.37 merge window (November 1, 2010)

Who wrote 2.6.37 (December 30, 2010)

2.6.38

2.6.38 merge window part 1 (January 12, 2011)

2.6.38 merge window part 2 (January 19, 2011)

Who wrote 2.6.38 (March 2, 2011)

2.6.39

2.6.39 merge window part 1 (March 16, 2011)

2.6.39 merge window, part 2 (March 23, 2011)

The 2.6.39 merge window concludes (March 29, 2011)

2.6.39 development statistics (May 10, 2011)

3.0

What's coming in $NEXT_KERNEL_VERSION, part 1 (May 25, 2011)

3.0 merge window part 2 (June 1, 2011)

Who wrote 3.0 - from two points of view (July 13, 2011)

3.1

3.1 merge window part 1 (July 27, 2011)

3.1 merge window part 2 (August 3, 2011)

A look at the 3.1 development cycle (September 28, 2011)

3.10

What's coming in 3.10, part 1 (May 1, 2013)

What's coming in 3.10, part 2 (May 8, 2013)

The conclusion of the 3.10 merge window (May 12, 2013)

Contribution statistics for the 3.10 development cycle (June 26, 2013)

3.11

The 3.11 merge window opens (July 3, 2013)

3.11 merge window part 2 (July 10, 2013)

The 3.11 merge window closes (July 16, 2013)

Some numbers from the 3.11 development cycle (August 21, 2013)

3.12

The 3.12 merge window opens (September 5, 2013)

3.12 merge window, part 2 (September 11, 2013)

The end of the 3.12 merge window (September 17, 2013)

A look at the 3.12 development cycle (October 23, 2013)

3.13

3.13 Merge window, part 1 (November 13, 2013)

3.13 Merge window, part 2 (November 20, 2013)

The conclusion of the 3.13 merge window (November 26, 2013)

Some 3.13 development statistics (January 8, 2014)

3.14

3.14 Merge window part 1 (January 22, 2014)

3.14 Merge window part 2 (January 29, 2014)

3.14 Merge window part 3 (February 5, 2014)

3.14 development statistics (March 12, 2014)

3.15

3.15 Merge window, part 1 (April 9, 2014)

3.15 Merge window, part 2 (April 16, 2014)

Who wrote 3.15 through 3.17 (September 24, 2014)

3.16

3.16 merge window, part 1 (June 4, 2014)

3.16 merge window, part 2 (June 11, 2014)

The 3.16 merge window concludes (June 18, 2014)

Who wrote 3.15 through 3.17 (September 24, 2014)

3.17

3.17 merge window part 1 (August 6, 2014)

3.17 merge window, part 2 (August 13, 2014)

3.17 Merge window, part 3 (August 20, 2014)

Who wrote 3.15 through 3.17 (September 24, 2014)

3.18

3.18 Merge window part 1 (October 8, 2014)

3.18 Merge window part 2 (October 15, 2014)

3.18 Merge window part 3 (October 22, 2014)

Some 3.18 development statistics (November 25, 2014)

3.19

The 3.19 merge window opens (December 10, 2014)

3.19 Merge window part 2 (December 17, 2014)

The end of the 3.19 merge window (December 22, 2014)

Statistics from the 3.19 development cycle (February 4, 2015)

3.2

3.2 merge window, part 1 (November 2, 2011)

The second half of the 3.2 merge window (November 8, 2011)

Some numbers from the 3.2 development cycle (December 21, 2011)

3.3

The first half of the 3.3 merge window (January 11, 2012)

3.3 merge window part 2 (January 18, 2012)

Statistics for the 3.3 development cycle (March 6, 2012)

3.4

3.4 Merge window part 1 (March 21, 2012)

3.4 Merge window part 2 (March 28, 2012)

The conclusion of the 3.4 merge window (April 3, 2012)

Statistics from the 3.4 development cycle (May 8, 2012)

3.5

The 3.5 merge window opens (May 23, 2012)

3.5 merge window part 2 (May 31, 2012)

The conclusion of the 3.5 merge window (June 5, 2012)

Who wrote 3.5 (July 25, 2012)

3.6

3.6 merge window part 1 (July 25, 2012)

3.6 merge window part 2 (August 1, 2012)

The conclusion of the 3.6 merge window (August 3, 2012)

Where the 3.6 kernel came from (September 26, 2012)

3.7

3.7 Merge window part 1 (October 3, 2012)

3.7 merge window: conclusion and summary (October 17, 2012)

Statistics from the 3.7 development cycle (November 28, 2012)

3.8

3.8 Merge window part 1 (December 12, 2012)

3.8 Merge window part 2 (December 19, 2012)

Some 3.8 development statistics (February 13, 2013)

3.9

3.9 Merge window part 1 (February 20, 2013)

3.9 Merge window, second episode (February 27, 2013)

The conclusion of the 3.9 merge window (March 5, 2013)

Statistics from the 3.9 development cycle (April 17, 2013)

4.0

The 3.20 merge window opens (February 11, 2015)

3.20 merge window part 2 (February 18, 2015)

The end of the 4.0 merge window (February 24, 2015)

Statistics from the 4.0 development cycle (April 1, 2015)

4.1

4.1 Merge window, part 1 (April 15, 2015)

4.1 Merge window, part 2 (April 22, 2015)

The 4.1 merge window closes (April 28, 2015)

4.1 development statistics (June 3, 2015)

4.10

4.10 Merge window part 1 (December 14, 2016)

4.10 Merge window part 2 (December 21, 2016)

Finishing out the 4.10 merge window (January 3, 2017)

Some 4.10 Development statistics (February 8, 2017)

4.11

The 4.11 merge window opens (February 22, 2017)

4.11 Merge window part 2 (March 1, 2017)

The end of the 4.11 merge window (March 7, 2017)

4.11 Kernel development statistics (April 19, 2017)

4.12

4.12 Merge window part 1 (May 3, 2017)

4.12 Merge window part 2 (May 10, 2017)

The end of the 4.12 merge window (May 14, 2017)

Some 4.12 development statistics (July 4, 2017)

4.13

4.13 Merge window, part 1 (July 10, 2017)

4.13 Merge window, part 2 (July 16, 2017)

Development statistics for the 4.13 kernel (August 24, 2017)

4.14

The first half of the 4.14 merge window (September 8, 2017)

The rest of the 4.14 merge window (September 17, 2017)

A look at the 4.14 development cycle (October 20, 2017)

Patch flow into the mainline for 4.14 (October 24, 2017)

4.15

4.15 Merge window part 1 (November 17, 2017)

4.15 Merge window part 2 (November 28, 2017)

Statistics for the 4.15 kernel (January 3, 2018)

4.16

4.16 Merge window part 1 (February 2, 2018)

The rest of the 4.16 merge window (February 12, 2018)

Some 4.16 and -stable development statistics (March 26, 2018)

4.17

The first half of the 4.17 merge window (April 5, 2018)

The second half of the 4.17 merge window (April 16, 2018)

Statistics from the 4.17 kernel development cycle (May 31, 2018)

4.18

4.18 Merge window, part 1 (June 8, 2018)

4.18 Merge window, part 2 (June 17, 2018)

Statistics from the 4.18 development cycle (July 24, 2018)

4.19

The first half of the 4.19 merge window (August 17, 2018)

The second half of the 4.19 merge window (August 26, 2018)

Some numbers from the 4.19 development cycle (October 7, 2018)

4.2

4.2 Merge window part 1 (June 24, 2015)

4.2 Merge window part 2 (July 1, 2015)

4.2 Merge window part 3 (July 7, 2015)

Development statistics for the 4.2 kernel (August 18, 2015)

4.20

4.20/5.0 Merge window part 1 (October 26, 2018)

4.20 Merge window part 2 (November 5, 2018)

Some 4.20 development statistics (December 21, 2018)

4.3

4.3 Merge window, part 1 (September 2, 2015)

4.3 Merge window, part 2 (September 10, 2015)

4.3 Merge window, part 3 (September 14, 2015)

Where 4.3 came from (October 27, 2015)

4.4

4.4 Merge window, part 1 (November 11, 2015)

4.4 Merge window, part 2 (November 18, 2015)

Some 4.4 development statistics (December 23, 2015)

How 4.4's patches got to the mainline (January 6, 2016)

A last look at the 4.4 stable series (February 17, 2022)

4.5

The 4.5 merge window opens (January 13, 2016)

4.5 merge window part 2 (January 20, 2016)

4.5 merge window part 3 (January 25, 2016)

Some 4.5 Development statistics (March 9, 2016)

4.6

The 4.6 merge window opens (March 16, 2016)

4.6 Merge window part 2 (March 23, 2016)

The end of the 4.6 merge window (March 30, 2016)

Some numbers from the 4.6 development cycle (May 11, 2016)

4.7

4.7 Merge window, part 1 (May 18, 2016)

4.7 Merge window, part 2 (May 25, 2016)

The end of the 4.7 merge window (June 2, 2016)

Statistics from the 4.7 development cycle (August 2, 2016)

4.8

4.8 merge window part 1 (July 27, 2016)

4.8 Merge window part 2 (August 3, 2016)

The end of the 4.8 merge window (August 10, 2016)

A look at the 4.8 development cycle (September 28, 2016)

4.9

4.9 Merge window part 1 (October 5, 2016)

4.9 Merge window part 2 (October 12, 2016)

The end of the 4.9 merge window (October 19, 2016)

Development statistics for 4.9 (December 7, 2016)

Six years with the 4.9 kernel (January 12, 2023)

5.0

What's coming in the next kernel release (part 1) (December 31, 2018)

The rest of the 5.0 merge window (January 7, 2019)

Development statistics for the 5.0 kernel (February 21, 2019)

5.1

5.1 Merge window part 1 (March 8, 2019)

5.1 Merge window part 2 (March 17, 2019)

Some 5.1 development statistics (April 25, 2019)

5.10

5.10 Merge window, part 1 (October 16, 2020)

The rest of the 5.10 merge window (October 26, 2020)

Statistics from the 5.10 kernel development cycle (December 14, 2020)

5.11

5.11 Merge window, part 1 (December 18, 2020)

5.11 Merge window, part 2 (December 28, 2020)

Development statistics for the 5.11 kernel (February 15, 2021)

5.12

5.12 Merge window, part 1 (February 22, 2021)

5.12 merge window, part 2 (March 1, 2021)

Linux 5.12's very bad, double ungood day (March 8, 2021)

Some 5.12 development statistics (April 26, 2021)

5.13

The first half of the 5.13 merge window (April 30, 2021)

The second half of the 5.13 merge window (May 10, 2021)

Calling kernel functions from BPF (May 13, 2021)

Exported-symbol changes in 5.13 (May 17, 2021)

Control-flow integrity in 5.13 (May 21, 2021)

quotactl_path() becomes quotactl_fd() (June 14, 2021)

Landlock (finally) sets sail (June 17, 2021)

Some 5.13 development statistics (June 28, 2021)

5.14

The first half of the 5.14 merge window (July 2, 2021)

Core scheduling lands in 5.14 (July 1, 2021)

The conclusion of the 5.14 merge window (July 12, 2021)

memfd_secret() in 5.14 (August 6, 2021)

Some 5.14 development statistics (August 30, 2021)

5.15

Memory-management optimization with DAMON (February 20, 2020)

5.15 Merge window, part 1 (September 2, 2021)

The rest of the 5.15 merge window (September 13, 2021)

A rough start for ksmbd (October 7, 2021)

Some 5.15 development statistics (November 1, 2021)

5.16

5.16 Merge window, part 1 (November 4, 2021)

Intel AMX support in 5.16 (November 8, 2021)

5.16 Merge window, part 2 (November 15, 2021)

SA_IMMUTABLE and the hazards of messing with signals (December 17, 2021)

Some 5.16 kernel development statistics (January 10, 2022)

5.17

The first half of the 5.17 merge window (January 13, 2022)

The rest of the 5.17 merge window (January 24, 2022)

A look at some 5.17 development statistics (March 21, 2022)

5.18

A memory allocator for BPF code (February 4, 2022)

5.18 Merge window, part 1 (March 25, 2022)

5.18 Merge window, part 2 (April 4, 2022)

Indirect branch tracking for Intel CPUs (March 31, 2022)

The BPF allocator runs into trouble (April 29, 2022)

Statistics from the 5.18 development cycle (May 23, 2022)

5.19

5.19 Merge window, part 1 (May 27, 2022)

5.19 Merge window, part 2 (June 6, 2022)

Some 5.19 development statistics (August 1, 2022)

5.2

The first half of the 5.2 merge window (May 10, 2019)

The rest of the 5.2 merge window (May 20, 2019)

Statistics from the 5.2 kernel — and before (June 21, 2019)

5.3

5.3 Merge window, part 1 (July 12, 2019)

5.3 Merge window, part 2 (July 22, 2019)

5.3 Kernel development cycle statistics (September 9, 2019)

5.4

5.4 Merge window, part 1 (September 23, 2019)

5.4 Merge window, part 2 (September 30, 2019)

Statistics from the 5.4 development cycle (November 7, 2019)

5.5

5.5 Merge window, part 1 (December 2, 2019)

The end of the 5.5 merge window (December 9, 2019)

Some 5.5 kernel development statistics (January 28, 2020)

5.6

The 5.6 merge window opens (January 30, 2020)

The rest of the 5.6 merge window (February 10, 2020)

Some 5.6 kernel development statistics (March 30, 2020)

5.7

5.7 Merge window part 1 (April 3, 2020)

5.7 Merge window part 2 (April 13, 2020)

Development statistics for the 5.7 kernel (June 2, 2020)

5.8

5.8 Merge window, part 1 (June 5, 2020)

5.8 Merge window, part 2 (June 14, 2020)

Some statistics from the 5.8 kernel cycle (August 3, 2020)

5.9

5.9 Merge window, part 1 (August 7, 2020)

5.9 Merge window, part 2 (August 17, 2020)

Some 5.9 kernel development statistics (October 13, 2020)

6.0

6.0 Merge window, part 1 (August 5, 2022)

An io_uring-based user-space block driver (August 8, 2022)

6.0 Merge window, part 2 (August 15, 2022)

The trouble with 64-bit DMA (August 11, 2022)

LRU-list manipulation with DAMON (August 22, 2022)

Some 6.0 development statistics (October 3, 2022)

6.1

A new LLVM CFI implementation (June 17, 2022)

A BPF-specific memory allocator (June 30, 2022)

The BPF panic function (July 18, 2022)

A security-module hook for user-namespace creation (August 4, 2022)

The first half of the 6.1 merge window (October 7, 2022)

The rest of the 6.1 merge window (October 17, 2022)

A first look at Rust in the 6.1 kernel (October 13, 2022)

Development statistics for the 6.1 kernel (and beyond) (December 12, 2022)

6.10

mseal() gets closer (January 19, 2024)

Windows NT synchronization primitives for Linux (February 16, 2024)

The first half of the 6.10 merge window (May 16, 2024)

The rest of the 6.10 merge window (May 27, 2024)

Development statistics for the 6.10 kernel (July 15, 2024)

6.11

Hardening the kernel against heap-spraying attacks (March 21, 2024)

Nested bottom-half locking for realtime kernels (June 17, 2024)

The first half of the 6.11 merge window (July 18, 2024)

The rest of the 6.11 merge window (July 29, 2024)

Some 6.11 development statistics (September 16, 2024)

6.12

Completing the EEVDF scheduler (April 11, 2024)

Eliminating indirect calls for security modules (July 2, 2024)

May the FOLL_FORCE not be with you (July 26, 2024)

The 6.12 merge window begins (September 20, 2024)

6.2

6.2 Merge window, part 1 (December 15, 2022)

The rest of the 6.2 merge window (December 27, 2022)

Some development statistics for 6.2 (February 20, 2023)

6.3

Enabling non-executable memfds (December 19, 2022)

GFP flags and the end of __GFP_ATOMIC (January 27, 2023)

The first half of the 6.3 merge window (February 23, 2023)

Red-black trees for BPF programs (February 27, 2023)

The rest of the 6.3 merge window (March 6, 2023)

Development statistics for 6.3 (April 24, 2023)

6.4

Concurrent page-fault handling with per-VMA locks (September 5, 2022)

Generic iterators for BPF (March 17, 2023)

Disabling SELinux's runtime disable (April 20, 2023)

6.4 Merge window, part 1 (April 28, 2023)

The rest of the 6.4 merge window (May 8, 2023)

Development statistics for 6.4 (June 26, 2023)

Stabilizing per-VMA locking (July 13, 2023)

6.5

Checking page-cache status with cachestat() (December 6, 2022)

Seeking an acceptable unaccepted memory policy (April 6, 2023)

Scope-based resource management for the kernel (June 15, 2023)

The first half of the 6.5 merge window (June 30, 2023)

Documenting counted-by relationships in kernel data structures (July 3, 2023)

The rest of the 6.5 merge window (July 10, 2023)

A pair of workqueue improvements (July 7, 2023)

Development statistics for the 6.5 kernel (August 28, 2023)

6.6

An EEVDF CPU scheduler for Linux (March 9, 2023)

User-space shadow stacks (maybe) for 6.4 (March 24, 2023)

The proper time to split struct page (July 14, 2023)

Randomness for kmalloc() (July 24, 2023)

Flags for fchmodat() (July 27, 2023)

Making life (even) harder for proprietary modules (August 3, 2023)

A more dynamic software I/O TLB (August 24, 2023)

The first half of the 6.6 merge window (August 31, 2023)

The rest of the 6.6 merge window (September 11, 2023)

Some 6.6 development statistics (October 30, 2023)

6.7

Exceptions in BPF (July 21, 2023)

An ioctl() call to detect memory writes (August 10, 2023)

Shrinking shrinker locking overhead (September 15, 2023)

The first half of the 6.7 merge window (November 3, 2023)

The rest of the 6.7 merge window (November 13, 2023)

The push to save Itanium (November 9, 2023)

Some 6.7 development statistics (January 8, 2024)

6.8

Deadline servers as a realtime throttling replacement (June 12, 2023)

Guest-first memory for KVM (November 2, 2023)

listmount() and statmount() (November 10, 2023)

The first half of the 6.8 merge window (January 12, 2024)

The rest of the 6.8 merge window (January 22, 2024)

Development statistics for 6.8 (March 11, 2024)

6.9

Better CPU selection for timer expiration (November 7, 2022)

Finer-grained BPF tokens (October 12, 2023)

Weighted interleaving for memory tiering (October 25, 2023)

The end of tasklets (February 5, 2024)

A proposal for shared memory in BPF programs (February 21, 2024)

Better linked-list traversal in BPF (March 8, 2024)

The first half of the 6.9 merge window (March 14, 2024)

The rest of the 6.9 merge window (March 25, 2024)

Some 6.9 development statistics (May 13, 2024)

Stable updates

Some numbers and thoughts on the stable kernels (August 27, 2010)

Further notes on stable kernels (September 8, 2010)

Maintaining a stable kernel on an unstable base (September 29, 2010)

Automating stable-kernel creation (September 21, 2016)

The imminent stable-version apocalypse (February 5, 2021)

remap_anon_pages()

User-space page fault handling (May 14, 2013)

Page faults in user space: MADV_USERFAULT, remap_anon_range(), and userfaultfd() (October 7, 2014)

User-space page fault handling (March 11, 2015)

remap_file_pages()

Multi-protection VMAs (May 8, 2006)

The possible demise of remap_file_pages() (May 7, 2014)

Remapper

Buried in warnings (November 1, 2006)

remap_pfn_range()

remap_pfn_range() (September 29, 2004)

PG_reserved, VM_RESERVED, and VM_UNPAGED (November 22, 2005)

renameat2()

Exchanging two files (October 2, 2013)

How implementation details become ABI: a case study (October 1, 2014)

Resident set

Size limits

Simple resident set size limits (August 10, 2004)

Resizing filesystems

Online resizing of ext3 filesystems (June 15, 2004)

Changing filesystem resize patterns (May 11, 2022)

Resource limits

Resource limits in user namespaces (January 18, 2021)

In search of an appropriate RLIMIT_MEMLOCK default (November 19, 2021)

Resource management

Kernel Summit: Class-based Kernel Resource Management (July 21, 2004)

Controlling access to the memory cache (July 20, 2016)

Resources

64-bit resources (June 13, 2006)

Device resource management (January 2, 2007)

The managed resource API (February 20, 2007)

Restartable sequences

Restartable sequences (July 7, 2015)

Restartable sequences (November 4, 2015)

A return to restartable sequences (November 18, 2015)

Restartable sequences restarted (August 24, 2016)

Restartable sequences and ops vectors (October 31, 2017)

Restartable sequences in glibc (January 31, 2022)

Extending restartable sequences with virtual CPU IDs (February 28, 2022)

Improving C-library scalability with restartable sequences (October 17, 2023)

Retpoline

Addressing Meltdown and Spectre in the kernel (January 5, 2018)

Relief for retpoline pain (December 14, 2018)

A medley of performance-related BPF patches (January 2, 2020)

Avoiding retpolines with static calls (March 26, 2020)

Reverse engineering

LCA: The state of the Nouveau project (January 17, 2007)

Tracing memory-mapped I/O operations (February 26, 2008)

revoke()

revoke() and frevoke() (July 25, 2006)

revoke() returns (December 18, 2007)

Hotplug file descriptors and revoke() (April 14, 2009)

Retrying revoke() (April 9, 2013)

A revoke() update and more (April 2, 2014)

RichACLs

Rich access control lists (October 20, 2015)

RSBAC

Rule set based access control (September 27, 2005)

Rustyvisor

An introduction to lguest (January 23, 2007)

Samba

Which filesystem for Samba4? (November 23, 2004)

Common needs for Samba and NFS (May 15, 2019)

Scalability

Kernel Summit 2006: Scalability (July 19, 2006)

Too many threads (April 10, 2007)

KS2007: Scalability (September 9, 2007)

Toward better direct I/O scalability (March 31, 2008)

The state of the pageout scalability patches (June 17, 2008)

The lockless page cache (July 29, 2008)

Tangled up in threads (August 19, 2008)

KS2009: How Google uses Linux (October 21, 2009)

JLS: Increasing VFS scalability (November 3, 2009)

Big reader locks (March 16, 2010)

CPUS*PIDS = mess (April 27, 2010)

One billion files on Linux (August 18, 2010)

VFS scalability patches in 2.6.36 (August 24, 2010)

Dueling inode scalability patches (October 20, 2010)

Resolving the inode scalability discussion (October 26, 2010)

KS2010: Scalability (November 3, 2010)

Dcache scalability and RCU-walk (December 14, 2010)

Dcache scalability and security modules (April 27, 2011)

LSFMM: Lock scaling (April 23, 2013)

Split PMD locks (September 25, 2013)

Optimizing CPU hotplug locking (October 9, 2013)

Revisiting CPU hotplug locking (October 16, 2013)

Scalability techniques (October 29, 2013)

Memory-management scalability (March 13, 2015)

Lockless algorithms for mere mortals (July 28, 2020)

The balance between features and performance in the block layer (November 5, 2021)

Scatter/gather chaining

Scatterlist chaining (May 16, 2007)

The chained scatterlist API (October 29, 2007)

Rationalizing scatter/gather chains (December 28, 2007)

Scheduler

Scheduling domains (April 19, 2004)

The staircase scheduler (June 2, 2004)

Scheduler tweaks get serious (August 4, 2004)

When should a process be migrated? (October 6, 2004)

Schedulers, pluggable and realtime (November 3, 2004)

Solving starvation problems in the scheduler (March 22, 2006)

SMPnice (June 6, 2006)

The Rotating Staircase Deadline Scheduler (March 6, 2007)

RSDL hits a snag (March 14, 2007)

TASK_KILLABLE (July 1, 2008)

High- (but not too high-) resolution timeouts (September 2, 2008)

The offline scheduler (September 2, 2009)

Some notes from the BFS discussion (September 9, 2009)

Various scheduler-related topics (September 15, 2009)

KS2009: The state of the scheduler (October 19, 2009)

Some approaches to parallelism avoidance (November 17, 2009)

Who let the hogs out? (March 16, 2010)

KS2010: Scheduler issues (November 3, 2010)

Directed yield (December 15, 2010)

The Linaro Connect scheduler minisummit (February 22, 2012)

Linsched for 3.3 (March 21, 2012)

How 3.6 nearly broke PostgreSQL (October 2, 2012)

The MuQSS CPU scheduler (April 20, 2017)

Shrinking the scheduler (June 14, 2017)

Reconsidering the scheduler's wake_wide() heuristic (July 27, 2017)

Notes from the LPC scheduler microconference (September 18, 2017)

wait_var_event() (April 3, 2018)

Scheduler utilization clamping (August 8, 2018)

Coscheduling: simultaneous scheduling in control groups (September 10, 2018)

Telling the scheduler about thermal pressure (May 16, 2019)

TurboSched: the return of small-task packing (July 1, 2019)

Fixing SCHED_IDLE (November 26, 2019)

Scheduling for the Android display pipeline (January 16, 2020)

A full task-isolation mode for the kernel (April 6, 2020)

Imbalance detection and fairness in the CPU scheduler (May 22, 2020)

Migration disable for the mainline (November 9, 2020)

Scheduling for asymmetric Arm systems (November 30, 2020)

Kernel topics on the radar (August 2, 2021)

Controlling the CPU scheduler with BPF (October 21, 2021)

Synchronized GPU priority scheduling (October 22, 2021)

Fixing a corner case in asymmetric CPU packing (January 7, 2022)

Hybrid scheduling gets more complicated (September 30, 2022)

Addressing priority inversion with proxy execution (June 9, 2023)

Deferred scheduling for user-space critical sections (October 27, 2023)

and power management

Rethinking power-aware scheduling (January 10, 2012)

The return of power-aware scheduling (August 21, 2012)

Small-task packing (October 24, 2012)

Toward a more power-efficient scheduler (April 10, 2013)

Power-aware scheduling meets a line in the sand (June 5, 2013)

A power-aware scheduling update (June 19, 2013)

A new direction for power-aware scheduling (October 15, 2013)

The power-aware scheduling mini-summit (October 23, 2013)

Another attempt at power-aware scheduling (June 4, 2014)

Teaching the scheduler about power management (June 18, 2014)

The power-aware scheduling miniconference (August 27, 2014)

Toward better CPU idle-time predictions (October 29, 2014)

Steps toward power-aware scheduling (August 25, 2015)

Next-interrupt prediction (January 27, 2016)

Scheduling for Android devices (November 15, 2016)

Per-task CPU-frequency control (March 8, 2017)

Notes from Linaro Connect (March 15, 2017)

Energy-aware scheduling on asymmetric systems (March 22, 2018)

Evaluating vendor changes to the scheduler (May 19, 2020)

Removing the scheduler's energy-margin heuristic (July 1, 2022)

The trouble with iowait (September 10, 2024)

big.LITTLE

Linux support for ARM big.LITTLE (February 15, 2012)

A big.LITTLE scheduler update (June 12, 2012)

BPF

The extensible scheduler class (February 10, 2023)

Improving performance with SCHED_EXT and IOCost (April 1, 2024)

Completely fair scheduler

Schedulers: the plot thickens (April 17, 2007)

This week in the scheduling discussion (April 24, 2007)

CFS group scheduling (July 2, 2007)

Fair user scheduling and other scheduler patches (October 16, 2007)

Variations on fair I/O schedulers (December 3, 2008)

Improving scheduler latency (September 14, 2010)

CFS bandwidth control (February 16, 2011)

The burstable CFS bandwidth controller (February 8, 2021)

An EEVDF CPU scheduler for Linux (March 9, 2023)

Core scheduling

Core scheduling (February 28, 2019)

Many uses for Core scheduling (September 20, 2019)

Completing and merging core scheduling (May 13, 2020)

Core scheduling lands in 5.14 (July 1, 2021)

CPU affinity

Soft CPU affinity (July 4, 2019)

Deadline scheduling

Deadline scheduling for Linux (October 13, 2009)

A new deadline scheduler patch (March 10, 2010)

Adding periods to SCHED_DEADLINE (July 20, 2010)

The IRMOS realtime scheduler (August 3, 2010)

KS2010: Deadline scheduling (November 2, 2010)

SCHED_DEADLINE returns (April 11, 2012)

Deadline scheduling: coming soon? (December 4, 2013)

A deadline scheduler update (March 14, 2017)

Deadline scheduling part 1 — overview and theory (January 16, 2018)

Deadline scheduler part 2 — details and usage (January 19, 2018)

The deadline scheduler and CPU idle states (May 22, 2020)

Capacity awareness for the deadline scheduler (May 29, 2020)

EEVDF

An EEVDF CPU scheduler for Linux (March 9, 2023)

Completing the EEVDF scheduler (April 11, 2024)

Reports from OSPM 2024, part 1 (July 11, 2024)

Filtered wakeups

Filtered wakeups (May 5, 2004)

Group scheduling

CFS group scheduling (July 2, 2007)

TTY-based group scheduling (November 17, 2010)

Group scheduling and alternatives (December 6, 2010)

Realtime group scheduling doesn't know JACK (December 19, 2010)

A group scheduling demonstration (March 16, 2011)

Latency

Low latency for audio applications (January 26, 2005)

Improving scheduler latency (September 14, 2010)

The many faces of "latency nice" (May 18, 2020)

Improved response times with latency nice (March 17, 2022)

Revisiting the kernel's preemption model, part 2 (October 2, 2023)

Load tracking

Per-entity load tracking (January 9, 2013)

Load tracking in the scheduler (April 15, 2015)

Toward better CPU load estimation (December 11, 2017)

Frequency-invariant utilization tracking for x86 (April 2, 2020)

Utilization inversion and proxy execution (May 15, 2020)

NUMA

Toward better NUMA scheduling (March 16, 2012)

AutoNUMA: the other approach to NUMA scheduling (March 27, 2012)

A potential NUMA scheduling solution (October 31, 2012)

NUMA in a hurry (November 14, 2012)

NUMA scheduling progress (October 1, 2013)

Realtime

SCHED_FIFO and realtime throttling (September 1, 2008)

Controlling realtime priorities in kernel threads (April 23, 2020)

1½ Topics: realtime throttling and user-space adaptive spinning (May 13, 2023)

Deadline servers as a realtime throttling replacement (June 12, 2023)

Testing and benchmarking

Tracking tbench troubles (October 29, 2008)

Tbench troubles II (November 19, 2008)

KS2011: Scheduler testing (October 24, 2011)

A survey of scheduler benchmarks (June 14, 2017)

User-managed concurrency groups

User-managed concurrency groups (December 28, 2021)

Schedutil governor

Improvements in CPU frequency management (April 6, 2016)

Frequency-invariant utilization tracking for x86 (April 2, 2020)

Saving frequency scaling in the data center (May 21, 2020)

scnprintf()

snprintf() confusion (February 3, 2004)

SCSI

Lots of SCSI disks (March 16, 2004)

Shooting at SCSI targets (December 22, 2010)

LSFMM: A storage technology update (April 23, 2013)

LSFMM: Unit attentions and thin provisioning thresholds (April 24, 2013)

LSFMM: I/O hints (April 24, 2013)

LSFMM: Error returns (May 1, 2013)

LSFMM: Reducing SCSI latency (April 25, 2013)

LSFMM: SCSI testing (April 25, 2013)

A storage standards update (April 20, 2016)

Block SCSI generic (bsg)

Recent patches of interest (August 4, 2004)

The problem with the asynchronous bsg interface (July 19, 2018)

Command filtering

2.6.8 and CD recording (August 18, 2004)

SCSI command filtering (July 31, 2006)

A privilege escalation via SCSI pass-through (January 4, 2012)

Filtering SCSI commands (January 30, 2013)

SDIO

SDIO support coming (July 24, 2007)

Security

A weak cryptoloop implementation in Linux? (January 21, 2004)

The trouble with backporting fixes (February 26, 2004)

A new Adore root kit (March 17, 2004)

Kernel Summit: Security (July 21, 2004)

Securely renting out your CPU with Linux (January 26, 2005)

read() and write() access checking (February 8, 2005)

More hooks for kernel events (February 9, 2005)

The 2.4-hf tree launches (February 16, 2005)

The kernel gets a formal security contact (March 9, 2005)

Attack of the killer CD (March 22, 2005)

RHEL, kernel vulnerabilities, and days of risk (March 23, 2005)

OLS: Linux and trusted computing (July 22, 2005)

On the safety of the sysfs interfaces (April 5, 2006)

Appropriate sources of entropy (May 21, 2008)

Handling kernel security problems (July 16, 2008)

System calls and rootkits (September 10, 2008)

LCA: The security panel (January 21, 2009)

Rootless X (July 15, 2009)

/proc and directory permissions (October 28, 2009)

Symbolic links in "sticky" directories (June 2, 2010)

An ancient kernel hole is closed (August 18, 2010)

KS2010: Security (November 3, 2010)

Protecting /proc/slabinfo (March 9, 2011)

On vsyscalls and the vDSO (June 8, 2011)

Limiting system calls via control groups? (October 19, 2011)

KS2011: Kernel.org report (October 24, 2011)

Tightening security: not for the impatient (June 27, 2012)

Randomizing the kernel (April 10, 2013)

Unreviewed code in 3.11 (August 7, 2013)

Opening up kernel security bug handling (September 11, 2013)

Two LSS talks (October 9, 2013)

Security practices (October 29, 2013)

Domesticating applications, OpenBSD style (July 21, 2015)

Nested NMIs lead to CVE-2015-3290 (August 26, 2015)

Kernel security: beyond bug fixing (October 28, 2015)

Developer workflow security (November 3, 2015)

Security part 2 (November 4, 2015)

Sigreturn-oriented programming and its mitigation (February 24, 2016)

Two approaches to reference count hardening (July 7, 2016)

Inline encryption support for block devices (March 22, 2017)

Attacking the kernel via its command line (June 20, 2017)

Supporting Intel/AMD memory encryption (April 25, 2018)

Defending against page-cache attacks (January 17, 2019)

Fixing page-cache side channels, second attempt (February 5, 2019)

Intentionally buggy commits for fame—and papers (April 21, 2021)

Unmaintained filesystems as a threat vector (July 28, 2023)

Defending mounted filesystems from the root user (August 21, 2023)

BPF and security (October 4, 2023)

mseal() and what comes after (October 20, 2023)

Address-space layout randomization

Address space randomization in 2.6 (February 2, 2005)

Increasing the range of address-space layout randomization (December 16, 2015)

When ELF notes reveal too much (February 22, 2024)

Control-flow integrity

Kernel support for control-flow enforcement (June 25, 2018)

Control-flow integrity for the kernel (January 22, 2020)

Control-flow integrity in 5.13 (May 21, 2021)

Shadow stacks for user space (February 21, 2022)

Indirect branch tracking for Intel CPUs (March 31, 2022)

A new LLVM CFI implementation (June 17, 2022)

Kernel support for hardware-based control-flow integrity (July 11, 2022)

The intersection of shadow stacks and CRIU (December 16, 2022)

User-space shadow stacks (maybe) for 6.4 (March 24, 2023)

Shadow stacks for 64-bit Arm systems (August 7, 2023)

Controlling shadow-stack allocation in clone3() (December 7, 2023)

CVE numbers

What to do about CVE numbers (October 4, 2019)

A turning point for CVE numbers (February 14, 2024)

How kernel CVE numbers are assigned (June 19, 2024)

Filesystem encryption

Ext4 encryption (April 8, 2015)

Inline encryption for filesystems (August 27, 2019)

Per-extent encrypted keys for fscrypt (January 5, 2023)

Integrity verification

The Integrity Measurement Architecture (May 24, 2005)

Integrity management in the kernel (March 28, 2007)

The return of EVM (June 30, 2010)

dm-verity (September 19, 2011)

IMA appraisal extension (March 28, 2012)

LSS: Integrity for directories and special files (September 19, 2012)

Toward measured boot out of the box (September 8, 2016)

File-level integrity (April 27, 2018)

Protecting files with fs-verity (August 30, 2018)

A setback for fs-verity (January 3, 2019)

Yet another try for fs-verity (June 3, 2019)

Authenticated Btrfs (April 30, 2020)

Kernel hardening

Sanitizing kernel memory (May 27, 2009)

Page sanitization, part 2 (June 3, 2009)

Kernel address randomization (May 24, 2011)

LSS: The kernel hardening roundtable (September 15, 2011)

Kernel address space layout randomization (October 9, 2013)

Post-init read-only memory (December 2, 2015)

Two PaX features move toward the mainline (December 23, 2015)

Hardened usercopy (August 3, 2016)

Disallowing perf_event_open() (August 3, 2016)

Exclusive page-frame ownership (September 14, 2016)

A pair of GCC plugins (January 25, 2017)

Randomizing structure layout (May 11, 2017)

The "rare write" mechanism (June 1, 2017)

Hardened usercopy whitelisting (July 7, 2017)

Faster reference-count overflow protection (July 24, 2017)

A canary for timer-expiration functions (August 16, 2017)

A return-oriented programming defense from OpenBSD (August 30, 2017)

What's the best way to prevent kernel pointer leaks? (October 5, 2017)

Improving the kernel timers API (October 9, 2017)

Restricting automatic kernel-module loading (December 4, 2017)

Preventing kernel-stack leaks (March 7, 2018)

A "runtime guard" for the kernel (March 21, 2018)

Read-only dynamic data (March 27, 2018)

The slab and protected-memory allocators (May 1, 2018)

The importance of being noisy (August 13, 2018)

C considered dangerous (August 29, 2018)

Trying to get STACKLEAK into the kernel (September 12, 2018)

Bounce buffers for untrusted devices (April 26, 2019)

An end to implicit fall-throughs in the kernel (August 1, 2019)

Some near-term arm64 hardening patches (November 18, 2019)

Finer-grained kernel address-space layout randomization (February 19, 2020)

Per-system-call kernel-stack offset randomization (March 27, 2020)

Blocking userfaultfd() kernel-fault handling (May 8, 2020)

Memory protection keys for the kernel (July 21, 2020)

Strict memcpy() bounds checking for the kernel (July 30, 2021)

A firewall for device drivers (August 13, 2021)

Two security improvements for GCC (September 24, 2021)

Stray-write protection for persistent memory (February 3, 2022)

Averting excessive oopses (November 18, 2022)

Hardening magic links (June 14, 2023)

Randomness for kmalloc() (July 24, 2023)

GCC features to help harden the kernel (October 5, 2023)

Better handling of integer wraparound in the kernel (January 26, 2024)

A sandbox mode for the kernel (February 29, 2024)

Hardening the kernel against heap-spraying attacks (March 21, 2024)

Per-call-site slab caches for heap-spraying protection (August 20, 2024)

Key management

Trusted and encrypted keys (October 6, 2010)

Language interpreters

O_MAYEXEC — explicitly opening files for execution (May 11, 2020)

From O_MAYEXEC to trusted_for() (October 1, 2020)

Restricting execution of scripts — the third approach (July 19, 2024)

Meltdown and Spectre

KAISER: hiding the kernel from user space (November 15, 2017)

The current state of kernel page-table isolation (December 20, 2017)

Notes from the Intelpocalypse (January 4, 2018)

Addressing Meltdown and Spectre in the kernel (January 5, 2018)

A look at the handling of Meltdown and Spectre (January 9, 2018)

Meltdown/Spectre mitigation for 4.15 and beyond (January 15, 2018)

Meltdown and Spectre mitigations — a February update (February 5, 2018)

The strange story of the ARM Meltdown-fix backport (March 15, 2018)

Finding Spectre vulnerabilities with smatch (April 20, 2018)

The impact of page-table isolation on I/O performance (April 24, 2018)

A page-table isolation update (April 25, 2018)

Spectre V1 defense in GCC (July 10, 2018)

Meltdown strikes back: the L1 terminal fault vulnerability (August 14, 2018)

The sidechannel LSM (August 21, 2018)

Strengthening user-space Spectre v2 protection (September 5, 2018)

Toward better handling of hardware vulnerabilities (September 12, 2018)

Fighting Spectre with cache flushes (October 15, 2018)

Improving the handling of embargoed hardware-security bugs (October 25, 2018)

Taming STIBP (November 29, 2018)

Grand Schemozzle: Spectre continues to haunt (August 8, 2019)

Generalizing address-space isolation (November 5, 2019)

Spectre revisits BPF (June 24, 2021)

Blocking straight-line speculation — eventually (December 9, 2021)

Generalized address-space isolation (March 3, 2022)

Stuffing the return stack buffer (July 22, 2022)

A call to reconsider address-space isolation (September 29, 2022)

Support for Intel's LASS (January 13, 2023)

Another try for address-space isolation (May 21, 2024)

Memory encryption

Two approaches to x86 memory encryption (May 11, 2016)

SGX: when 20 patch versions aren't enough (April 23, 2019)

SGX and security modules (September 11, 2019)

Namespaces

User namespaces and setgroups() (December 17, 2014)

Controlling access to user namespaces (January 27, 2016)

Patch verification

Pull requests with signed tags (December 21, 2011)

Patch flow into the mainline for 4.14 (October 24, 2017)

Maintaining the kernel's web of trust (September 4, 2019)

Attestation for kernel patches (March 2, 2020)

An update on the UMN affair (April 29, 2021)

Random number generation

On the safety of Linux random numbers (May 9, 2006)

Random numbers for embedded devices (July 17, 2012)

The search for truly random numbers in the kernel (September 18, 2013)

Plenary day lightning talks (October 29, 2013)

Adding CPU randomness to the entropy pool (February 19, 2014)

A system call for random numbers: getrandom() (July 23, 2014)

Replacing /dev/urandom (May 4, 2016)

Waiting for entropy (June 6, 2017)

Initializing the entropy pool using RDRAND and friends (July 24, 2018)

Theoretical vs. practical cryptography in the kernel (August 13, 2020)

Random numbers and virtual-machine forks (March 11, 2022)

A vDSO implementation of getrandom() (January 6, 2023)

Another try for getrandom() in the vDSO (July 4, 2024)

What became of getrandom() in the vDSO (July 25, 2024)

SCSI command filtering

2.6.8 and CD recording (August 18, 2004)

SCSI command filtering (July 31, 2006)

seccomp

Seccomp and sandboxing (May 13, 2009)

Expanding seccomp (May 4, 2011)

Seccomp: replacing security modules? (May 16, 2011)

Seccomp filters: permission denied (May 25, 2011)

Seccomp filters: No clear path (July 7, 2011)

Yet another new approach to seccomp (January 11, 2012)

A library for seccomp filters (April 25, 2012)

Seccomp filters for multi-threaded programs (May 29, 2014)

Python bindings added for libseccomp 2.2.0 (March 4, 2015)

The inherent fragility of seccomp() (November 10, 2017)

Deferring seccomp decisions to user space (June 2, 2018)

vDSO, 32-bit time, and seccomp (August 2, 2019)

Deep argument inspection for seccomp (September 18, 2019)

PostgreSQL considers seccomp() filters (October 1, 2019)

Seccomp and deep argument inspection (June 10, 2020)

Emulating Windows system calls in Linux (June 25, 2020)

Constant-action bitmaps for seccomp() (October 22, 2020)

Seccomp user-space notification and signals (April 9, 2021)

eBPF seccomp() filters (May 31, 2021)

SA_IMMUTABLE and the hazards of messing with signals (December 17, 2021)

System-call interception for unprivileged containers (June 29, 2022)

Security modules

Stackable security modules (November 10, 2004)

Trustees Linux (November 16, 2004)

Merging the realtime security module (January 11, 2005)

Time to remove LSM? (May 31, 2005)

securityfs (September 27, 2005)

Complete coverage in Linux security modules (October 3, 2005)

Some trusted computing security modules (November 15, 2005)

Linux security non-modules and AppArmor (June 27, 2007)

Smack for simplified access control (August 8, 2007)

SMACK meets the One True Security Module (October 2, 2007)

LSM: loadable or static? (October 24, 2007)

The return of authoritative hooks (March 18, 2008)

TOMOYO Linux and pathname-based security (April 14, 2008)

Snet and the LSM API (January 28, 2009)

Restricting the network (January 6, 2010)

FBAC-LSM (January 13, 2010)

LSM stacking (again) (June 23, 2010)

Pathname-based hooks for SELinux? (December 8, 2010)

Supporting multiple LSMs (February 9, 2011)

Security modules and ioctl() (February 16, 2011)

Dcache scalability and security modules (April 27, 2011)

LSS: LSM roundtable (September 14, 2011)

Another LSM stacking approach (October 3, 2012)

The return of loadable security modules? (November 28, 2012)

KPortReserve and the multi-LSM problem (August 14, 2013)

Progress in security module stacking (March 11, 2015)

Writing your own security module (February 10, 2016)

The LoadPin security module (April 6, 2016)

Safename: restricting "dangerous" file names (May 11, 2016)

Sandboxing with the Landlock security module (October 19, 2016)

Process tagging with ptags (December 13, 2017)

The sidechannel LSM (August 21, 2018)

XFS, LSM, and low-level management APIs (October 2, 2018)

Kernel runtime security instrumentation (September 4, 2019)

LSM stacking and the future (November 20, 2019)

KRSI — the other BPF security module (December 27, 2019)

KRSI and proprietary BPF programs (January 17, 2020)

Impedance matching for BPF and LSM (February 26, 2020)

The integrity policy enforcement security module (April 16, 2020)

Handling brute force attacks in the kernel (March 17, 2021)

Landlock (finally) sets sail (June 17, 2021)

Security requirements for new kernel features (July 28, 2022)

A security-module hook for user-namespace creation (August 4, 2022)

Still waiting for stackable security modules (October 31, 2022)

Adding system calls for Linux security modules (January 4, 2023)

Disabling SELinux's runtime disable (April 20, 2023)

Unprivileged BPF and authoritative security hooks (April 27, 2023)

A change in direction for security-module stacking? (April 23, 2024)

Eliminating indirect calls for security modules (July 2, 2024)

Security technologies

x86 NX support (June 2, 2004)

Cryptographic signatures on kernel modules (July 7, 2004)

Defending against fork bombs (May 3, 2005)

Kernel Summit 2005: The ExecShield patches (July 19, 2005)

Rule set based access control (September 27, 2005)

The AppArmor debate begins (April 26, 2006)

Kernel Summit 2006: Security (July 19, 2006)

A bid to resurrect Linux capabilities (September 10, 2006)

File-based capabilities (November 29, 2006)

USB device authorization (July 17, 2007)

Credential records (September 25, 2007)

Kernel-based malware scanning (December 4, 2007)

Ksplice: kernel patches without reboots (April 29, 2008)

The TALPA molehill (August 6, 2008)

TALPA strides forward (August 27, 2008)

Followups: performance counters, ksplice, and fsnotify (December 17, 2008)

The future for grsecurity (January 7, 2009)

DazukoFS: a stackable filesystem for virus scanning (February 11, 2009)

The fanotify API (July 1, 2009)

Toward a saner execve() (March 30, 2010)

Extending the use of RO and NX (January 12, 2011)

Capabilities for loading network modules (March 2, 2011)

Fighting fork bombs (March 29, 2011)

Securely deleting files from ext4 filesystems (October 11, 2011)

Loading signed kernel modules (December 7, 2011)

Fixing the symlink race problem (December 14, 2011)

System call filtering and no_new_privs (January 18, 2012)

Supervisor mode access prevention (September 26, 2012)

The module signing endgame (November 21, 2012)

A proposal for "silent" port knocking (December 18, 2013)

Known-exploit detection for the kernel (December 18, 2013)

Supporting Intel MPX in Linux (January 29, 2014)

Reworking kexec for signatures (June 25, 2014)

Capsicum for Linux (July 2, 2014)

Memory protection keys (May 13, 2015)

Memory protection keys v5 (December 9, 2015)

Defending against Rowhammer in the kernel (October 28, 2016)

The status of kernel hardening (November 2, 2016)

ARM pointer authentication (April 5, 2017)

Grsecurity goes private (May 4, 2017)

Two topics in user-space access (March 5, 2019)

Hiding a process's executable from itself (January 23, 2023)

System calls

mseal() gets closer (January 19, 2024)

UEFI secure boot

Preparing the kernel for UEFI secure boot (September 6, 2012)

UEFI secure boot kernel restrictions (November 7, 2012)

Signing ELF binaries (January 16, 2013)

Loading keys from Microsoft PE binaries (February 27, 2013)

BSD-style securelevel comes to Linux — again (September 11, 2013)

Locking down module parameters (December 7, 2016)

Kernel lockdown in 4.17? (April 2, 2018)

Kernel lockdown locked out — for now (April 6, 2018)

The return of the lockdown patches (April 3, 2019)

Lockdown as a security module (June 24, 2019)

Much ado about SBAT (July 20, 2023)

Vulnerabilities

Subverting mremap() (January 6, 2004)

A new mremap() vulnerability (February 18, 2004)

TCP vulnerability: cancel red alert (April 21, 2004)

A nasty FPU bug (June 15, 2004)

Anatomy of a kernel vulnerability (December 15, 2004)

Linux kernel security (January 12, 2005)

A hole in PaX (March 9, 2005)

Is hyperthreading dangerous? (May 17, 2005)

A survey of recent kernel vulnerabilities (October 18, 2005)

Denial of reality vulnerabilities (July 12, 2006)

vmsplice(): the making of a local root exploit (February 12, 2008)

The rest of the vmsplice() exploit story (March 4, 2008)

Another Linux capabilities hole found (April 15, 2009)

A privilege escalation flaw in udev (April 22, 2009)

Linux ASLR vulnerabilities (April 29, 2009)

Fun with NULL pointers, part 1 (July 20, 2009)

Fun with NULL pointers, part 2 (July 21, 2009)

Another null pointer exploit (November 4, 2009)

The x86_64 DOS hole (February 2, 2010)

Another old security problem (September 8, 2010)

The hazards of 32/64-bit compatibility (September 22, 2010)

Kernel vulnerabilities: old or new? (October 19, 2010)

Structure holes and information leaks (December 1, 2010)

debugfs: rules not welcome (February 22, 2011)

RLIMIT_NPROC and setuid() (July 20, 2011)

A /proc/PID/mem vulnerability (January 25, 2012)

A story of three kernel vulnerabilities (February 19, 2013)

An unexpected perf feature (May 21, 2013)

An x32 local exploit (February 5, 2014)

A crypto module loading vulnerability (January 28, 2015)

Looking at a few recent kernel security holes (October 21, 2015)

Four new Android privilege escalations (August 10, 2016)

The case of the prematurely freed SKB (February 28, 2017)

Preventing stack guard-page hopping (June 19, 2017)

Ripples from Stack Clash (June 28, 2017)

Rethinking the Stack Clash fix (July 13, 2017)

unsafe_put_user() turns out to be unsafe (October 13, 2017)

The Thunderclap vulnerabilities (March 6, 2019)

Avoiding page reference-count overflows (April 16, 2019)

The TCP SACK panic (June 19, 2019)

Patching until the COWs come home (part 1) (March 22, 2021)

Patching until the COWs come home (part 2) (March 25, 2021)

The Sequoia seq_file vulnerability (July 21, 2021)

Handling argc==0 in the kernel (January 28, 2022)

What constitutes disclosure of a kernel vulnerability? (June 3, 2022)

Fingerprinting systems with TCP source-port selection (October 6, 2022)

May the FOLL_FORCE not be with you (July 26, 2024)

Seeking

Safely

Safe seeks (August 10, 2004)

SELinux

The lightweight auditing framework (April 7, 2004)

Kernel Summit 2006: Security (July 19, 2006)

Newer kernels and older SELinux policies (September 24, 2008)

Pathname-based hooks for SELinux? (December 8, 2010)

Disabling SELinux's runtime disable (April 20, 2023)

Semaphores

Time for a new semaphore type? (April 5, 2005)

Reworking the semaphore interface (December 14, 2005)

Semaphores and mutexes (December 20, 2005)

Goodbye semaphores? (January 3, 2006)

The mutex API (January 10, 2006)

Generic semaphores (March 17, 2008)

The big kernel lock strikes again (May 13, 2008)

Speculating on page faults (January 12, 2010)

The shrinking role of semaphores (April 7, 2023)

send_kevent()

A kernel events layer (July 27, 2004)

Figuring out kernel event reporting (September 8, 2004)

seq_file

A seq_file API tweak (November 8, 2005)

The Sequoia seq_file vulnerability (July 21, 2021)

Serial ATA

Big block transfers: good or bad? (March 29, 2004)

Big serial ATA changes (May 16, 2006)

set_fs()

A farewell to set_fs()? (May 10, 2017)

Saying goodbye to set_fs() (September 24, 2020)

splice() and the ghost of set_fs() (May 26, 2022)

set_fs_root()

The abrupt un-exporting of symbols (January 12, 2005)

Shared subtrees

Shared subtrees (November 8, 2005)

Mount namespaces and shared subtrees (June 8, 2016)

Mount namespaces, mount propagation, and unbindable mounts (June 15, 2016)

Shingled magnetic recording

LSFMM: A storage technology update (April 23, 2013)

Support for shingled magnetic recording devices (March 26, 2014)

Filesystem support for SMR devices (March 18, 2015)

signalfd()

Kernel events without kevents (March 13, 2007)

Signal handling

GCC 4.3.0 exposes a kernel bug (March 7, 2008)

SA_IMMUTABLE and the hazards of messing with signals (December 17, 2021)

VSTATUS, with or without SIGINFO (January 6, 2022)

skb_reserve()

On the alignment of IP packets (June 15, 2004)

Skiplists

A kernel skiplist implementation (Part 1) (May 30, 2013)

Skiplists II: API and benchmarks (June 12, 2013)

Slab allocator

The SLUB allocator (April 11, 2007)

Some snags for SLUB (December 28, 2007)

SLQB - and then there were four (December 16, 2008)

The SLEB allocator (May 19, 2010)

Slab allocator of the week: SLUB+Queuing (June 29, 2010)

Cramming more into struct page (August 28, 2013)

Toward a more efficient slab allocator (January 13, 2015)

sleep_on()

sleep_on() in 2.6. (January 27, 2004)

Slow work

The slow work mechanism (April 22, 2009)

Smatch

Smatch: pluggable static analysis for C (June 22, 2016)

Better types in C using sparse and smatch (August 10, 2016)

smbfs

On the future of smbfs (May 15, 2006)

Soft updates

Soft updates, hard problems (July 1, 2009)

Software suspend

Software Suspend 2.0 (February 4, 2004)

Which is the real software suspend? (March 16, 2004)

Software suspend: and then there were two (July 21, 2004)

Recent patches of interest (August 4, 2004)

Power management: looking for a direction (August 18, 2004)

Merging swsusp2 (December 1, 2004)

A pair of suspend2 patches (July 26, 2005)

A new path to the refrigerator (August 3, 2005)

User-space software suspend (September 26, 2005)

A software suspend decision point (November 16, 2005)

Two software suspend image writing patches (February 1, 2006)

Software suspend - again (February 6, 2006)

Kernel Summit 2006: Software suspend (July 18, 2006)

Yet another approach to software suspend (July 18, 2007)

A new suspend/hibernate infrastructure (March 19, 2008)

TuxOnIce: in from the cold? (May 13, 2009)

Supporting connected standby (January 15, 2014)

3.15 Merge window, part 2 (April 16, 2014)

A low-level hibernation bug hunt (September 28, 2016)

Hibernation in the cloud (May 25, 2020)

Solid-state storage devices

Block layer discard requests (August 12, 2008)

The trouble with discard (August 18, 2009)

Log-structured file systems: There's one in every SSD (September 18, 2009)

Solid-state storage devices and the block layer (October 4, 2010)

The best way to throw blocks away (December 1, 2010)

Optimizing Linux with cheap flash drives (February 18, 2011)

Future storage technologies and Linux (April 6, 2011)

Supporting block I/O contexts (June 18, 2012)

LFCS: Preparing Linux for nonvolatile memory devices (April 19, 2013)

Supporting solid-state hybrid drives (November 5, 2014)

Taking control of SSDs with LightNVM (April 22, 2015)

Sorting

Some more 2.6.12 API changes (March 16, 2005)

sparse

Finding kernel problems automatically (June 1, 2004)

Using sparse for endianness verification (October 25, 2006)

Sparse gets a maintainer (November 8, 2006)

Protecting private structure members (January 6, 2016)

Sparse: a look under the hood (June 8, 2016)

Spinlocks

Out-of-lining spinlocks (August 11, 2004)

Unified spinlock initialization (November 3, 2004)

Some 2.6.11 API changes (January 25, 2005)

The kernel lock validator (May 31, 2006)

Ticket spinlocks (February 6, 2008)

Realtime adaptive locks (March 5, 2008)

Atomic context and kernel API design (March 25, 2008)

A new realtime tree (December 9, 2008)

The realtime preemption endgame (August 5, 2009)

The realtime preemption mini-summit (September 28, 2009)

Eliminating rwlocks and IRQF_DISABLED (December 1, 2009)

Improving ticket spinlocks (January 3, 2013)

MCS locks and qspinlocks (March 11, 2014)

NUMA-aware qspinlocks (April 12, 2021)

User-space

1½ Topics: realtime throttling and user-space adaptive spinning (May 13, 2023)

User-space spinlocks with help from rseq() (September 22, 2023)

Deferred scheduling for user-space critical sections (October 27, 2023)

splice()

Circular pipes (January 11, 2005)

The evolution of pipe buffers (January 18, 2005)

Some new system calls (December 20, 2005)

Two new system calls: splice() and sync_file_range() (April 3, 2006)

tee() with your splice()? (April 11, 2006)

The splice() weekly news (April 24, 2006)

vmsplice(): the making of a local root exploit (February 12, 2008)

Copy offloading with splice() (September 18, 2013)

Some vmsplice() issues (March 26, 2014)

Toward a reverse splice() (May 1, 2019)

Rethinking splice() (February 17, 2023)

Stable pages

Notes from the block layer (February 22, 2011)

Stable pages (May 11, 2011)

The trouble with stable pages (March 13, 2012)

Optimizing stable pages (December 5, 2012)

LSFMM: Page forking (April 23, 2013)

Stack unwinder

The ORCs are coming (July 20, 2017)

Staging tree

A new kernel tree: linux-staging (June 11, 2008)

Moving the -staging tree (October 1, 2008)

News from the staging tree (September 9, 2009)

On the driver life cycle (October 13, 2009)

KS2009: Staging, linux-next, and the development process (October 21, 2009)

Staging drivers out (October 28, 2009)

Will staging lose its Lustre? (June 6, 2018)

What happens to kernel staging-tree code (September 5, 2019)

Staircase scheduler

The staircase scheduler (June 2, 2004)

Scheduler tweaks get serious (August 4, 2004)

The Rotating Staircase Deadline Scheduler (March 6, 2007)

RSDL hits a snag (March 14, 2007)

Static calls

Avoiding retpolines with static calls (March 26, 2020)

Static keys

very_unlikely() very unliked (February 29, 2012)

Storage management

Fanotify and hierarchical storage management (May 23, 2023)

Hierarchical storage management, fanotify, FUSE, and more (July 16, 2024)

String processing

Converting strings to integers (March 23, 2011)

The word-at-a-time interface (June 12, 2012)

Improving kernel string handling (May 6, 2015)

strscpy() and the hazards of improved interfaces (October 7, 2015)

Printbuf rebuffed for now (April 28, 2022)

Ushering out strlcpy() (August 25, 2022)

Better string handling for the kernel (October 26, 2023)

struct file_operations

A new file_operations method (March 24, 2004)

The end of the fcntl() method (August 18, 2004)

The file_operations structure gets smaller (May 3, 2024)

Sucker tree

Is the kernel development process broken? (March 9, 2005)

Some stable tree grumbles (July 17, 2013)

Swappiness parameter

2.6 swapping behavior (May 5, 2004)

Swimwear

Quote of the week (January 21, 2004)

swiotlb

DMA issues, part 2 (June 30, 2004)

What's holding up 2.6.14: two difficult bugs (October 18, 2005)

A better DMA memory allocator (March 10, 2008)

A security fix briefly breaks DMA (April 1, 2022)

A more dynamic software I/O TLB (August 24, 2023)

Symbolic links

Supporting deeper symbolic links (June 30, 2004)

Standards, the kernel, and Postfix (August 20, 2008)

Tightening security: not for the impatient (June 27, 2012)

The trouble with symbolic links (July 7, 2022)

Flags for fchmodat() (July 27, 2023)

sync_file_range()

Two new system calls: splice() and sync_file_range() (April 3, 2006)

synchronize_kernel()

API change: synchronize_kernel() deprecated (May 3, 2005)

Sysctl

The death and possible rebirth of sysctl() (October 18, 2006)

Re-deprecating sysctl() (August 29, 2007)

Removing binary sysctl (November 11, 2009)

Managing sysctl knobs with BPF (April 9, 2019)

Sysfs

Trimming down sysfs (February 4, 2004)

Safe sysfs support (February 11, 2004)

Driver core functions: GPL only (September 29, 2004)

A big set of driver core changes (June 21, 2005)

Nested classes (October 5, 2005)

Sysfs and a stable kernel ABI (February 22, 2006)

Some upcoming sysfs enhancements (March 7, 2006)

On the safety of the sysfs interfaces (April 5, 2006)

Toward a safer sysfs (April 9, 2007)

KS2007: The greater kernel ecosystem and user-space APIs (September 6, 2007)

Sysfs and namespaces (August 26, 2008)

A tour of /sys/devices (June 3, 2015)

Enforcing mount options for sysfs and proc (June 10, 2015)

Events layer

Figuring out kernel event reporting (September 8, 2004)

Moving module parameters

Recent patches of interest (August 4, 2004)

Syslets

Alternatives to fibrils (February 13, 2007)

Threadlets (February 27, 2007)

The return of syslets (May 30, 2007)

KS2007: Realtime and syslets (September 9, 2007)

sys_indirect() (November 19, 2007)

Simpler syslets (December 10, 2007)

LCA: A new approach to asynchronous I/O (January 27, 2009)

LSFMM: Reducing io_submit() latency (May 1, 2013)

sys_reiser4()

Looking at reiser4 (August 25, 2004)

System calls

read() and write() access checking (February 8, 2005)

Some new system calls (December 20, 2005)

Fun with file descriptors (June 4, 2007)

More fun with file descriptors (June 12, 2007)

sys_indirect() (November 19, 2007)

System call updates: indirect(), timerfd(), and hijack() (November 28, 2007)

Extending system calls (May 14, 2008)

System calls and rootkits (September 10, 2008)

The two sides of reflink() (May 5, 2009)

This week's reflink() API (May 19, 2009)

xstat() and fxstat() (June 30, 2010)

Limiting system calls via control groups? (October 19, 2011)

copy_range() (May 15, 2013)

Flags as a system call API design pattern (February 12, 2014)

Proper handling of unknown flags in system calls (February 26, 2014)

Anatomy of a system call, part 1 (July 9, 2014)

Anatomy of a system call, part 2 (July 16, 2014)

Non-blocking buffered file read operations (September 23, 2014)

The return of preadv2()/pwritev2() (January 6, 2016)

This is why we can't have safe cancellation points (April 13, 2016)

task_diag and statx() (May 4, 2016)

xstat() (May 4, 2016)

statx() v3 (November 30, 2016)

Rewiring x86 system-call dispatch (April 23, 2018)

Revisiting the MAP_SHARED_VALIDATE hack (June 29, 2018)

New system calls: pidfd_open() and close_range() (May 23, 2019)

clone3(), fchmodat4(), and fsinfo() (July 5, 2019)

System-call wrappers for glibc (September 19, 2019)

Grabbing file descriptors with pidfd_getfd() (January 9, 2020)

configfd() and shifting bind mounts (January 10, 2020)

process_madvise(), pidfd capabilities, and the revenge of the PIDs (January 21, 2020)

watch_mount(), watch_sb(), and fsinfo() (again) (February 24, 2020)

Filesystem-oriented flags: sad, messy and not going away (March 16, 2020)

Emulating Windows system calls in Linux (June 25, 2020)

Emulating Windows system calls, take 2 (July 17, 2020)

Rethinking fsinfo() (August 21, 2020)

Conventions for extensible system calls (September 8, 2020)

Gathering multiple system parameters in a single call (April 6, 2022)

trusted_for() bounces off the merge window (April 12, 2022)

Retrieving mount and filesystem information in user space (June 14, 2023)

Why glibc's fstat() is slow (September 14, 2023)

mseal() and what comes after (October 20, 2023)

listmount() and statmount() (November 10, 2023)

bdflush()

Bye-bye bdflush() (July 5, 2021)

cachestat()

Checking page-cache status with cachestat() (December 6, 2022)

chroot()

Unprivileged chroot() (March 15, 2021)

clone()

Namespaces in operation, part 2: the namespaces API (January 8, 2013)

Attaching file descriptors to processes with CLONE_FD (April 1, 2015)

Controlling shadow-stack allocation in clone3() (December 7, 2023)

close_range()

epoll_pwait2(), close_range(), and encoded I/O (November 20, 2020)

copy_file_range()

copy_file_range() (October 7, 2015)

Kernel quality control, or the lack thereof (December 7, 2018)

The Linux "copy problem" (May 29, 2019)

How useful should copy_file_range() be? (February 18, 2021)

execve()

Toward a saner execve() (March 30, 2010)

Toward a saner execve() (March 30, 2010)

Handling argc==0 in the kernel (January 28, 2022)

fchmodat()

Flags for fchmodat() (July 27, 2023)

fincore()

fincore() (January 27, 2010)

iopl()

Emulated iopl() (November 8, 2019)

kcmp()

Preparing for user-space checkpoint/restore (January 31, 2012)

LCE: Checkpoint/restore in user space: are we there yet? (November 20, 2012)

kcmp() breaks loose (February 11, 2021)

memfd_secret()

Keeping secrets in memfd areas (February 14, 2020)

Two address-space-isolation patches get closer (October 27, 2020)

memfd_secret() in 5.14 (August 6, 2021)

mmap()

Suppressing SIGBUS signals (June 25, 2021)

The shrinking role of ETXTBSY (August 19, 2021)

mshare()

Sharing page tables with mshare() (May 17, 2022)

Merging msharefs (May 22, 2024)

open()

The curious case of O_DIRECTORY|O_CREAT (March 27, 2023)

openat2()

Restricting path name lookup with openat2() (August 22, 2019)

Avoiding blocking file-name lookups (January 21, 2021)

Inheritable credentials for directory file descriptors (May 2, 2024)

pidfd_send_signal()

Toward race-free process signaling (December 6, 2018)

Rethinking race-free process signaling (April 4, 2019)

process_mrelease()

Hastening process cleanup with process_mrelease() (July 26, 2021)

process_vm_exec()

Running code within another process's address space (April 16, 2021)

quotactl_fd()

quotactl_path() becomes quotactl_fd() (June 14, 2021)

readfile()

Two new ways to read a file quickly (March 6, 2020)

ringbuffer()

A generic ring buffer for the kernel (June 6, 2024)

setns()

Namespaces in operation, part 2: the namespaces API (January 8, 2013)

signalfd()

Checkpoint/restore and signals (January 9, 2013)

unshare()

Namespaces in operation, part 2: the namespaces API (January 8, 2013)

Virtual

Implementing virtual system calls (October 15, 2014)

SystemTap

On DTrace envy (August 7, 2007)

Kernel markers (August 15, 2007)

A generic tracing interface (September 19, 2007)

File monitoring with Mortadelo and SystemTap (March 5, 2008)

More DTrace envy (July 2, 2008)

Tracing: no shortage of options (July 22, 2008)

A SystemTap update (January 21, 2009)

Tainting

Being honest with MODULE_LICENSE (April 27, 2004)

Tainting from user space (May 24, 2006)

TASK_KILLABLE

TASK_KILLABLE (July 1, 2008)

Tasklets

Eliminating tasklets (June 24, 2007)

Modernizing the tasklet API (September 14, 2020)

The end of tasklets (February 5, 2024)

Task watchers

Task watchers (November 7, 2006)

TCP

TCP window scaling and broken routers (July 7, 2004)

Linux and TCP offload engines (August 22, 2005)

TCP Fast Open: expediting web services (August 1, 2012)

tee()

tee() with your splice()? (April 11, 2006)

Textsearch

Some 2.6.13 API changes (July 12, 2005)

Thermal management

Tripping over trip points (August 7, 2007)

Telling the scheduler about thermal pressure (May 16, 2019)

Testing scheduler thermal properties for avionics (May 15, 2020)

Thrashing

Token-based thrashing control (August 4, 2004)

Threadlets

Threadlets (February 27, 2007)

Timekeeping

A new core time subsystem (January 26, 2005)

Virtual time (April 18, 2006)

Counting on the time stamp counter (November 13, 2006)

Pondering 2038 (August 14, 2013)

2038 is closer than it seems (May 21, 2014)

Leap-second issues, 2015 edition (June 17, 2015)

Kernel time APIs for Rust (March 2, 2023)

timerfd()

Kernel events without kevents (March 13, 2007)

timerfd() and system call review (August 14, 2007)

The new timerfd() API (September 25, 2007)

System call updates: indirect(), timerfd(), and hijack() (November 28, 2007)

Timer frequency

Boot-time clock frequency selection (December 14, 2004)

The dynamic tick patch (June 7, 2005)

How fast should HZ be? (August 2, 2005)

The state of the dynamic tick patch (August 31, 2005)

Timers

Deleting timers quickly (May 12, 2004)

A new kernel timer API (May 18, 2005)

A new approach to kernel timers (September 20, 2005)

On the merging of ktimers (October 19, 2005)

The high-resolution timer API (January 16, 2006)

The timer API: size or type safety? (December 5, 2006)

Deferrable timers (March 28, 2007)

High- (but not too high-) resolution timeouts (September 2, 2008)

Timer slack (January 12, 2010)

The trouble with the TSC (May 19, 2010)

Waking systems from suspend (March 2, 2011)

Greedy hrtimer expiration (October 4, 2011)

Timer slack for slacker developers (October 17, 2011)

Short sleeps suffering from slack (February 17, 2012)

Leaping seconds and looping servers (July 2, 2012)

The tick broadcast framework (November 26, 2013)

Deferrable timers for user space (February 26, 2014)

Reinventing the timer wheel (June 3, 2015)

Improving the kernel timers API (October 9, 2017)

Better CPU selection for timer expiration (November 7, 2022)

TOMOYO Linux

TOMOYO Linux and pathname-based security (April 14, 2008)

Tracing

On DTrace envy (August 7, 2007)

A generic tracing interface (September 19, 2007)

More DTrace envy (July 2, 2008)

Tracing: no shortage of options (July 22, 2008)

KS2008: Tracing (September 17, 2008)

Low-level tracing plumbing (September 30, 2008)

On the value of static tracepoints (April 28, 2009)

A lockless ring-buffer (July 8, 2009)

Fun with tracepoints (August 12, 2009)

Minimizing instrumentation impacts (December 9, 2009)

Uprobes: not quite there yet (January 20, 2010)

Using the TRACE_EVENT() macro (Part 1) (March 24, 2010)

Using the TRACE_EVENT() macro (Part 2) (March 31, 2010)

Using the TRACE_EVENT() macro (Part 3) (April 21, 2010)

ELC: Using LTTng (April 21, 2010)

Uprobes returns - again (May 11, 2010)

One ring buffer to rule them all? (May 26, 2010)

Statistics and tracepoints (August 24, 2010)

Conditional tracepoints (November 30, 2010)

Using KernelShark to analyze the real-time scheduler (February 2, 2011)

Uprobes: 11th time is the charm? (March 16, 2011)

KS2011: Tracing for large-scale data centers (October 24, 2011)

LTTng rejection, next generation (December 14, 2011)

LTTng 2.0: Tracing for power users and developers - part 1 (April 11, 2012)

LTTng 2.0: Tracing for power users and developers - part 2 (April 18, 2012)

Uprobes in 3.5 (May 30, 2012)

Ktap — yet another kernel tracer (May 22, 2013)

Ktap almost gets into 3.13 (November 6, 2013)

Adding Processor Trace support to Linux (July 1, 2015)

Inter-event tracing (February 15, 2017)

Notes from the LPC tracing microconference (September 21, 2017)

KernelShark releases version 1.0 (July 31, 2019)

Unifying kernel tracing (October 30, 2019)

How to unbreak LTTng (April 20, 2020)

User events — but not quite yet (April 18, 2022)

User trace events, one year later (April 3, 2023)

ABI issues

TRACE_EVENT_ABI (September 30, 2009)

KS2010: ABI status for tracepoints (November 2, 2010)

Ftrace, perf, and the tracing ABI (May 11, 2011)

Tracepoint challenges (November 2, 2016)

Another attempt to address the tracepoint ABI problem (October 27, 2017)

Dynamic function tracing events (February 15, 2018)

Ftrace

Dynamic probes with ftrace (July 28, 2009)

Debugging the kernel using Ftrace - part 1 (December 9, 2009)

Debugging the kernel using Ftrace - part 2 (December 22, 2009)

Secrets of the Ftrace function tracer (January 20, 2010)

trace-cmd: A front-end for Ftrace (October 20, 2010)

Ftrace: The hidden light switch (August 13, 2014)

Ftrace and histograms: a fork in the road (March 4, 2015)

Accurate timestamps for the ftrace ring buffer (September 22, 2020)

Last branch records

An introduction to last branch records (March 23, 2016)

Advanced usage of last branch records (March 30, 2016)

with BPF

BPF tracing filters (December 4, 2013)

Ktap or BPF? (April 23, 2014)

Tracepoints with BPF (April 13, 2016)

Using user-space tracepoints with BPF (May 11, 2018)

Kernel analysis with bpftrace (July 18, 2019)

Type checking for BPF tracing (October 28, 2019)

Relief for insomniac tracepoints (October 29, 2020)

Transactional memory

Transactional memory in the dentry cache (October 2, 2013)

Scalability techniques (October 29, 2013)

Transcendent memory

Transcendent memory (July 8, 2009)

Cleancache and Frontswap (May 4, 2010)

zcache: a compressed page cache (July 27, 2010)

Transcendent memory in a nutshell (August 12, 2011)

Frontswap gets broadsided (November 2, 2011)

The zsmalloc allocator (January 25, 2012)

The zswap compressed swap cache (February 12, 2013)

In-kernel memory compression (April 3, 2013)

LSFMM: In-kernel memory compression (April 23, 2013)

Merging zswap (May 22, 2013)

Compressed swap (March 26, 2014)

Translation table maps (TTM)

Memory management for graphics processors (November 6, 2007)

GEM v. TTM (May 28, 2008)

LPC: The future of Linux graphics (September 24, 2008)

Trapfs

Trapfs - an automounter on the cheap (November 3, 2004)

Triggers

Triggers: less busy busy-waiting (August 18, 2008)

Trusted computing

OLS: Linux and trusted computing (July 22, 2005)

Some trusted computing security modules (November 15, 2005)

TSC

Counting on the time stamp counter (November 13, 2006)

TTY layer

A tempest in a tty pot (July 29, 2009)

The need for TTY slave devices (September 14, 2016)

An alternative TTY layer (April 27, 2017)

UBIFS

UBIFS (April 2, 2008)

udev

The future of device numbers (January 6, 2004)

The return of devfs (May 6, 2009)

The udev tail wags the dog (August 24, 2011)

Udev and firmware (October 10, 2012)

Slow probing + udev + SIGKILL = trouble (September 9, 2014)

Systemd catches up with bind events (November 13, 2020)

UDPCP

How not to get a protocol implementation merged (January 12, 2011)

umwait

Short waits with umwait (June 13, 2019)

uninitialized_var()

Removing uninitialized_var() (December 19, 2012)

Unionfs

Unionfs (January 10, 2007)

State of the unionfs (January 15, 2008)

Unioning file systems: Implementations, part 2 (April 7, 2009)

Union mounts

Unifying filesystems with union mounts (December 24, 2008)

Union file systems: Implementations, part I (March 25, 2009)

Unioning file systems: Implementations, part 2 (April 7, 2009)

A brief history of union mounts (July 14, 2010)

unshare()

A system call for unsharing (May 10, 2005)

Some new system calls (December 20, 2005)

The last-minute unshare() discussion (March 21, 2006)

execns() (July 11, 2006)

Uprobes

Uprobes: not quite there yet (January 20, 2010)

Uprobes returns - again (May 11, 2010)

Uprobes: 11th time is the charm? (March 16, 2011)

Uprobes in 3.5 (May 30, 2012)

USB

Dynamic USB device IDs (November 21, 2005)

Putting a lid on USB power (June 5, 2006)

USB device authorization (July 17, 2007)

The USB composite framework (July 14, 2010)

USB charging, part 1: requirements (July 7, 2016)

USB charging, part 2: implementation (July 13, 2016)

__user

Finding kernel problems automatically (June 1, 2004)

userfaultfd()

Page faults in user space: MADV_USERFAULT, remap_anon_range(), and userfaultfd() (October 7, 2014)

User-space page fault handling (March 11, 2015)

The next steps for userfaultfd() (March 29, 2017)

Write-protect for userfaultfd() (May 2, 2019)

Blocking userfaultfd() kernel-fault handling (May 8, 2020)

Preserving guest memory across kexec (May 20, 2022)

/dev/userfaultfd (June 13, 2022)

An ioctl() call to detect memory writes (August 10, 2023)

User-managed concurrency groups

Kernel topics on the radar (August 2, 2021)

User-managed concurrency groups (December 28, 2021)

User-mode Linux

Kernel Summit: Virtualization support (July 21, 2004)

OLS: Xen and UML (July 23, 2005)

Book Review: User Mode Linux (May 16, 2006)

User-space API

Kernel Summit 2006: The user-space API (July 18, 2006)

Application-friendly kernel interfaces (March 26, 2007)

timerfd() and system call review (August 14, 2007)

KS2007: The greater kernel ecosystem and user-space APIs (September 6, 2007)

The new timerfd() API (September 25, 2007)

System calls and 64-bit architectures (December 17, 2008)

Extended error reporting (February 17, 2010)

The hazards of 32/64-bit compatibility (September 22, 2010)

The x32 system call ABI (August 29, 2011)

The UAPI header file split (July 25, 2012)

EPOLL_CTL_DISABLE and multithreaded applications (October 17, 2012)

A kernel change breaks GlusterFS (March 27, 2013)

Anatomy of a system call, part 1 (July 9, 2014)

Design

EPOLL_CTL_DISABLE, epoll, and API design (October 23, 2012)

Error reporting

Making EPERM friendlier (January 19, 2013)

Extended system call error reporting (September 16, 2015)

Testing

KS2012: Regression testing (August 30, 2012)

LCA: The Trinity fuzz tester (February 6, 2013)

UTF-8 encoding

The kernel and character set encodings (February 18, 2004)

Case-insensitive ext4 (March 27, 2019)

Utrace

Introducing utrace (March 7, 2007)

The return of utrace (March 25, 2009)

Another mainline push for utrace (December 2, 2009)

Uprobes: not quite there yet (January 20, 2010)

Back to the drawing board for utrace? (January 27, 2010)

Replacing ptrace() (January 27, 2010)

v9fs

A filesystem from Plan 9 space (May 25, 2005)

Variable-length arrays

Variable-length arrays and the max() mess (March 12, 2018)

Safer flexible arrays for the kernel (September 22, 2022)

Documenting counted-by relationships in kernel data structures (July 3, 2023)

vDSO

On vsyscalls and the vDSO (June 8, 2011)

Implementing virtual system calls (October 15, 2014)

vDSO, 32-bit time, and seccomp (August 2, 2019)

Vectored I/O

Asynchronous I/O and vectored operations (February 7, 2006)

API changes: interrupt handlers and vectored I/O (October 2, 2006)

Video4Linux2

The Video4Linux2 API: an introduction (October 11, 2006)

Video4Linux2 part 2: registration and open() (October 18, 2006)

Video4Linux2 part 3: Basic ioctl() handling (October 30, 2006)

Video4Linux2 part 4: inputs and outputs (December 13, 2006)

Video4Linux2 part 5a: colors and formats (January 24, 2007)

Video4Linux2 part 5b: format negotiation (March 23, 2007)

Video4Linux2 part 6a: Basic frame I/O (May 18, 2007)

Video4Linux2 part 6b: Streaming I/O (July 5, 2007)

Video4Linux2 part 7: Controls (August 31, 2007)

On the management of the Video4Linux subsystem tree (February 24, 2009)

Video buffer pools (September 16, 2009)

Videobuf: buffer management for V4L2 drivers (November 23, 2009)

The end for Video4Linux1 (March 24, 2010)

2.6.35 Video4Linux2 enhancements (May 25, 2010)

The media controller subsystem (November 16, 2010)

The videobuf2 API (June 14, 2011)

Giving Rust a chance for in-kernel codecs (April 26, 2024)

Virtualization

Kernel Summit: Virtualization support (July 21, 2004)

Kernel Summit 2005: Virtualization (July 19, 2005)

OLS: Xen and UML (July 23, 2005)

SMP alternatives (December 14, 2005)

The VMI virtualization interface (March 15, 2006)

Virtual time (April 18, 2006)

Kernel Summit 2006: Paravirtualization and containers (July 19, 2006)

Connecting Linux to hypervisors (August 8, 2006)

Resource beancounters (August 29, 2006)

Guest page hinting (September 6, 2006)

/dev/ksm: dynamic memory sharing (November 12, 2008)

KSM tries again (April 28, 2009)

AlacrityVM (August 5, 2009)

Memory management for virtualization (April 7, 2010)

Unmapped page cache control (December 13, 2010)

Directed yield (December 15, 2010)

Safe device assignment with VFIO (January 3, 2012)

VMX virtualization runs afoul of split-lock detection (April 7, 2020)

Bao: a lightweight static partitioning hypervisor (May 20, 2020)

Extended attributes for special files (September 9, 2021)

Random numbers and virtual-machine forks (March 11, 2022)

Preserving guest memory across kexec (May 20, 2022)

Live migration of virtual machines over CXL (May 15, 2023)

Containers

Containers and PID virtualization (January 17, 2006)

PID virtualization: a wealth of choices (February 8, 2006)

Containers and lightweight virtualization (April 10, 2006)

Virtualization: now what? (May 22, 2006)

execns() (July 11, 2006)

Another container implementation (September 19, 2006)

Network namespaces (January 30, 2007)

Process containers (May 29, 2007)

Process IDs in a multi-namespace world (November 6, 2007)

Freezing filesystems and containers (June 25, 2008)

Divorcing namespaces from processes (March 3, 2010)

Namespace file descriptors (September 29, 2010)

Running distributions in containers (October 12, 2011)

LCE: The failure of operating systems and how we can fix it (November 14, 2012)

Quickly: Filesystems and containers / Self-encrypting drives (April 27, 2016)

Jailhouse

Understanding the Jailhouse hypervisor, part 1 (January 1, 2014)

Understanding the Jailhouse hypervisor, part 2 (January 7, 2014)

KVM

Patch summary: regulatory domains, network channels, and virtualization (October 25, 2006)

Some KVM developments (January 9, 2007)

KVM 15 (February 26, 2007)

KVM, QEMU, and kernel project management (March 23, 2010)

The native KVM tool (April 12, 2011)

Merging the kvm tool (August 23, 2011)

No kvmtool in the mainline (February 20, 2013)

Supporting KVM on the ARM architecture (July 3, 2013)

Realtime KVM (September 10, 2015)

Why RISC-V doesn't (yet) support KVM (May 20, 2021)

Private memory for KVM guests (April 7, 2022)

Direct host system calls from KVM (July 29, 2022)

Lguest

An introduction to lguest (January 23, 2007)

Library mode

Running the kernel in library mode (April 8, 2015)

Network

Routing Open vSwitch into the mainline (November 30, 2011)

virtio

An API for virtual I/O: virtio (July 11, 2007)

Standardizing virtio (January 15, 2014)

A filesystem for virtualization (May 14, 2019)

Virtio without the "virt" (November 22, 2019)

Hardening virtio (August 9, 2021)

Xen

Xen is coming (November 22, 2004)

The Xen patches (May 10, 2006)

Xen: finishing the job (March 4, 2009)

Xen again (June 3, 2009)

vmalloc()

Reworking vmap() (October 21, 2008)

Virtually mapped kernel stacks (June 22, 2016)

A pair of memory-allocation improvements in 5.13 (May 6, 2021)

Some upcoming memory-management patches (November 12, 2021)

The BPF allocator runs into trouble (April 29, 2022)

vm_insert_page()

The evolution of driver page remapping (December 6, 2005)

vmsplice()

The splice() weekly news (April 24, 2006)

Briefly: patch quality, CKRM, likely(), and vmsplice() (May 3, 2006)

Some vmsplice() issues (March 26, 2014)

VM_UNPAGED

PG_reserved, VM_RESERVED, and VM_UNPAGED (November 22, 2005)

The evolution of driver page remapping (December 6, 2005)

volatile

The trouble with volatile (May 9, 2007)

ACCESS_ONCE() (August 1, 2012)

Volatile ranges

POSIX_FADV_VOLATILE (November 22, 2011)

Volatile ranges with fallocate() (June 5, 2012)

KS2012: memcg/mm: Volatile ranges (September 17, 2012)

Many more words on volatile ranges (November 5, 2012)

LSFMM: Coprocessors, exit times, and volatile ranges, and more (April 23, 2013)

Volatile ranges and MADV_FREE (March 19, 2014)

Volatile ranges (March 26, 2014)

The volatile volatile ranges patch set (June 18, 2014)

Voluntary preemption

Addressing latency problems in 2.6 (July 14, 2004)

Voluntary preemption and hardware interrupts (July 27, 2004)

Scheduler tweaks get serious (August 4, 2004)

Update from the latency front (August 18, 2004)

Approaches to realtime Linux (October 12, 2004)

Optimizing preemption (August 14, 2013)

vringfd()

vringfd() (April 7, 2008)

Wait queues

Filtered wakeups (May 5, 2004)

Simple wait queues (December 18, 2013)

The return of simple wait queues (October 21, 2015)

Warnings

What to do in response to a kernel warning (November 18, 2021)

Warning about WARN_ON() (April 18, 2024)

Wayland and Weston

XDC2012: Graphics stack security (September 25, 2012)

Web sites

Two new web sites (October 11, 2005)

Window scaling

TCP window scaling and broken routers (July 7, 2004)

Windows Management Instrumentation (WMI)

Writing a WMI driver - an introduction (June 8, 2010)

User-space access to WMI functions (June 19, 2017)

Wireless extensions

Reworking the wireless extensions (June 23, 2004)

Linux and wireless networking (January 11, 2006)

The 2006 Wireless Networking Summit (April 10, 2006)

Kernel Summit 2006: Mini-summit summaries (July 18, 2006)

The final wireless extension? (October 4, 2006)

Haunted by ancient history (January 6, 2015)

Word-at-a-time

The word-at-a-time interface (June 12, 2012)

Workqueues

Single-threaded workqueues (April 28, 2004)

Recent patches of interest (August 4, 2004)

Some 2.6.12 API changes (March 8, 2005)

A pair of suspend2 patches (July 26, 2005)

Workqueues and internal API conventions (August 29, 2006)

Workqueues get a rework (November 27, 2006)

Eliminating tasklets (June 24, 2007)

Concurrency-managed workqueues (October 7, 2009)

Turbulence for concurrency-managed workqueues (December 23, 2009)

Concurrency-managed workqueues and thread priorities (June 22, 2010)

Working on workqueues (September 7, 2010)

Making workqueues non-reentrant (August 15, 2012)

Power-efficient workqueues (August 18, 2017)

Redesigned workqueues for io_uring (October 25, 2019)

A pair of workqueue improvements (July 7, 2023)

The end of tasklets (February 5, 2024)

Lazy

In brief (August 26, 2009)

Write barriers

The return of write barriers (March 24, 2004)

Some block layer patches (October 26, 2005)

Barriers and journaling filesystems (May 21, 2008)

The end of block barriers (August 18, 2010)

Write throttling

Predictive per-task write throttling (September 21, 2005)

Smarter write throttling (August 14, 2007)

Writeout throttling (December 11, 2007)

No-I/O dirty throttling (August 31, 2011)

x32

The x32 system call ABI (August 29, 2011)

An x32 local exploit (February 5, 2014)

x86_64

Files with negative offsets (May 31, 2005)

i386 and x86_64: back together? (July 31, 2007)

KS2007: Hardware support and the i386/x86_64 merger (September 6, 2007)

XArray

The XArray data structure (January 24, 2018)

XArray and the mainline (June 13, 2018)

Xen

Xen is coming (November 22, 2004)

alloc_skb_from_cache() (January 4, 2005)

Toward the merging of Xen (March 2, 2005)

Kernel Summit 2005: Virtualization (July 19, 2005)

OLS: Xen and UML (July 23, 2005)

The Xen patches (May 10, 2006)

Connecting Linux to hypervisors (August 8, 2006)

Xen: finishing the job (March 4, 2009)

Xen again (June 3, 2009)

xgetdents()

Two paths to a better readdir() (July 30, 2014)

Year 2038 problem

Pondering 2038 (August 14, 2013)

2038 is closer than it seems (May 21, 2014)

Year 2038 preparations in 3.17 (August 6, 2014)

System call conversion for year 2038 (May 5, 2015)

Lightning talks (November 4, 2015)

Heading toward 2038-safe filesystems (January 21, 2016)

2038: only 21 years away (March 15, 2017)

Year-2038 work in 4.18 (June 11, 2018)

Approaching the kernel year-2038 end game (January 11, 2019)

Zero page

Some ado about zero (July 7, 2009)

Adding a huge zero page (September 26, 2012)

zswap

The zswap compressed swap cache (February 12, 2013)

In-kernel memory compression (April 3, 2013)

LSFMM: In-kernel memory compression (April 23, 2013)

Merging zswap (May 22, 2013)

Compressed swap (March 26, 2014)


Copyright © 2024, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds