Commit Graph

219 Commits

Author SHA1 Message Date
Red Bear OS 28afc1fefd drivers: complete shared-IRQ re-arm sweep (audio, net, graphics)
Continuation of 92924224 — the same conditional-ack bug class found in
six more drivers: a foreign interrupt on a shared INTx line skipped the
write-back ack, leaving the kernel-masked IRQ line dead forever.

- sb16d, ac97d: ack before the not-ours continue
- rtl8139d, rtl8168d, ixgbed: ack unconditionally, tick only when ours
  (the stale 'TODO: spurious interrupts' comments removed — the
  spurious-interrupt confusion was this bug)
- ihdgd: ack unconditionally, handle_events/tick only when ours

Verified: cargo check -Z build-std --target x86_64-unknown-redox for
sb16d, ac97d, rtl8139d, rtl8168d, ixgbed, ihdgd — clean, no new
warnings. nvmed audited: not affected (per-queue MSI pattern, no
conditional ack).
2026-07-20 18:48:30 +09:00
Red Bear OS 54e89a337a fbcond: perform the display handoff open off the console loop
fbcond blocked indefinitely in open_display_v2() while handing the console
over to the real graphics driver: boot stopped at "fbcond: Performing
handoff" and never reached the "Opened new display" that follows a
successful open.

fbcond is single-threaded and owns the console, so while it waited there it
stopped draining console writers. getty, login and the login shell all
blocked on their writes, which made the failure look like a slow or hung
shell -- the stall point just tracked whichever process next wrote to the
console. If the graphics driver was itself waiting on the console, the two
deadlocked outright and the console never came back.

The wait comes from the scheme-open handshake: inputd signals the handoff as
soon as the driver registers its path, but the driver may not be serving its
scheme yet, and O_NONBLOCK does not bound the open (it governs later reads).

Split the two halves in inputd's ConsumerHandle: display_path_v2() only does
an fpath on our own handle and returns promptly, while open_display_path_v2()
carries the blocking open. fbcond now resolves the path inline and hands the
open to a worker thread, then picks the result up from the event loop via
poll_pending_handoff(). Console output produced meanwhile is buffered in
pending_writes (already the behaviour while the display is unmapped) and
flushed once the new display is mapped.
2026-07-20 18:10:59 +09:00
Red Bear OS fb421083e0 fbcond: retry handoff while display driver is not ready
The handoff is one-shot: inputd signals it the moment the real display
driver registers its path, but the driver's scheme may not serve the v2
open / capability query for a few more milliseconds. Without a retry, a
transient not-ready driver leaves the framebuffer permanently blank —
the login prompt is drawn to the framebuffer VT, so the console appears
dead even though boot continues on the serial mirror (observed as the
2026-07-20 '-vga std' boot freeze at 'Performing handoff').

Retry the reopen for up to 250 x 10ms; the driver becomes ready well
within this bound in practice. On success after retries, log the retry
count at info level. If the driver is still not ready after the bound,
emit a single explicit warning instead of per-attempt warn spam (the
per-attempt message in display.rs is demoted to debug). Serial mirror
remains unaffected in the failure case.
2026-07-20 08:59:26 +09:00
Red Bear OS 6694b5af9e fbcond/graphics-ipc: treat not-ready graphics driver as transient at handoff
V2GraphicsHandle::from_file() unwrapped/asserted the DumbBuffer
capability, but the display fd is O_NONBLOCK and the graphics driver
often has not finished coming up at handoff time — so from_file failed
with EAGAIN and the assert panicked fbcond. Since fbcond owns the
console and serial mirror, its death froze the whole boot right after
'Performing handoff' with no login prompt.

Return an error from graphics-ipc when the driver does not yet report
DumbBuffer, and have fbcond log-and-return so the handoff is retried
when the driver publishes its surface, instead of panicking.

(Change found as uncommitted work in the fork; committing to preserve
it and unblock the clean-fork build gate.)
2026-07-20 00:28:02 +09:00
Red Bear OS 9bbdc2cafa Merge upstream/main (59cf8189) into submodule/base
Sync the base fork with 13 upstream commits (xhci event-processing
dedup + IRQ race fix, randd permission simplification, nvmed TimeSpec
fix, /dev/ptmx, fpath legacy-path cleanup, dynamically-linked init
fix, and more). Brings process_one_event into the tree, satisfying the
verify-fork-functions gate for base.

Conflicts resolved (3 of 8 overlapping files; 5 auto-merged):

- drivers/usb/xhcid/src/xhci/irq_reactor.rs: took upstream's
  process_one_event/EventProcessResult refactor (b2ed85ea) including
  the a01d3ce6 race fix (process events between NoEvent and
  unmasking), and re-applied the Red Bear SPURIOUS_REBOOT quirk on the
  NoEvent warning (downgrade to debug when quirked).

- randd/src/main.rs: took upstream's permission-handling
  simplification (e26db606); re-applied the RB fcntl improvement
  (F_GETFL/F_GETFD/F_SETFL/F_SETFD handling, Linux random_fops xref)
  and the is_cpu_feature_detected early-return cleanup. Dropped
  test_scheme_perms (deleted by upstream's simplification).

- Makefile: kept upstream's new /dev symlink block (dev/null, ptmx,
  random, urandom, zero, tty, stdin/stdout/stderr).

Verified: cargo check clean; 57/57 tests pass (xhcid 35, usbhubd 14,
xhci trb 8); verify-fork-functions.sh --no-fetch base reports all
upstream functions present.
2026-07-19 05:47:27 +09:00
Red Bear OS 8b605179eb fbcond: translate CR to LF on keyboard input
The keyboard input path pushed the raw character bytes, so the Enter key
(a bare CR on the keymap) never produced an LF. Line-oriented readers on
the console (e.g. a shell's read_line) then never saw a completed line and
appeared to hang. Convert CR->LF here, matching the serial input path
(push_input_bytes).
2026-07-18 12:02:45 +09:00
Red Bear OS e9342b78e9 feat(fbcond): bidirectional serial console mirror for headless login
fbcond now mirrors all framebuffer-console output to the kernel debug (serial)
scheme AND feeds serial input back into the active VT's input queue. Previously,
once fbcond took over the console after display handoff the serial line went
silent (headless operators saw the boot stop at 'Performing handoff' and never
saw the getty login prompt, which draws only to the framebuffer VT). Now the
same console — boot log, login prompt, and shell — is fully usable over serial,
reusing the working framebuffer getty for both surfaces.
2026-07-18 07:23:22 +09:00
bjorn3 5c6f460bbb Stop using the legacy path format in fpath
For fbbootlog, fbcon and the disk drivers there is no load bearing use
of the fpath output. And for chan relibc already handles both the legacy
and new format.
2026-07-16 20:16:44 +02:00
Red Bear OS 324172abaf fbcond: restore console scrollback (lost P4-fbcond-scrollback)
Re-adds the archived-but-unapplied scrollback support: a 1000-line ring
buffer in TextScreen capturing all output (incl. pre-handoff boot log), a
Handle::Scrollback variant opened via /scheme/fbcon/<vt>/scrollback, and a
read path returning the retained buffer. Adapted to the current single-step
openat scheme protocol.
2026-07-16 21:59:18 +09:00
Red Bear OS 2b48b9e966 pcid: log PCIe->I/O-port fallback at info; fbcond: transient no-display at debug 2026-07-16 06:39:43 +09:00
Red Bear OS 00b799d512 absorb: 41 orphaned base patches re-applied (Phase 1.0A)
Per local/docs/PATCH-PRESERVATION-AUDIT-2026-07-12.md the base
fork was carrying only 38 of 100 patches in local/patches/base/.
The other 62 patches' content was silently missing from the fork
working tree, even though their .patch files were preserved.

This commit re-applies 41 patches that genuinely still apply
cleanly + 17 hunks that partially applied. Recovery covers:

- D-Bus initfs service wiring (P4-initfs-dbus-services)
- USB service wiring (P4-initfs-usb-drm-services)
- netcfg/dhcp/dhcpv6 driver fixes
- acpid shutdown/PM/quirk fixes
- inputd/ps2d hard-fail logging
- pcid driver interface refinements (server cmd channel)
- virtio-core for VirtualBox support
- ixgbed/rtl8139/rtl8168 net drivers
- ahcid NCQ + per-function interrupt coalescing
- logd persistent logging
- bootstrap procmgr race-condition fixes
- cargo version pin to +rb0.3.0 (synchronized release branch)

58 files changed, +1444/-318 lines.

Untracked mnt/ tree and *.orig / *.rej files cleaned up after
patch application (leftover from absolute-path patch headers).
2026-07-12 01:29:08 +03:00
Red Bear OS bd595851e2 base: apply Red Bear patches on latest upstream/main
251 files: init, acpid, ipcd, netcfg, ihdgd, virtio-gpud, scheme-utils,
inputd, block driver, ptyd, ramfs, randd, initfs bootstrap, path deps,
version +rb0.3.1, author attribution
2026-07-11 11:39:24 +03:00
Jeremy Soller 2878a22564 Merge branch 'fix_fbcond_enter' into 'main'
Fix enter key in fbcond

See merge request redox-os/base!297
2026-07-03 06:01:44 -06:00
bjorn3 d1b51888b6 Fix enter key in fbcond 2026-07-02 19:57:52 +02:00
bjorn3 31793e7c0c drivers/graphics/driver-graphics: Implement cursor planes 2026-07-02 19:33:53 +02:00
bjorn3 4411f8cfb6 drivers/graphics/driver-graphics: Implement DRM_IOCTL_MODE_CLOSEFB 2026-07-01 21:49:11 +02:00
bjorn3 9c52365339 Remove unnecessary struct reprs 2026-06-26 12:13:28 +02:00
bjorn3 5701459db4 drivers/graphics/console-draw: Use font height rather than width where necessary
This fixes major corruption of the drawn text.
2026-05-24 20:36:18 +02:00
bjorn3 54b2697a6d drivers/graphics/console-draw: Missed change 2026-05-24 20:31:51 +02:00
bjorn3 5e800afd1b drivers/graphics: Couple of misc fbcond/fbbootlogd cleanups 2026-05-24 20:23:05 +02:00
Wildan M b70f565ec5 fbbootlogd: Fix build 2026-05-16 15:26:38 +07:00
Jeremy Soller a0e34b92e5 Merge branch 'console-font-support' into 'main'
Implement font support

See merge request redox-os/base!261
2026-05-15 17:21:18 -06:00
Migue Magic ae77a4f0ad Implement font support 2026-05-15 17:21:18 -06:00
bjorn3 fc2d098f70 drivers/graphics/driver-graphics: Move property ioctls to a separate module 2026-05-14 18:37:55 +02:00
bjorn3 3e7b757f0b drivers/graphics/driver-graphics: Deduplicate code between MODE_CURSOR and MODE_CURSOR2 2026-05-14 17:40:43 +02:00
bjorn3 798ef0738e drivers/graphics/driver-graphics: Move cursor ioctls to a separate module 2026-05-14 17:36:55 +02:00
bjorn3 df845d6566 drivers/graphics/driver-graphics: Move framebuffer ioctls to a separate module 2026-05-14 17:32:39 +02:00
bjorn3 2ac2182caa drivers/graphics/driver-graphics: Move ioctl impls to a new module 2026-05-14 17:25:02 +02:00
bjorn3 22060149c2 drivers/graphics/driver-graphics: Extract ioctl implementations into a function 2026-05-14 17:22:15 +02:00
bjorn3 241bae84e7 drivers/graphics/driver-graphics: Fix leftover of dummy planes 2026-05-14 17:13:31 +02:00
bjorn3 c66c9e95fa drivers/graphics/driver-graphics: Introduce DrmHandle 2026-05-14 17:05:47 +02:00
bjorn3 a53777050c drivers/graphics/driver-graphics: Expose a bunch of properties on planes 2026-05-14 16:43:10 +02:00
bjorn3 607906de28 Rustfmt 2026-05-14 16:19:10 +02:00
bjorn3 b0d7b6135e Restore some FIXMEs 2026-05-14 16:09:07 +02:00
bjorn3 6a039c29fe drivers/graphics/ihdgd: Don't access CRTC in set_plane 2026-05-14 16:05:57 +02:00
bjorn3 5d6faacfb3 drivers/graphics/driver-graphics: Couple of fixups 2026-05-14 16:00:30 +02:00
bjorn3 0ee128ad8d drivers/graphics: Make everything work 2026-05-14 15:50:15 +02:00
bjorn3 ab8bfb9d5d drivers/graphics/driver-graphics: Report actual planes from MODE_GET_PLANE 2026-05-14 15:33:17 +02:00
bjorn3 76d6398473 drivers/graphics/driver-graphics: Add primary plane for every CRTC 2026-05-14 15:29:58 +02:00
Meijlen 835be6f654 drivers/graphics: Implement support for planes 2026-05-14 15:29:56 +02:00
bjorn3 53da1b0dc4 drivers/graphics/driver-graphics: Fix ioctl order 2026-05-14 15:29:24 +02:00
bjorn3 5f4e5016a8 drivers/graphics/driver-graphics: Implement MODE_ADD_FB2 2026-05-14 14:56:33 +02:00
bjorn3 0eb6390fe1 drivers/graphics/driver-graphics: Report DRM_MAJOR as device major 2026-05-14 12:23:54 +02:00
bjorn3 6875c90850 drivers/graphics/driver-graphics: Implement SET_VERSION and GET_UNIQUE
libdrm needs these when searching for drm devices.
2026-05-14 12:09:55 +02:00
bjorn3 d110147d62 drivers/graphics/driver-graphics: Introduce KmsObjects::remove helper 2026-05-13 21:19:05 +02:00
bjorn3 d1cf7d53d2 drivers/graphics/driver-graphics: Introduce set_connector_edid helper
And don't create a new blob unless the EDID actually changes.
2026-05-13 21:18:59 +02:00
bjorn3 74bd1db73a drivers/graphics/virtio-gpu: Move some block_on calls to the callers 2026-05-13 20:02:01 +02:00
bjorn3 e2c67fa8f8 drivers/graphics/virtio-gpu: Extract create_dumb_buffer_inner as async function 2026-05-13 20:00:25 +02:00
bjorn3 ebdf681eab drivers/graphics/virtio-gpu: Introduce send_request_cursor 2026-05-13 19:46:56 +02:00
bjorn3 7c533510a9 drivers/graphics/driver-graphics: Match error codes of Linux 2026-05-12 21:15:59 +02:00