Private tier: pin cda5b9a49f also verifies at illumos 7e802e88a3 #7

Merged
toasterson merged 2 commits from g1-gate-pin into main 2026-10-05 16:34:55 +00:00
Owner

Anima work item: G1 01a0f419-b3aa-71f2-8662-d6a471e52225

Stacked on #6 (r4-virtio).

The Hephaistos test guest was refreshed to current OpenIndiana Hipster: golden-20260930.qcow2, osnet-incorporation 0.5.11-2026.0.0.23295, kernel illumos-7e802e88a3. This PR records that the private-tier pin cda5b9a49f also verifies against that kernel, so no second pin feature (unstable-gate-7e802e88a3) is needed. It also documents the one behaviour change a virtio driver can see.

kernel-check at illumos 7e802e88a3

cargo xtask kernel-check --emit | guest mdb -k | cargo xtask kernel-check --verify - ran on the guest, with misc/virtio loaded by vioblk and misc/gld modloaded for the check:

Crate Sizes Offsets Symbols
ddi-sys 53/60 185/185 984/984 (ddi_ncpus_expected is now in the kernel)
ddi-mac-sys 23/26 52/52 30/30
ddi-scsa-sys 16/20 87/103 80/80
ddi-usba-sys 26/29 126/134 65/65
ddi-neti-sys 7/7 30/30 34/34
ddi-ksensor-sys 3/3 7/7 6/6
ddi-pcmcia-sys 68/84 175/201 83/83
ddi-gld-sys 7/7 41/41 14/14
ddi-ktest-sys not checked 0/16 (drv/ktest is not packaged for OpenIndiana)
illumos-kernel-private-sys 2/2 21/21 13/13
illumos-kernel-private-virtio-sys 1/1 0/0 48/48

Nothing disagreed. Every count below the total is a type that CTF cannot name, as in the earlier runs. The 16 errors are the ktest symbols.

Log: logs/hephaistos/illumos-drm/20260930-g1-kernel-check.log (illumos workspace).

Gate diff cda5b9a49f..7e802e88a3 of the cited files

  • illumos-kernel-private-sys: no cited file changed. xtask lint-man --gate against a 7e802e88a3 checkout reports 0 errors for its citations.
  • illumos-kernel-private-virtio-sys:
    • virtio.h gained virtio_queue_share_interrupt, virtio_queue_pending, virtio_queue_intr_handle and virtio_interrupts_type. They are not bound.
    • virtio_spec.h gained VIRTIO_F_RING_EVENT_IDX.
    • No existing declaration changed. The cited lines moved, so 56 of the 59 virtio citations report as moved against 7e802e88a3. They stay checked against cda5b9a49f: 0 errors there. This is as DESIGN.md §4 already says.
  • Behaviour: since 433e6bede6 the framework negotiates VIRTIO_F_RING_EVENT_IDX when the device offers it. virtio-gpu now runs with features 0x130000003 (at cda5b9a49f: 0x110000003). The device then interrupts for a queue again only after a poll has found the queue empty. The wrapper already hands every signalled queue to a task that polls until None. However, its module doc claimed that "the next interrupt" picks up a queue whose task-queue dispatch failed, and that is no longer guaranteed; the second commit corrects it (VirtioDev::process does). No panic is involved, so the panic-to-type rule does not apply.

Guest regression on the new kernel (illumos-drm r4-virtio-gpu 55d8e60)

The modules were built with cargo xtask build and are byte-identical to r4-run6's (rdrmnull.a db95a2fe…, virtio_gpu.a 3f6d912c…). They ran on a fresh overlay with virtio-gpu-gl-pci + egl-headless and the default transitional virtio disk.

  • run-r4-test.sh: PASS, 74 checks, drm_r4_test 63/0. Detach: 19504 requests, 0 failed, 0 timeouts, 0 resources left. Gate bug 18358 is fixed at this kernel: virtio_gpu attaches on its modern interface next to the default disk, so disable-modern=on is no longer needed.
  • run-r3-test.sh: fail=0.
  • run-r1-test.sh (R0, R1, R2): drm_r2_test 188/0, and every other test passed, but the script reported fail=1 twice: "no detach(9E) refusal was logged". The refusal was logged with the same timestamp. It reached /var/adm/messages after the script's immediate grep, while the NOTICE emitted just before it had already arrived. With a 2 s pause before that grep (a guest-local copy of the script) the run gives fail=0. The two-device run (rdrmnull-two.conf) passed unmodified (198/0, fail=0). The syslog path has no gate change between the two commits outside panic context. This is a timing race in the test script, not a kernel difference.

Logs, all in logs/hephaistos/illumos-drm/: 20260930-g1-r4-driver.log, 20260930-g1-regression-r1{,-rerun,-sleep2}.log, 20260930-g1-regression-r3.log, 20260930-g1-regression-r2-two.log.

Local checks

  • cargo fmt --check: passes.
  • cargo clippy -D warnings: passes for the workspace and for the private features.
  • cargo doc -D warnings: passes for both.
  • cargo test -p ddi (lib: 13 passed; doc on the illumos target: 27 passed, 7 ignored).
  • lint-man --gate cda5b9a49f: 0 private errors. The one public error, ddi_ncpus_expected(9F), has no page at that commit, the same as on r4-virtio.
Anima work item: G1 `01a0f419-b3aa-71f2-8662-d6a471e52225` Stacked on #6 (`r4-virtio`). The Hephaistos test guest was refreshed to current OpenIndiana Hipster: `golden-20260930.qcow2`, osnet-incorporation `0.5.11-2026.0.0.23295`, kernel `illumos-7e802e88a3`. This PR records that the private-tier pin `cda5b9a49f` also verifies against that kernel, so no second pin feature (`unstable-gate-7e802e88a3`) is needed. It also documents the one behaviour change a virtio driver can see. ## kernel-check at illumos 7e802e88a3 `cargo xtask kernel-check --emit | guest mdb -k | cargo xtask kernel-check --verify -` ran on the guest, with `misc/virtio` loaded by vioblk and `misc/gld` modloaded for the check: | Crate | Sizes | Offsets | Symbols | | --- | --- | --- | --- | | ddi-sys | 53/60 | 185/185 | 984/984 (`ddi_ncpus_expected` is now in the kernel) | | ddi-mac-sys | 23/26 | 52/52 | 30/30 | | ddi-scsa-sys | 16/20 | 87/103 | 80/80 | | ddi-usba-sys | 26/29 | 126/134 | 65/65 | | ddi-neti-sys | 7/7 | 30/30 | 34/34 | | ddi-ksensor-sys | 3/3 | 7/7 | 6/6 | | ddi-pcmcia-sys | 68/84 | 175/201 | 83/83 | | ddi-gld-sys | 7/7 | 41/41 | 14/14 | | ddi-ktest-sys | not checked | | 0/16 (`drv/ktest` is not packaged for OpenIndiana) | | illumos-kernel-private-sys | 2/2 | 21/21 | 13/13 | | illumos-kernel-private-virtio-sys | 1/1 | 0/0 | 48/48 | Nothing disagreed. Every count below the total is a type that CTF cannot name, as in the earlier runs. The 16 errors are the ktest symbols. Log: `logs/hephaistos/illumos-drm/20260930-g1-kernel-check.log` (illumos workspace). ## Gate diff cda5b9a49f..7e802e88a3 of the cited files - illumos-kernel-private-sys: no cited file changed. `xtask lint-man --gate` against a `7e802e88a3` checkout reports 0 errors for its citations. - illumos-kernel-private-virtio-sys: - `virtio.h` gained `virtio_queue_share_interrupt`, `virtio_queue_pending`, `virtio_queue_intr_handle` and `virtio_interrupts_type`. They are not bound. - `virtio_spec.h` gained `VIRTIO_F_RING_EVENT_IDX`. - No existing declaration changed. The cited lines moved, so 56 of the 59 virtio citations report as moved against `7e802e88a3`. They stay checked against `cda5b9a49f`: 0 errors there. This is as DESIGN.md §4 already says. - Behaviour: since `433e6bede6` the framework negotiates `VIRTIO_F_RING_EVENT_IDX` when the device offers it. virtio-gpu now runs with features `0x130000003` (at `cda5b9a49f`: `0x110000003`). The device then interrupts for a queue again only after a poll has found the queue empty. The wrapper already hands every signalled queue to a task that polls until `None`. However, its module doc claimed that "the next interrupt" picks up a queue whose task-queue dispatch failed, and that is no longer guaranteed; the second commit corrects it (`VirtioDev::process` does). No panic is involved, so the panic-to-type rule does not apply. ## Guest regression on the new kernel (illumos-drm `r4-virtio-gpu` 55d8e60) The modules were built with `cargo xtask build` and are byte-identical to r4-run6's (`rdrmnull.a` db95a2fe…, `virtio_gpu.a` 3f6d912c…). They ran on a fresh overlay with `virtio-gpu-gl-pci` + `egl-headless` and the default transitional virtio disk. - `run-r4-test.sh`: PASS, 74 checks, `drm_r4_test` 63/0. Detach: 19504 requests, 0 failed, 0 timeouts, 0 resources left. Gate bug 18358 is fixed at this kernel: virtio_gpu attaches on its modern interface next to the default disk, so `disable-modern=on` is no longer needed. - `run-r3-test.sh`: fail=0. - `run-r1-test.sh` (R0, R1, R2): `drm_r2_test` 188/0, and every other test passed, but the script reported fail=1 twice: "no detach(9E) refusal was logged". The refusal *was* logged with the same timestamp. It reached `/var/adm/messages` after the script's immediate `grep`, while the NOTICE emitted just before it had already arrived. With a 2 s pause before that grep (a guest-local copy of the script) the run gives fail=0. The two-device run (`rdrmnull-two.conf`) passed unmodified (198/0, fail=0). The syslog path has no gate change between the two commits outside panic context. This is a timing race in the test script, not a kernel difference. Logs, all in `logs/hephaistos/illumos-drm/`: `20260930-g1-r4-driver.log`, `20260930-g1-regression-r1{,-rerun,-sleep2}.log`, `20260930-g1-regression-r3.log`, `20260930-g1-regression-r2-two.log`. ## Local checks - `cargo fmt --check`: passes. - `cargo clippy -D warnings`: passes for the workspace and for the private features. - `cargo doc -D warnings`: passes for both. - `cargo test -p ddi` (lib: 13 passed; doc on the illumos target: 27 passed, 7 ignored). - `lint-man --gate cda5b9a49f`: 0 private errors. The one public error, `ddi_ncpus_expected(9F)`, has no page at that commit, the same as on `r4-virtio`.
xtask kernel-check against illumos 7e802e88a3 (OpenIndiana Hipster
osnet 23295, the refreshed Hephaistos test guest) found every size,
offset and symbol of illumos-kernel-private-sys and
illumos-kernel-private-virtio-sys as declared, and those of every
Committed crate it could check (ddi-sys now 984 of 984 symbols; drv/ktest
is not packaged for OpenIndiana). No cited file of
illumos-kernel-private-sys changed between the two commits, so no second
pin feature is needed.

virtio.h gained four functions that are not bound and moved the cited
lines, which stay checked against cda5b9a49f. The framework negotiates
VIRTIO_F_RING_EVENT_IDX since 433e6bede6; the item docs of
virtio_queue_poll and virtio_queue_no_interrupt and DESIGN.md section 4
say what that changes for a driver. DESIGN.md section 8.1 records the
second kernel-check run.
ddi::private::virtio: with the event index, a failed dispatch waits for process
All checks were successful
ci / check-hosted (pull_request) Successful in 19m38s
ci / kmod-illumos (pull_request) Successful in 49m32s
097167f135
On gates since 433e6bede6 the framework negotiates
VIRTIO_F_RING_EVENT_IDX, and the device interrupts for a queue again
only after a poll found it empty. A task-queue dispatch that fails for
lack of memory is then not followed by another interrupt for that
queue, so VirtioDev::process, not the next interrupt, must pick the
pending queue up. Document that, and that Queue::poll must be called
until it returns None.
toasterson changed target branch from r4-virtio to main 2026-10-05 16:34:48 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
illumos/illumos-ddi!7
No description provided.