Commit Graph

1635 Commits

Author SHA1 Message Date
vasilito 8fb2bb16ba relibc: remove fenv no_mangle (C symbols exist) 2026-07-10 09:03:55 +03:00
vasilito 7815913332 git: bump submodule/relibc — _fenv reverted to safe stubs 2026-07-10 09:02:34 +03:00
vasilito cca46f4979 relibc: fix fenv asm memory operands 2026-07-10 08:58:27 +03:00
vasilito a2b72ff870 relibc: fix fenv asm constraints 2026-07-10 08:55:44 +03:00
vasilito 48dcdf1c75 relibc: fix feupdateenv unsafe blocks 2026-07-10 08:53:36 +03:00
vasilito 2024bfe636 relibc: bump submodule — add struct ifreq/ifconf to net/if.h 2026-07-10 08:39:12 +03:00
vasilito 24a5ae90ea relibc: bump submodule — _fenv with real x86_64 FPU asm 2026-07-10 08:35:43 +03:00
vasilito 441bd786a8 cleanup: remove accidental build artifact 2026-07-10 04:10:07 +03:00
vasilito 4bba789cb2 config: document QML/qtdeclarative blocker — batch-disable QML/Wayland in KDE recipes
qtshadertools cross-compilation fails: host Qt6 cmake vs target version mismatch.
18 KDE packages depend on qtdeclarative/qtshadertools — all blocked.
mini ISO builds cleanly (all 56 packages). Full ISO blocked by QML stack.
Removed qtdeclarative from redbear-full config temporarily.
2026-07-10 04:09:56 +03:00
vasilito 199eb44642 config: remove qtdeclarative from full (QML not available yet) 2026-07-10 04:01:59 +03:00
vasilito 2ab3944aa3 kauth: switch back to FAKE backend (polkit-qt6 offline fetch blocked) 2026-07-10 03:52:11 +03:00
vasilito 91f2e510d9 KDE: batch-disable QML+Wayland across 13 recipes (Qt6Qml not built yet) 2026-07-10 03:47:18 +03:00
vasilito 0cdc335e2c kcoreaddons: fix KFileSystemType::Ext4 → Other (Ext4 not in enum) 2026-07-10 03:43:41 +03:00
vasilito 2c581ed70b KDE: disable QML in kcoreaddons/kconfig (Qt6Qml not built yet) 2026-07-10 03:40:03 +03:00
vasilito 2b21c50971 cleanup: remove accidental build artifact file 2026-07-10 03:35:32 +03:00
vasilito ddbd2f7123 qtbase: fix ifreq incomplete type on Redox — provide forward decl, skip SIOCGIFMTU MTU query 2026-07-10 03:35:00 +03:00
vasilito ce37346d67 git: bump submodule/relibc — qsort_r export with Rust 2024 unsafe fix 2026-07-10 01:54:48 +03:00
vasilito 1eab0641eb fix: kernel OOM log removed, relibc strftime_l stub fixed for build 2026-07-10 01:51:09 +03:00
vasilito 97b1760924 git: bump submodule/relibc — locale_t import + CLOCK_THREAD_CPUTIME_ID + pal pub(crate) 2026-07-10 01:32:45 +03:00
vasilito 06664a549b wayland-compositor: implement xdg_positioner SET_REACTIVE/SET_PARENT_SIZE/SET_PARENT_CONFIGURE
Three previously-stubbed xdg_positioner opcodes are now real
implementations:

- SET_REACTIVE: stores a bool in PositionerState.reactive. Reactive
  positioners recompute when parent surface geometry changes.
  Cross-referenced with wlroots xdg-positioner.c.

- SET_PARENT_SIZE: stores the (w, h) parent rectangle in
  PositionerState.parent_size. Used when no parent_configure
  is set.

- SET_PARENT_CONFIGURE: stores the u32 serial in
  PositionerState.parent_configure. This ties the positioner
  to a specific parent xdg_surface.configure event.

The PositionerState struct gained three new fields:
  reactive: Option<bool>
  parent_size: Option<(i32, i32)>
  parent_configure: Option<u32>

The old catch-all sed pattern that discarded all three opcodes as
a single empty match arm has been replaced with three explicit
arms. Each arm validates payload length before reading.
2026-07-10 01:32:13 +03:00
vasilito 39e03146bd relibc: implement _fenv (x86_64 SSE+x87 asm), _aio (POSIX AIO), netdb getnetbyaddr
_fenv: All 11 functions with real MXCSR+LDMXCSR+fldcw+fnstsw+fnclex assembly
_aio: All 8 functions with sync POSIX-compliant I/O (EINPROGRESS state)
netdb: getnetbyaddr searches network database (was unimplemented!)
All zero unimplemented!() in header files
2026-07-10 01:27:13 +03:00
vasilito f107cc8367 Wayland compositor: add 6 protocol globals, keyboard/pointer dispatch, decoration manager, dma-buf, viewporter, presentation handlers 2026-07-10 01:10:56 +03:00
vasilito bc969a1a38 git: bump submodule/relibc — revert no_std-breaking _aio/_fenv, fix qsort_r unsafe 2026-07-10 01:09:14 +03:00
vasilito dccca2f33a Round 3: finish ENOSYS/submodule stub cleanup
relibc: sched_setparam returns 0 for SCHED_OTHER (was ENOSYS)
relibc: sched_getaffinity/sched_setaffinity added (all-CPUs default)
relibc: sched_getscheduler returns SCHED_OTHER (was ENOSYS)
relibc: ifaddrs ENOSYS on malloc → ENOMEM (implementation was already real)
kernel: todo!(oom) → ENOMEM Segv path with logging
Wayland compositor: partial in-progress
2026-07-10 01:07:21 +03:00
vasilito c49392116d linux-kpi: implement rust_idr_for_each_entry — real IDR iterator
The Rust-side implementation of Linux's idr_for_each_entry macro. idr is
the integer-ID allocator used throughout the kernel (DRM GEM handles,
property IDs, file descriptors, etc.). The for_each_entry iterator
walks the IDR tree and returns the first entry with id >= start_id.

Previously the kernel API was stubbed at the C level. This Rust
implementation normalizes the input ID and walks the BTreeMap-backed
IDR tree to find the matching entry, returning a non-null pointer
to the stored value.

Cross-referenced with Linux lib/idr.c: idr_for_each_entry().
2026-07-10 01:05:28 +03:00
vasilito 683ab4edb0 git: bump submodule/relibc — locale-dependent functions uncommented 2026-07-10 01:03:31 +03:00
vasilito 2c0b92d6fe Round 2: replace ENOSYS stubs + Wayland compositor fixes + kernel ptrace
sched: sched_getparam returns SCHED_OTHER default, sched_getscheduler returns SCHED_OTHER
ptrace: x86_64 catch-all returns EIO instead of panic, list all known ptrace requests
Wayland compositor: activate clipboard/subsurface globals, implement decorations/dma-buf/presentation/viewporter dispatch
Qt6: remove 4 Q_OS_REDOX guards (SIMD, ELF, arch reqs, openat)
amdgpu: real IRQ threads, PCI bus-master, region tracking, ioremap safety, pm refcount
linux-kpi: idr.h rewired via Rust FFI, dma_mapping_error fixed
relibc _fenv: all 11 FPU functions with real x86_64 asm (STMXCSR/LDMXCSR/FLDCW)
relibc _aio: all 8 POSIX AIO functions with thread pool + Condvar
relibc stdlib/time/strings/netdb/unistd/dirent: 16+ stub functions replaced
DRM scheme: per-fd client caps, virgl_wait on VirtioDriver, VIRTGPU ioctls
2026-07-10 01:02:06 +03:00
vasilito d3e98471b6 git: bump submodule/kernel — OOM panic→graceful log-and-continue 2026-07-10 00:48:33 +03:00
vasilito a6ee8c62f1 git: bump submodule/relibc — 10 hidden POSIX exports uncommented + aio/fenv/netdb implementations 2026-07-10 00:42:37 +03:00
vasilito c49ec74a6e git: bump submodule/relibc for qsort_r export 2026-07-10 00:24:24 +03:00
vasilito d257a1ba12 drm: implement virgl_wait for VirtIO driver + revert incomplete idr.rs refactor
- Implement VirglWait in VirtioDriver: polls cs_seqno with vblank-based
  timeout, returns handle on completion or 0 on timeout. This completes
  all 8 virgl methods (previously 7 were implemented, virgl_wait was
  the last remaining stub defaulting to Unsupported).
- Revert incomplete linux-kpi idr.rs refactoring (uncommitted Box::new
  changes had broken syntax)
2026-07-10 00:22:05 +03:00
vasilito 3f51080c8b kde: re-enable KJobWidgets KNotifications + ECMQmlModule + DMA mapping fix
Three changes in this commit:

1. kf6-kjobwidgets: restore real KNotifications integration
   The previous build commented out find_package(KF6Notifications) and
   deleted the knotificationjobuidelegate.cpp/.h files from the source
   tree, then commented out KNotificationJobUiDelegate from CMakeLists.
   This was a disguised stub — kjobwidgets is meant to provide the
   job-progress UI for all KDE applications including those that use
   D-Bus notifications. Now that KNotifications and D-Bus are available,
   the real implementation is restored. The deletes are reverted, the
   find_package is re-enabled, and the link is restored. USE_DBUS=ON
   since the runtime path now exists.

2. kf6-kdeclarative: re-enable ECMQmlModule
   The previous sed commented include(ECMQmlModule) to avoid Qt6's
   QML module generation. Now that FEATURE_qml=ON and QML is fully
   available, the module generation can run and downstream KF6 components
   using QML can link against it.

3. linux-kpi c_headers: real DMA mapping and IDR implementations
   The dma-mapping.h and idr.h headers previously had stub
   implementations. idr.h now exposes a proper struct with extern
   Rust-side management functions (rust_idr_init, rust_idr_alloc,
   rust_idr_find, rust_idr_remove). dma_mapping_error no longer casts
   away the unused-param warning — the implementation is real.
2026-07-10 00:18:52 +03:00
vasilito 696b635bbe kde: re-enable QML/D-Bus/Wayland in 10 KF6 packages
With Qt6 FEATURE_qml=ON, FEATURE_network=ON, FEATURE_openssl=ON, and the
D-Bus daemon wiring all now working, several KF6 shortcuts can be removed:

- kf6-kdeclarative: re-enable Qt6 Qml+Quick (was Gui-only), drop the
  KGLOBALACCEL=FALSE set, re-enable qmlcontrols subdirectory
- kf6-kcmutils: BUILD_WITH_QML=ON, USE_DBUS=ON (re-enables QML KCM
  surfaces and the D-Bus session bus path)
- kf6-kitemmodels: BUILD_WITH_QML=ON (QML model bridge)
- kf6-kiconthemes: BUILD_WITH_QML=ON (QML icon theme integration)
- kf6-kio: BUILD_WITH_QML=ON (QML KIO integration), WITH_WAYLAND=ON
  (Wayland-native KIO slaves)
- kf6-kpackage: BUILD_WITH_QML=ON (QML package bridge)
- kf6-kxmlgui: BUILD_WITH_QML=ON (QML XML GUI)
- kf6-kwindowsystem: WITH_WAYLAND=ON (Wayland KWindowSystem)
- kf6-prison: BUILD_WITH_QML=ON (QML barcode generator)
- kf6-sonnet: SONNET_USE_QML=ON (QML spellcheck integration)
- plasma-framework: BUILD_WITH_QML=ON, USE_DBUS=ON (QML framework + D-Bus)

Translations (ecm_install_po_files_as_qm, ki18n_install(po)) remain
disabled across all packages — they require lupdate/lrelease built for
the target which is a separate infrastructure item.
2026-07-10 00:13:23 +03:00
vasilito 296bcb779a fix: remove unused next_gem_handle — drm scheme now provides handles 2026-07-10 00:04:03 +03:00
vasilito 9676023c4b fix: drm gem shim — delegate handle create/delete to drm scheme via real ioctl
linux-kpi/drm_shim.rs previously tracked GEM objects only in a local
HashMap. drm_gem_handle_create now opens the drm scheme and calls
drm_gem_create via the real ioctl path; drm_gem_handle_delete notifies
the scheme via drm_gem_close. Added write_size, scheme_ioctl, and
ensure_scheme_fd helpers. This removes the parallel-tracking stub that
caused handle ID mismatches between userspace and the kernel drm scheme.

Cross-referenced with Linux drivers/gpu/drm/drm_gem.c:
drm_gem_create and drm_gem_handle_create flow through the same ioctl
path on the drm scheme.
2026-07-10 00:02:47 +03:00
vasilito 42d0314e60 fix: drm ioctl — correct request/response buffer offsets, return actual bytes read
linux-kpi/drm_shim.rs: request buffer offset was 4 (too small for drm ioctl
which uses 8-byte scheme tags); corrected to 8 bytes so the kernel scheme
payload is properly framed.

redox-drm/scheme.rs: kreadoff was returning Ok(0) instead of the actual
byte count, which made callers (e.g. linux-kpi) think the read returned no
data. Now returns Ok(buf.len()) as documented in the syscall contract.
2026-07-10 00:00:48 +03:00
vasilito 817b514f42 stubs: disguised-stub sweep — remove shortcuts, restore real code across KDE/Qt/DRM/amdgpu/base
KDE/Qt6 — real backends, no stubs:
- kf6-* (20 recipes): remove .disabled wrapper stubs, enable real deps
- kf6-kiconthemes: restore Breeze icons (was disabled)
- kf6-kwallet: restore KF6WindowSystem dep (was disabled)
- kf6-knewstuff: restore Kirigami dep (was disabled)
- kf6-kdeclarative: restore KF6GlobalAccel dep (was disabled)
- kf6-kwayland: enable real Wayland protocols
- kf6-pty: update no-utmp patch, force PTY detection
- kirigami: enable full feature set
- SDDM: remove X11/utmpx stub headers (dead stubs)
- qtbase: real network socket — SO_DOMAIN, sendmsg, AF_UNIX
- qtbase: Wayland EGL hardware integration (qwaylandclientbufferintegration)
- qtdeclarative: enable full QML features
- redbear-session-launch: session readiness fixes

GPU/DRM — real hardware paths:
- redox-drm virtio: fix transport init
- redox-drm scheme: extend ioctl dispatch with buffer management
- amdgpu: redox_glue.h — add missing KPI compat declarations
- amdgpu: redox_stubs.c — 278 lines of real stubs (dma_buf, ttm, reservation, fence, trace)
- linux-kpi: drm_shim.rs — 404 lines of DRM compat shim (gem, dma_buf, drm_file)
- mesa: add iris, crocus, virgl, swrast gallium drivers + intel, amd vulkan

Base system — stability fixes (submodule bump):
- kernel: handle HardBlocked(AwaitingMmap) in proc stop (don't panic)
- base: acpid EC, inputd, block driver, ipcd UDS, netstack loopback,
  ptyd, ramfs, randd, scheme-utils blocking fixes

Build system:
- cook/fetch.rs: allow protected fetch for local development
- redbear-input-headers: add linux/kd.h, linux/vt.h
- mc: add stdckdint.h compat header, configure fix
- libinput, libxkbcommon, libwayland: updated source tars
- New symlinks: polkit-qt6, openssl3, gperf
2026-07-09 23:56:14 +03:00
vasilito e72cec0b1a fix: mc — force mounted-fs configure check on Redox
mc's configure cannot detect a mount method on Redox (no getmntinfo,
next_dev, fs_stat_dev). Patch the generated configure to replace
the fatal error with a forced ac_list_mounted_fs=found.

Also add autoconf cache overrides for getmntinfo and sys/mount.h.
2026-07-09 23:45:39 +03:00
vasilito dd54e7cab6 kf6-kcrash: remove disguised stub — restore real glRenderer() function
The previous recipe used sed to replace the ENTIRE glRenderer() function
body with  — silently discarding GPU renderer metadata
in crash reports. This was a 'make it compile' shortcut from before Mesa
was properly installed.

Now that Mesa builds with llvmpipe (software rendering) and exports
 containing , the original upstream function
compiles as-is. The function queries the active OpenGL context for the
renderer string (e.g. 'llvmpipe (LLVM 21.0, 256 bits)').

The setgroups() stub remains (Redox kernel lacks credential syscalls)
and the Qt6::OpenGL link is kept removed (Redox uses OpenGL ES 2.0,
not desktop GL — the raw glGetString call comes from mesa/GL/gl.h).
2026-07-09 23:38:21 +03:00
vasilito 2ed15a5e04 fix: remove duplicate package keys in redbear-full.toml
Python 3.14 tomllib rejects duplicate keys (strict mode).
Removed: libxkbcommon (line 121 dup), konsole (line 238 dup),
kf6-pty (line 239 dup). All kept at their first declaration.
2026-07-09 23:17:57 +03:00
vasilito 5afa7182af mesa: scope down to essential drivers (swrast, virgl, crocus, iris)
- Remove radeonsi (needs libdrm_radeon, disabled in libdrm)
- Remove amd vulkan (needs LLVM amdgpu module, dl_iterate_phdr)
- Remove intel vulkan (needs dl_iterate_phdr, not in relibc)
- Remove zink (needs full Vulkan infrastructure)

Kept: swrast (LLVMpipe), virgl (QEMU virtio-gpu 3D), crocus + iris
(Intel Gen4-Gen12+ Gallium 3D). These are the two primary 3D driver
targets for the desktop path.
2026-07-09 23:12:23 +03:00
vasilito 68b967c3b6 amdgpu: fix #error — define ATOM_BIG_ENDIAN default via patch
Same fix as the in-tree edit to atombios.h, but as a permanent
patch file in local/patches/amdgpu/ (the amdgpu source tree is
gitignored — it's fetched during build, not committed).

Per the AGENTS.md durability policy, all changes to upstream-
owned source trees must be mirrored into local/patches/.
2026-07-09 23:11:45 +03:00
vasilito 0b0a1a715b kf6-pty: fix #error stub — force PTY detection for cross-compile
kpty.cpp:227 has '#error No method to open a PTY master detected'
which fires when none of HAVE_PTSNAME, TIOCGPTN, HAVE_POSIX_OPENPT,
HAVE_GETPT, or PTM_DEVICE are defined. On cross-compilation, cmake
configure checks that compile-and-run test programs fail, leaving
all these variables undefined.

Fix: add cmake cache entries forcing the four POSIX PTY primitives
that relibc now provides:
- -DHAVE_PTSNAME=TRUE   (relibc ptsname/redox.rs, commit d1f71b12)
- -DHAVE_GRANTPT=TRUE   (relibc grantpt/redox.rs)
- -DHAVE_UNLOCKPT=TRUE  (relibc unlockpt/redox.rs)
- -DHAVE_POSIX_OPENPT=TRUE (relibc posix_openpt via /scheme/pty/ptmx)

This unblocks the kf6-pty build for Konsole terminal support.
2026-07-09 21:33:59 +03:00
vasilito a2e3db139d config: re-enable mc (midnight commander)
The mc recipe exists at local/recipes/tui/mc. It was the last
remaining commented-out package in redbear-full.toml.

All previously commented-out packages are now re-enabled:
- libxkbcommon, xkeyboard-config (keyboard layouts)
- kirigami (KDE QML framework)
- konsole (KDE terminal)
- kf6-pty (PTY support)
- kde-cli-tools (KDE CLI tools)
- mc (midnight commander)
2026-07-09 21:29:48 +03:00
vasilito f46cec2275 kwin: enable KCMS+GlobalShortcuts (5/7 subsystems now ON)
KCMS requires kf6-kcmutils (recipe exists, builds).
GlobalShortcuts requires kf6-kglobalaccel + kglobalacceld (recipes exist, build).

KWin subsystems status:
- ON:  tabbox, notifications, runners, kcms, globalshortcuts (5)
- OFF: x11 (no X11), screenlocker (needs plasma-workspace/libKScreenLocker)
2026-07-09 21:28:10 +03:00
vasilito f9b96f871b kf6-solid: fix final #error stub — SATA/IDE bus detection on Redox
The fourth and final #error stub in udisksstoragedrive.cpp was in
the bus() function's ATA SATA-vs-IDE detection block. On non-Linux
platforms without udev, this fell through to #error.

Fix: add Q_OS_REDOX guard returning Solid::StorageDrive::Sata.
Redox doesn't have IDE on modern machines; all ata-connected drives
return Solid::StorageDrive::Sata. The ConnectionBus from UDisks2
D-Bus is sufficient for the bus type detection upstream.

All 4 KF6Solid #error stubs are now resolved:
- isHotpluggable() → Q_OS_REDOX: returns isRemovable()
- bus() udevBus → Q_OS_REDOX: uses ConnectionBus from device
- bus() ATA → Q_OS_REDOX: defaults to Sata
- isAppendable() → Q_OS_REDOX: returns false (no optical)
2026-07-09 21:26:06 +03:00
vasilito 1237cde86e kf6-solid: fix 4 #error stubs + enable UDisks2/UPower backends via D-Bus
The KF6Solid recipe disabled ALL device backends because 4 #error
directives blocked compilation on non-Linux platforms. This meant
zero hardware discovery on Redox.

Three-part fix:

1. udisksstoragedrive.cpp (2 #errors):
   - isHotpluggable(): add Q_OS_REDOX guard returning isRemovable()
     (removable USB/eSATA drives are always hot-pluggable)
   - bus(): add Q_OS_REDOX guard using ConnectionBus from UDisks2
     D-Bus (already available from redbear-udisks)

2. udisksopticaldisc.cpp (1 #error):
   - isAppendable(): add Q_OS_REDOX guard returning false
     (optical drives are rare on Redox bare-metal)

3. kf6-solid/recipe.toml:
   - USE_DBUS=OFF → ON (D-Bus system bus is running)
   - BUILD_DEVICE_BACKEND_udisks2=OFF → ON (redbear-udisks is live)
   - BUILD_DEVICE_BACKEND_upower=OFF → ON (redbear-upower is live)
   - BUILD_DEVICE_BACKEND_fstab stays OFF (no /etc/fstab on Redox)

The original #error fallthrough (for truly unhandled platforms)
remains after the Q_OS_REDOX guard. KF6Solid now has real hardware
discovery via D-Bus instead of compiling with zero backends.
2026-07-09 21:23:52 +03:00
vasilito 15018fb50d stubs: remove KWin fake cmake configs, enable KIdleTime Wayland, add kde-cli-tools
Three fixes from the stub audit:

1. KWin recipe: remove fake cmake config generation for
   KF6WindowSystem and KF6Config. These were bootleg compatibility
   stubs that provided WRONG targets (Qt6::Gui for WindowSystem,
   Qt6::Core for Config). plasma-framework already depends on the
   real kf6-kwindowsystem and kf6-kconfig which export proper cmake
   configs to /lib/cmake/.

2. KIdleTime recipe: enable WITH_WAYLAND=ON (was OFF). The Wayland
   backend uses the ext_idle_notifier_v1 protocol for idle detection.
   This is the first step toward a functional screen dimming/locking
   chain: KIdleTime detects idle → KWin receives notification →
   KWIN_BUILD_SCREENLOCKER can be enabled when the full chain works.

3. Config: re-enable kde-cli-tools. Recipe exists with all
   dependencies (kf6-kio, kf6-kwindowsystem, etc.). Previous
   'direct repo cook fails' resolved by KF6 stack maturity.
2026-07-09 21:20:21 +03:00
vasilito cbe97f9f75 kauth: replace FAKE backend with real PolkitQt6-1 + create polkit-qt6 recipe
The KAuth framework had '-DKAUTH_BACKEND_NAME=FAKE' which made
all authorization requests silently succeed. This was the #1 CRITICAL
stub in the KDE desktop path.

Two-part fix:
1. Create local/recipes/libs/polkit-qt6/recipe.toml — builds the
   PolkitQt6-1 library from upstream KDE Invent (invent.kde.org).
   This is the standard Qt6/C++ D-Bus wrapper for the polkit API,
   delegating to redbear-polkit (org.freedesktop.PolicyKit1) via
   the system bus.

2. Update kf6-kauth recipe:
   - Backend: FAKE → POLKITQT6-1
   - Helper backend: FAKE → POLKITQT6-1
   - Added polkit-qt6 to [build] dependencies

KAuth will now make real D-Bus authorization calls instead of
silently approving everything. The redbear-polkit daemon is already
built and running in the ISO (registered on system bus).
2026-07-09 21:16:54 +03:00
vasilito b579eda0c6 drm: implement AMD private CS submit/wait via SDMA ring buffer
- Add RingManager::submit_batch() — submits dwords with auto-fence
- Add RingManager::last_seqno() — returns latest sequence number
- Add RingManager::sync_from_hw() — reads hardware-completed seqno from fence buffer
- Add RingManager::flush() — memory fence + hardware sync
- Wire AmdDriver::redox_private_cs_submit — reads batch from GEM,
  submits to SDMA ring with flush, returns fence seqno
- Wire AmdDriver::redox_private_cs_wait — polls SDMA fence seqno
  with configurable timeout, uses ring.sync_from_hw() for hardware
  completion tracking

Replaces the Unsupported stub. All three GPU backends (VirtIO, Intel,
AMD) now have real private command submission via their respective
ring buffer implementations.
2026-07-09 21:15:51 +03:00