the lay of the land: IBM Z (s390x) · @martinthebad
c64.jpg ─ □ ✕
thank you
bannerz.sys ─ □ ✕
libre culture open source it all make art encrypt everything junkerz
nav.exe ─ □ ✕
20260529 the lay of the land: IBM Z (s390x)

The lay of the land on s390

Following on from the mailing list setup. I have been away from kernel work for about a year, so before writing a line of anything I wanted to get current on where s390 actually is. The prospect that interests me here is IBM Z, so this first one is just me re-drawing the map.

Why s390 is its own world

IBM Z is the 64-bit z/Architecture mainframe. In the kernel it is called s390 for historical reasons, and since 4.1 only the 64-bit s390x variant is supported. A few things make it unlike every other Linux arch, and they are exactly the things that bite a returning developer:

  • Big-endian. The opposite of x86 and ARM. If something works on x86 and breaks on s390, the first thing to check is byte-order assumptions and the __be32 / __le32 annotations.
  • Channel I/O, not PCI. Instead of a PC bus it uses CCW programs and subchannels. PCI exists as zPCI, virtualised through firmware. Do not map x86 DMA ideas straight across.
  • IPL, not BIOS. There is no BIOS. Boot is via IPL (Initial Program Load), and the entry code lives in arch/s390/boot/.
  • You are always virtualised. A hardware hypervisor called PR/SM carves the machine into LPARs, and then z/VM or KVM sits on top of that. You are at least one layer deep before Linux even starts.
  • Protected Virtualization. Encrypted guest memory protected from the host, enabled by the Ultravisor firmware layer. The same idea as AMD SEV or Intel TDX, but built differently.

The tree layout

Where the s390 code lives, so I can navigate without grep flailing:

arch/s390/
  boot/        # IPL (boot) code
  kernel/      # traps, signals, SMP, topology, entry.S
  kvm/         # KVM host implementation, SIE handling
  mm/          # DAT, page table management
  pci/         # zPCI subsystem
  crypto/      # CPACF hardware crypto offload
drivers/s390/  # DASD, QDIO, 3270, ctcm drivers

The subsystem maintainers are at the IBM Linux Technology Center in Boeblingen, and the main list is linux-s390@vger.kernel.org. KVM patches also go through kvm@vger.kernel.org, both of which I am already watching in neomutt from the last post.

What is actually active right now

Two things stand out as of May 2026, and each gets its own post:

  • ARM64 KVM on s390. A 27-patch RFC to run hardware-accelerated ARM64 guests on a mainframe, using a new chip instruction. IBM and Arm working together. This is the headline.
  • Rust on s390. The first patches to bring in-kernel Rust to s390, which would make it the sixth architecture with Rust support.

Testing without a mainframe

I do not have an IBM Z under the desk, and I do not need one to start. The options:

  • qemu-system-s390x emulates a zSeries machine and covers most kernel dev and testing.
  • The IBM Z Development Cloud, via the Open Mainframe Project, gives community access to real s390x hardware.
  • The Hercules emulator is older but still fine for basic testing.

The catch: QEMU does not fully emulate the SIE instruction set, so actual KVM work eventually needs real hardware or the cloud. For everything else QEMU is enough. A minimal boot is just:

qemu-system-s390x -M s390-ccw-virtio -m 1G -kernel arch/s390/boot/bzImage

And to make sure a patch goes to the right people:

./scripts/get_maintainer.pl arch/s390/

That is the map redrawn. Next week, the ARM64-on-s390 work, which is the most interesting thing happening on this platform in years.

Worth reading to get current: the LWN piece on the ARM64 KVM RFC and IBM's monthly LinuxONE open source reports.

← the first post all posts next: arm64 guests on a mainframe →

Tune in next time. Same Bat time. Same Bat channel
gb.log
Guestbook
rollin.ini ─ □ ✕
solarpunk.bat ─ □ ✕
garden wizard