aboutsummaryrefslogtreecommitdiffstats
This repository contains formal TLA+ specs of different algorithms used
in the Linux kernel.

The recommended way to enable the checking of these specs is to use the
TLA+ wrapper scripts:

  $ git clone https://github.com/pmer/tla-bin.git
  $ ./download_or_update_tla.sh
  $ ./install.sh $PREFIX

The TLA+ Tools can also be downloaded directly from:

  https://lamport.azurewebsites.net/tla/tools.html

A Java runtime is required.

asidalloc.tla
-------------

Model of the ASID allocator used by the arm64 kernel port (and arm):
arch/arm64/mm/context.c

To run a full check of the current configuration:

  ./check.sh asidalloc

Note that, depending on your hardware, it may take over two days to
complete in the current configuration. You can reduce the number of
tasks in asidalloc.cfg (4 tasks should complete in less than an hour).

To run in simulation mode (quicker at finding bugs but it may not
explore all corner cases):

  ./check.sh asidalloc -simulate -depth 300

qrwlock.tla
-----------

Model of the queued read-write locks implemented in the kernel. The
model is generic and avoids specific architecture instructions (e.g.
LDXR/STXR or LDADD as on arm64).

ticketlock.tla
--------------

Model of the ticket spinlock implementation as on arm64 but avoiding
specific arm64 instructions.

ctxsw.tla
---------

Model of the Linux kernel context_switch() function together with
exit_mm() and exec_mmap(), aimed at checking the mm_struct.mm_users and
mm_count handling.

qspinlock.tla
-------------

Model of the Linux queued spinlock implementation, modified to avoid
cmpxchg() loops which cannot guarantee forward progress.

arm64kpti.tla
-------------

Model of the arm64 Linux KPTI support, checking the TLB separation
(page table and ASIDs) between user, kernel, EFI mapping and idmap.

fpsimd.tla
----------

Model of the FPSIMD/SVE register state saving and restoring.