From 0dbad0f2780cb836b787e4e2c83f3263670c2c85 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 8 Nov 2026 00:07:58 +0000 Subject: [PATCH 1/5] demo: DEPLOY.md, the server checklist for Try it [skip ci] Five steps on the server after #148: the checkout and amd64 build tools, the demo's own Zuse, the image and the saved machine at 384 MiB, the service, TLS and Apache for try.starshipos-f18.com; then the check from outside and the .com's navigation link (#115, #116, #117). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- demo/DEPLOY.md | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++ demo/README.md | 3 +- 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 demo/DEPLOY.md diff --git a/demo/DEPLOY.md b/demo/DEPLOY.md new file mode 100644 index 00000000..fbc8b438 --- /dev/null +++ b/demo/DEPLOY.md @@ -0,0 +1,80 @@ +# Deploying "Try it" on the server + +The public demo: each visitor gets a StarshipOS machine of their own in the browser, resumed at +Zuse's prompt, gone when they leave. Two at a time on today's server (384 MiB each); a third visitor +is told every machine is busy and to try back in a few minutes. Issues #115, #116, #117. + +Run as root on the server, **after PR #148 is merged** (it carries the 384 MiB guests and the busy +message), **while CI is idle** (each step that boots QEMU boots one, in the foreground). + +## 1. The checkout and what the build needs (~15 min) + +```bash +apt-get install -y ttyd qemu-system-x86 ovmf python3 git +git clone https://gitea.starshipos-f18.org/rajames/LithosAnanke.git /opt/starshipos-demo +cd /opt/starshipos-demo +git checkout master # after #148: alpha.3's kernel, and the demo's limits +make ARCH=amd64 init INIT_DOCS=0 INIT_PROOFS=0 # amd64 only: no docs, no Isabelle +``` + +Master after #148 is the `v4.0.0-alpha.3` kernel unchanged, plus #148's scripts. + +## 2. The demo's own Zuse (~3 min, two QEMU boots) + +```bash +demo/mint-zuse.sh /var/lib/starshipos-demo-zuse +ls -la /var/lib/starshipos-demo-zuse/zusestick.img # the stick every session attaches +``` + +Never anyone's real Zuse: minted for the demo (#111), its writes discarded in every session. + +## 3. The image and the saved machine (~2 min, one QEMU boot) + +```bash +demo/build-iso.sh /tmp/StarshipOS.iso +DEMO_PROMPT='[zuse@Hera]' demo/make-snapshot.sh /tmp/StarshipOS.iso /var/lib/starshipos-demo \ + /var/lib/starshipos-demo-zuse/zusestick.img +ls -la /var/lib/starshipos-demo/ # StarshipOS.iso identity.img vars.fd state +``` + +The saved machine belongs to this image, this QEMU and 384 MiB: re-run step 3 after any of them +changes. Sessions already running keep theirs. + +## 4. The service (~5 min) + +```bash +useradd --system --home /var/lib/starshipos-demo --shell /usr/sbin/nologin starshipos-demo +chown -R starshipos-demo: /var/lib/starshipos-demo +cp demo/starshipos-demo.service /etc/systemd/system/ +systemctl daemon-reload && systemctl enable --now starshipos-demo +systemctl status starshipos-demo --no-pager | head -5 +curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:7681/ # 200: ttyd answers +``` + +The service expects the checkout's `demo/` at `/opt/starshipos-demo/demo` (step 1 put it there). + +## 5. TLS and Apache for try.starshipos-f18.com (~10 min) + +DNS: `try.starshipos-f18.com` must point at this server (an A record) before certbot. + +```bash +a2enmod proxy proxy_http proxy_wstunnel headers ssl rewrite +certbot certonly --apache -d try.starshipos-f18.com +cp demo/apache-demo.conf /etc/apache2/sites-available/starshipos-demo.conf +a2ensite starshipos-demo && apachectl configtest && systemctl reload apache2 +curl -sI https://try.starshipos-f18.com/ | head -3 # 200, its own certificate +``` + +`apache-demo.conf` lets only the .com frame the terminal (`frame-ancestors`). + +## 6. Tell Claude + +Then I check from outside: a session reaches `[zuse@Hera] ok>`, `3 4 + .` answers `7 ok`, a third +visitor gets the busy message, and the .com's Try it page shows the console. Then the "Try it" link +goes into the .com's navigation (#117). + +## If something goes wrong + +- `journalctl -u starshipos-demo -n 50` -- ttyd and the sessions +- A session that ends at once: the saved machine does not match (re-run step 3) +- Memory: `free -h` -- each session is ~400 MB of QEMU; two at most (`DEMO_MAX_GUESTS` in the service) diff --git a/demo/README.md b/demo/README.md index 02df67a1..484d039f 100644 --- a/demo/README.md +++ b/demo/README.md @@ -20,7 +20,8 @@ XWiki "Try it" page (iframe) -> Apache: TLS, websocket -> ttyd -> start-session. | `start-session.sh` | One visitor's session: resumes the saved machine, ends it on hang-up, close or time-out (#112) | | `console.py` | Joins the visitor's terminal to the machine only once it runs, discarding keys typed while it loads | | `qemu-args.sh` | The machine, shared by the two above: a resumed machine must match the saved one exactly | -| `starshipos-demo.service` | ttyd as a systemd service, on localhost, at most 3 sessions (#114) | +| `starshipos-demo.service` | ttyd as a systemd service, on localhost; two guests at once, a busy message for the rest (#114, #116) | +| `DEPLOY.md` | Putting it on the server, step by step | | `apache-demo.conf` | Example vhost: TLS, the websocket, framing allowed for the `.com` only (#115) | | `xwiki-try-it.xwiki` | The "Try it" page, its own page on the `.com` XWiki (`TryIt`), in the landing page's style | From 4d0b9ab771a308bd4f01da80de90fd31a20652fa Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 8 Nov 2026 00:25:26 +0000 Subject: [PATCH 2/5] demo/DEPLOY.md: disable the ttyd package's own service first [skip ci] Ubuntu's ttyd package starts ttyd.service, which runs login on port 7681; installed by step 1, it took the port, and try.starshipos-f18.com served the server's login prompt until it was disabled (2026-11-08). Step 4 now disables it first and checks what listens on 7681. And the check from outside, done: ready in 1.5 s, 7 ok, 49 ok, the third visitor busy. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- demo/DEPLOY.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/demo/DEPLOY.md b/demo/DEPLOY.md index fbc8b438..a89b73b5 100644 --- a/demo/DEPLOY.md +++ b/demo/DEPLOY.md @@ -42,13 +42,19 @@ changes. Sessions already running keep theirs. ## 4. The service (~5 min) +Ubuntu's `ttyd` package starts its own `ttyd.service`, which runs **`login` on port 7681** -- our +port. Left running, it takes the port, and Apache hands visitors the server's own login prompt +(found 2026-11-08, after step 5). Disable it first: + ```bash +systemctl disable --now ttyd # the package's service: a login prompt on 7681 useradd --system --home /var/lib/starshipos-demo --shell /usr/sbin/nologin starshipos-demo chown -R starshipos-demo: /var/lib/starshipos-demo cp demo/starshipos-demo.service /etc/systemd/system/ systemctl daemon-reload && systemctl enable --now starshipos-demo systemctl status starshipos-demo --no-pager | head -5 curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:7681/ # 200: ttyd answers +ss -ltnp | grep 7681 # the ttyd of starshipos-demo, nothing else ``` The service expects the checkout's `demo/` at `/opt/starshipos-demo/demo` (step 1 put it there). @@ -67,7 +73,13 @@ curl -sI https://try.starshipos-f18.com/ | head -3 # 200, its `apache-demo.conf` lets only the .com frame the terminal (`frame-ancestors`). -## 6. Tell Claude +## 6. The check (done 2026-11-08) + +From outside: a session ready 1.5 s after the page opens; `3 4 + .` answers `7 ok`, `: SQUARE DUP * +; 7 SQUARE .` answers `49 ok`; a third visitor at once is told every machine is busy. The +certificate is try.starshipos-f18.com's own (Let's Encrypt), and only the .com may frame it. + +## 7. Tell Claude Then I check from outside: a session reaches `[zuse@Hera] ok>`, `3 4 + .` answers `7 ok`, a third visitor gets the busy message, and the .com's Try it page shows the console. Then the "Try it" link From 88b962b29e99e928c4f3b025ada94712bec675da Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 8 Nov 2026 00:38:54 +0000 Subject: [PATCH 3/5] demo: one core for all sessions, lowest priority, 1 GiB; Try it deployed [skip ci] An idle StarshipOS guest keeps a host core 100% busy (measured 2026-11-08: QEMU at 100% of a core, 148 MiB, the guest idle at its prompt; #151). starshipos-demo.service: CPUQuota=100% and Nice=19 for all sessions together, MemoryMax=1G -- sized for this server, where the old 300% and 4G let two visitors starve both wikis and Gitea. DEPLOY.md says how to apply it. FABRIC-3 XLVIII.4: Try it deployed and checked from outside; the ttyd package's own login service; #151, #152. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- demo/DEPLOY.md | 6 +++++- demo/starshipos-demo.service | 10 ++++++++-- docs/fabric/FABRIC-3.md | 17 +++++++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/demo/DEPLOY.md b/demo/DEPLOY.md index a89b73b5..85c24c1d 100644 --- a/demo/DEPLOY.md +++ b/demo/DEPLOY.md @@ -89,4 +89,8 @@ goes into the .com's navigation (#117). - `journalctl -u starshipos-demo -n 50` -- ttyd and the sessions - A session that ends at once: the saved machine does not match (re-run step 3) -- Memory: `free -h` -- each session is ~400 MB of QEMU; two at most (`DEMO_MAX_GUESTS` in the service) +- Memory: `free -h` -- a session's QEMU holds ~150 MB of its 384 MiB guest; two at most + (`DEMO_MAX_GUESTS` in the service) +- CPU: an idle guest keeps a host core busy (the kernel's idle loop polls -- its own issue), so the + service caps all sessions together at one core (`CPUQuota=100%`, `Nice=19`). After changing the + service file: `systemctl daemon-reload && systemctl restart starshipos-demo` diff --git a/demo/starshipos-demo.service b/demo/starshipos-demo.service index 08ca318a..9ad0238e 100644 --- a/demo/starshipos-demo.service +++ b/demo/starshipos-demo.service @@ -30,8 +30,14 @@ ProtectHome=yes PrivateTmp=yes PrivateDevices=yes ReadOnlyPaths=/var/lib/starshipos-demo -MemoryMax=4G -CPUQuota=300% +# Sized for this server (3.8 GiB, both wikis, Gitea, Nexus, CI): an idle StarshipOS guest keeps a +# host core busy -- the kernel's idle loop polls (measured 2026-11-08: 100% of a core at the +# prompt, 148 MiB resident) -- so all sessions together get one core at the lowest priority, and +# the wikis and Gitea never starve; with two visitors each runs at half speed. 1 GiB holds two +# sessions with room. Raise both with the server (8 GB: MemoryMax=2G, CPUQuota=200%). +MemoryMax=1G +CPUQuota=100% +Nice=19 TasksMax=200 [Install] diff --git a/docs/fabric/FABRIC-3.md b/docs/fabric/FABRIC-3.md index debd4581..478e68f7 100644 --- a/docs/fabric/FABRIC-3.md +++ b/docs/fabric/FABRIC-3.md @@ -6243,3 +6243,20 @@ review list begun meanwhile goes to the milestone v4.0.0-alpha.4. - With both wikis up again (Shenandoah, the .com's heap at 512 MiB, the .org's given 256 more): the server at 2.6 of 3.8 GiB used, 1.2 GiB available, 2 GiB of swap used; Build 204 (three images, the v4 tests) passed alongside them. + +### 4. Try it, deployed (2026-11-08) + +Captain Bob ran `demo/DEPLOY.md` on the server (#115): try.starshipos-f18.com with its own Let's +Encrypt certificate, ttyd behind Apache, framing allowed to the .com alone. Checked from outside: a +session ready 1.5 s after the page opens, `3 4 + .` -> `7 ok`, `: SQUARE DUP * ; 7 SQUARE .` -> +`49 ok`, a third visitor at once told every machine is busy. + +Found on the way: +- Ubuntu's `ttyd` package starts its own `ttyd.service` -- `login` on port 7681, ours -- and + until it was disabled the page served the server's login prompt to anyone. `DEPLOY.md` step 4 + now disables it first and checks what listens on 7681. +- **An idle StarshipOS keeps a host core 100% busy** (#151): the demo machine at its prompt, idle + 20 s, QEMU at 100% of a core, 148 MiB resident -- the kernel's idle loop polls, never halts. Two + visitors' sessions with Gitea's diff statistics on a burst of pushes (#152, 1.75 GiB) filled the + server's swap and stalled both wikis. The service now caps all sessions together at one core at + the lowest priority (`CPUQuota=100%`, `Nice=19`, `MemoryMax=1G`), until #151 is fixed. From a083c5b83436ffa833093113edae95b0aec7c156 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 8 Nov 2026 00:49:46 +0000 Subject: [PATCH 4/5] site/com: Try it in the .com's navigation (#117) [skip ci] The canvas's Home and Inquiries artboards gain a 'Try it' link (canvas versions 12, 13); canvas/ copies them, build.py rebuilds the pages, and install.sh put them on the wiki. Checked as a visitor: the home page, the link, the Try it page in 1.1 s, its framed console Ready. FABRIC-3 XLVIII.4. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- docs/fabric/FABRIC-3.md | 3 +++ site/com/Inquiries.WebHome.xwiki | 1 + site/com/Main.WebHome.xwiki | 1 + site/com/canvas/Inquiries.dc.html | 1 + site/com/canvas/Main.dc.html | 1 + 5 files changed, 7 insertions(+) diff --git a/docs/fabric/FABRIC-3.md b/docs/fabric/FABRIC-3.md index 478e68f7..034dd1d4 100644 --- a/docs/fabric/FABRIC-3.md +++ b/docs/fabric/FABRIC-3.md @@ -6260,3 +6260,6 @@ Found on the way: visitors' sessions with Gitea's diff statistics on a burst of pushes (#152, 1.75 GiB) filled the server's swap and stalled both wikis. The service now caps all sessions together at one core at the lowest priority (`CPUQuota=100%`, `Nice=19`, `MemoryMax=1G`), until #151 is fixed. +- **Try it in the .com's navigation** (#117): "Try it" added to the canvas's Home and Inquiries + artboards, the .com rebuilt from them (`site/com`) and installed. Checked as a visitor: the home + page, the "Try it" link, the Try it page in 1.1 s, its framed console Ready. diff --git a/site/com/Inquiries.WebHome.xwiki b/site/com/Inquiries.WebHome.xwiki index 2e017896..d8d9c05e 100644 --- a/site/com/Inquiries.WebHome.xwiki +++ b/site/com/Inquiries.WebHome.xwiki @@ -32,6 +32,7 @@ html, body, #xwikimaincontainer, #xwikimaincontainerinner, #contentcontainer, #c starshipOS diff --git a/site/com/Main.WebHome.xwiki b/site/com/Main.WebHome.xwiki index c6b97f8e..61e27523 100644 --- a/site/com/Main.WebHome.xwiki +++ b/site/com/Main.WebHome.xwiki @@ -34,6 +34,7 @@ html, body, #xwikimaincontainer, #xwikimaincontainerinner, #contentcontainer, #c System Research Silicon +Try it Inquiries Contributors → diff --git a/site/com/canvas/Inquiries.dc.html b/site/com/canvas/Inquiries.dc.html index bd67f047..5e483cab 100644 --- a/site/com/canvas/Inquiries.dc.html +++ b/site/com/canvas/Inquiries.dc.html @@ -22,6 +22,7 @@ a{color:#F5891F}a:hover{color:#FFB061} starshipOS diff --git a/site/com/canvas/Main.dc.html b/site/com/canvas/Main.dc.html index 9bb787ce..a8538304 100644 --- a/site/com/canvas/Main.dc.html +++ b/site/com/canvas/Main.dc.html @@ -24,6 +24,7 @@ a{color:#F5891F}a:hover{color:#FFB061} System Research Silicon +Try it Inquiries Contributors → From 1928d53b6bc8be54a0ad54c645a3d5a70ce3a155 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 8 Nov 2026 01:21:36 +0000 Subject: [PATCH 5/5] kernel: v4 waits for a key in arch_halt(), not a spin (#151) An idle StarshipOS kept a CPU core 100% busy: sk_v4_readline(), with nothing typed, and sk_v4_identity_wait(), headless until Zuse, waited in arch_relax(). Both now halt until the next interrupt (hlt; wfi on aarch64 and riscv64): the heartbeat's timer, ISR-driven on all three, wakes them at 100 Hz, so a key is still seen within a tick. Idle at the prompt, QEMU's CPU: 100% -> 1% of a core on amd64, 1% on aarch64 and riscv64. Acceptance passes: amd64 logs/20261108-005539, aarch64 -005753, riscv64 -010136 (POST 538/538, one dict_hash, 7 ok), the stick loaded high, test-32 (39 programs, 0 failures). FABRIC-3 XLVIII.5. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2 --- docs/fabric/FABRIC-3.md | 16 ++++++++++++++++ .../runs/doe-aarch64-20261108-005753.csv | 0 .../runs/doe-aarch64-20261108-011029.csv | 0 .../runs/doe-aarch64-20261108-011614.csv | 0 .../runs/doe-amd64-20261108-005539.csv | 0 .../runs/doe-amd64-20261108-010323.csv | 0 .../runs/doe-riscv64-20261108-010136.csv | 0 .../runs/doe-riscv64-20261108-011931.csv | 0 kernel/src/v4/sk_v4.c | 6 +++++- kernel/src/v4/sk_v4_identity.c | 2 +- .../amd64/qemu-amd64-20261108-005539.log | 3 +++ .../aarch64/qemu-aarch64-20261108-005753.log | 3 +++ .../riscv64/qemu-riscv64-20261108-010136.log | 3 +++ .../amd64/qemu-amd64-20261108-010323.log | 3 +++ .../aarch64/qemu-aarch64-20261108-011029.log | 0 .../aarch64/qemu-aarch64-20261108-011614.log | 3 +++ .../riscv64/qemu-riscv64-20261108-011931.log | 3 +++ 17 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 experiments/bare_metal/runs/doe-aarch64-20261108-005753.csv create mode 100644 experiments/bare_metal/runs/doe-aarch64-20261108-011029.csv create mode 100644 experiments/bare_metal/runs/doe-aarch64-20261108-011614.csv create mode 100644 experiments/bare_metal/runs/doe-amd64-20261108-005539.csv create mode 100644 experiments/bare_metal/runs/doe-amd64-20261108-010323.csv create mode 100644 experiments/bare_metal/runs/doe-riscv64-20261108-010136.csv create mode 100644 experiments/bare_metal/runs/doe-riscv64-20261108-011931.csv create mode 100644 logs/20261108-005539/amd64/qemu-amd64-20261108-005539.log create mode 100644 logs/20261108-005753/aarch64/qemu-aarch64-20261108-005753.log create mode 100644 logs/20261108-010136/riscv64/qemu-riscv64-20261108-010136.log create mode 100644 logs/20261108-010323/amd64/qemu-amd64-20261108-010323.log create mode 100644 logs/20261108-011029/aarch64/qemu-aarch64-20261108-011029.log create mode 100644 logs/20261108-011614/aarch64/qemu-aarch64-20261108-011614.log create mode 100644 logs/20261108-011931/riscv64/qemu-riscv64-20261108-011931.log diff --git a/docs/fabric/FABRIC-3.md b/docs/fabric/FABRIC-3.md index 034dd1d4..e56d479b 100644 --- a/docs/fabric/FABRIC-3.md +++ b/docs/fabric/FABRIC-3.md @@ -6263,3 +6263,19 @@ Found on the way: - **Try it in the .com's navigation** (#117): "Try it" added to the canvas's Home and Inquiries artboards, the .com rebuilt from them (`site/com`) and installed. Checked as a visitor: the home page, the "Try it" link, the Try it page in 1.1 s, its framed console Ready. + +### 5. #151: the idle loop halts (2026-11-08) + +Ruled (Captain Bob): "Fix the kernel problem." The v4 system waited for a key -- `sk_v4_readline()` +with nothing typed, and `sk_v4_identity_wait()` headless until Zuse -- in `arch_relax()`, a spin. +Both now wait in `arch_halt()` (`hlt` on amd64, `wfi` on aarch64 and riscv64) until the next +interrupt: the heartbeat's timer, which is ISR-driven on all three (`heartbeat_tick()`), wakes them +at 100 Hz, so a key is seen within a tick, as the cursor's blink and the identity beat already +were. v3's REPL (`repl.c`) still spins; v3 is not in acceptance. + +Verified: idle at Zuse's prompt for 20 s, QEMU's CPU **100% -> 1%** of a core on amd64 (the demo +machine), and **1%** on aarch64 and riscv64 (`logs/20261108-011614`, `-011931`); the acceptance +protocol passes -- amd64 `logs/20261108-005539`, aarch64 `-005753`, riscv64 `-010136`, POST +538/538, `dict_hash 0xfec8c47cfc6f437f` on all three, `7 ok` typed and answered; the stick loaded +high; `test-32` (39 programs, 0 failures). The demo's CPU cap (`CPUQuota=100%`) can be relaxed +once this reaches the server. diff --git a/experiments/bare_metal/runs/doe-aarch64-20261108-005753.csv b/experiments/bare_metal/runs/doe-aarch64-20261108-005753.csv new file mode 100644 index 00000000..e69de29b diff --git a/experiments/bare_metal/runs/doe-aarch64-20261108-011029.csv b/experiments/bare_metal/runs/doe-aarch64-20261108-011029.csv new file mode 100644 index 00000000..e69de29b diff --git a/experiments/bare_metal/runs/doe-aarch64-20261108-011614.csv b/experiments/bare_metal/runs/doe-aarch64-20261108-011614.csv new file mode 100644 index 00000000..e69de29b diff --git a/experiments/bare_metal/runs/doe-amd64-20261108-005539.csv b/experiments/bare_metal/runs/doe-amd64-20261108-005539.csv new file mode 100644 index 00000000..e69de29b diff --git a/experiments/bare_metal/runs/doe-amd64-20261108-010323.csv b/experiments/bare_metal/runs/doe-amd64-20261108-010323.csv new file mode 100644 index 00000000..e69de29b diff --git a/experiments/bare_metal/runs/doe-riscv64-20261108-010136.csv b/experiments/bare_metal/runs/doe-riscv64-20261108-010136.csv new file mode 100644 index 00000000..e69de29b diff --git a/experiments/bare_metal/runs/doe-riscv64-20261108-011931.csv b/experiments/bare_metal/runs/doe-riscv64-20261108-011931.csv new file mode 100644 index 00000000..e69de29b diff --git a/kernel/src/v4/sk_v4.c b/kernel/src/v4/sk_v4.c index b0ba43a6..0f6f7fbd 100644 --- a/kernel/src/v4/sk_v4.c +++ b/kernel/src/v4/sk_v4.c @@ -113,7 +113,11 @@ static int sk_v4_readline(void) } else { heartbeat_service(); } - arch_relax(); + /* Nothing typed: wait for the next interrupt, not in a spin (#151 -- the spin kept a + * CPU core 100% busy at the prompt, and the demo's host with it). The heartbeat's + * timer wakes it at 100 Hz, so a key is seen within a tick, as the blink and the + * identity beat are. */ + arch_halt(); continue; } if (c == '\r' || c == '\n') { diff --git a/kernel/src/v4/sk_v4_identity.c b/kernel/src/v4/sk_v4_identity.c index e7c8d1ed..95282e77 100644 --- a/kernel/src/v4/sk_v4_identity.c +++ b/kernel/src/v4/sk_v4_identity.c @@ -331,7 +331,7 @@ void sk_v4_identity_wait(void) while (!g_zuse_session) { sk_v4_discard_input(); sk_v4_identity_beat(); - arch_relax(); + arch_halt(); /* headless, until Zuse: wait for the next tick, not a spin (#151) */ } sk_v4_discard_input(); } diff --git a/logs/20261108-005539/amd64/qemu-amd64-20261108-005539.log b/logs/20261108-005539/amd64/qemu-amd64-20261108-005539.log new file mode 100644 index 00000000..a15926e2 --- /dev/null +++ b/logs/20261108-005539/amd64/qemu-amd64-20261108-005539.log @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaa65c2724ccd2279473f94884df0d853611ba08d8d0bdb9b14f44b59be16ab1 +size 6637 diff --git a/logs/20261108-005753/aarch64/qemu-aarch64-20261108-005753.log b/logs/20261108-005753/aarch64/qemu-aarch64-20261108-005753.log new file mode 100644 index 00000000..b965509c --- /dev/null +++ b/logs/20261108-005753/aarch64/qemu-aarch64-20261108-005753.log @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac20bd2d786f2d5b810d729cf3758c22378ce5a42b286d115a2c9cef41e479fe +size 5602 diff --git a/logs/20261108-010136/riscv64/qemu-riscv64-20261108-010136.log b/logs/20261108-010136/riscv64/qemu-riscv64-20261108-010136.log new file mode 100644 index 00000000..5b30ae83 --- /dev/null +++ b/logs/20261108-010136/riscv64/qemu-riscv64-20261108-010136.log @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2565b08cf1053d506e46e1318542c890818b5c6b2477c4bc304198756be58188 +size 7993 diff --git a/logs/20261108-010323/amd64/qemu-amd64-20261108-010323.log b/logs/20261108-010323/amd64/qemu-amd64-20261108-010323.log new file mode 100644 index 00000000..0518b538 --- /dev/null +++ b/logs/20261108-010323/amd64/qemu-amd64-20261108-010323.log @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c03601e006a4c119cc4fc4ea5cfc0c8e68dbc8c0d5816d92b4165a788efeb60a +size 6708 diff --git a/logs/20261108-011029/aarch64/qemu-aarch64-20261108-011029.log b/logs/20261108-011029/aarch64/qemu-aarch64-20261108-011029.log new file mode 100644 index 00000000..e69de29b diff --git a/logs/20261108-011614/aarch64/qemu-aarch64-20261108-011614.log b/logs/20261108-011614/aarch64/qemu-aarch64-20261108-011614.log new file mode 100644 index 00000000..82c2ed34 --- /dev/null +++ b/logs/20261108-011614/aarch64/qemu-aarch64-20261108-011614.log @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e777a51aa2058567fd55b03914776f4a609ccf5d7338682f77fdc6feafc57b7 +size 5491 diff --git a/logs/20261108-011931/riscv64/qemu-riscv64-20261108-011931.log b/logs/20261108-011931/riscv64/qemu-riscv64-20261108-011931.log new file mode 100644 index 00000000..967016c4 --- /dev/null +++ b/logs/20261108-011931/riscv64/qemu-riscv64-20261108-011931.log @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aab2cce11d2b9b3f0bf8a6b2258f13254e36e2134e881dacad5616c27f32d4f2 +size 7882