diff --git a/doc/design/cold-boot.md b/doc/design/cold-boot.md index 88e916fce..c1fcbf3cb 100644 --- a/doc/design/cold-boot.md +++ b/doc/design/cold-boot.md @@ -53,7 +53,7 @@ flowchart LR Low["Low RAM
0x00000000 through 0xbfffffff
up to 3 GiB"] Gap["Fixed MMIO gap
0xc0000000 through 0xffffffff
1 GiB"] High["High RAM
0x100000000 and above"] - Slots["Reserved virtio-mmio slots
0xd0000000 through 0xd0007fff"] + Slots["Reserved virtio-mmio slots
0xd0000000 through 0xd0008fff"] Low --- Gap Gap --- High @@ -95,12 +95,14 @@ tokens. A fresh boot then appends host-owned tokens in this order: 2. the optional fixed workload identity (`nvx_workload_uid=` and `nvx_workload_gid=`) and workload lifecycle (`nvx_lifecycle=`); 3. `nvx_snapshot_tier=` for a capture with sandbox blocks; -4. device-discovery tokens in fixed address order: network, filesystem, boot - console, sandbox blocks, and the control console followed by - `nvx_control_tty=hvc2`; and +4. device-discovery tokens in fixed address order: network, the first + filesystem slot, boot console, sandbox blocks, the control console followed + by `nvx_control_tty=hvc2`, and the second filesystem slot when a second + HostFs export is attached; and 5. network bootstrap tokens, including gateway DNS only when the egress - policy permits it, followed by filesystem bootstrap tokens for an active - HostFs export. + policy permits it, followed by + [filesystem bootstrap tokens](machine-and-device-abi.md#filesystem) for + each attached HostFs export, in slot order. The command line carries no clock parameter: the guest reads its TSC and LAPIC rates from the [time ABI](time-abi.md#rates) MSRs, and a @@ -117,3 +119,13 @@ Embedded NULs are rejected, and the complete NUL-terminated command line must fit in 64 KiB. The same effective string and its SHA-256 digest become part of the snapshot machine contract; a restore reuses that string verbatim and appends no tokens. + +The `nvx_overlay_upper` caller token changes the accepted block layout. +Passing `nvx_overlay_upper=ramfs` exactly once declares that the guest keeps +its overlay upper in RAM. The microVM then requires exactly one read-only +`distro` [sandbox block](machine-and-device-abi.md#fixed-virtio-mmio-transport) +and no other block, so the guest has no writable scratch. This layout supports +neither snapshot capture nor restore. Any other `nvx_overlay_upper` token, +including a bare or repeated one, is rejected. The NVX init agent does not use +this layout; it +[keeps its overlay upper on scratch](sandbox-filesystem-and-agent-architecture.md#implemented-filesystem-bootstrap).