Conversation
… stacks
Three fixes for VMware desktop parity:
1. Enable SMP on VMware (was deliberately skipped):
- Add SMP_STACK_BASE_PHYS variable in boot.S — CPU 0 writes the
platform-correct physical stack base before PSCI CPU_ON
- Replace hardcoded 0x4100_0000 with percpu_stack_region_base() in
smp.rs, exception.rs, context_switch.rs, constants.rs
- On VMware (RAM at 0x80000000): stacks at 0x8100_0000
- On QEMU/Parallels (RAM at 0x40000000): stacks at 0x4100_0000
- Remove is_vmware() guard from SMP init in main_aarch64.rs
2. Fix mouse click getting permanently stuck in drag:
- Root cause: press sustain mechanism deadlocked with compositor_wait.
After physical release, sustained latch kept mouse_state() returning
buttons=1, compositor_wait saw no change, BWM never woke, sustain
counter never decremented. Permanent deadlock.
- Fix: mouse_state() (peek) now returns raw MOUSE_BUTTONS only, not
buttons|pressed. compositor_wait detects physical release immediately.
- Remove sustain mechanism entirely — simple latch + swap(0) on consume
is sufficient for fast click-release detection.
3. Network on VMware still broken (documented, not fixed):
- VMware presents Intel 82574L (8086:10d3), not VirtIO
- e1000 driver is x86-only and only matches 0x100E
- Needs e1000 aarch64 port (separate branch)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…nostics - Port Intel e1000 driver to aarch64 for VMware Fusion (Intel 82574L, device ID 0x10D3). The driver is pure MMIO so no arch-specific code needed — just remove the cfg guard and handle the e1000e EEPROM register layout difference (DONE=bit 1, ADDR_SHIFT=2 vs bit 4/8). Falls back to RAL/RAH MAC read when EEPROM fails. - Wire e1000 into aarch64 net stack: auto-detect in driver init (when VirtIO net unavailable), VMware NAT config (172.16.45.x/24, gw .2), e1000 polling in process_rx, transmit, and MAC address paths. - Fix mouse click-stuck deadlock with compositor_wait: add has_pending_press() non-consuming peek for latched button presses. compositor_wait checks this at both early and post-wake points so fast press-release cycles aren't invisible. - SMP diagnostics for VMware: add PSCI CPU_ON 32-bit function ID fallback (HVC32), MPIDR logging, detailed error reporting. SMC conduit defined but not called (unsafe without EL3). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Per-endpoint USB HID button tracking: VMware's dual mouse endpoints no longer race on button state. Each endpoint's buttons tracked independently, merged via OR so one can't cancel the other's press. - Partial drag redraw: compose_partial_redraw() limits VRAM writes to the union of old+new window bounds during drag, eliminating full 9.2MB VRAM copies per frame on SVGA3. - Window bounds +3px for drop shadow coverage in dirty rect calculations. - e1000 softirq polling in timer interrupt for VMware network RX. - VMware DNS (172.16.45.2) added to resolver auto-detection. - e1000 HHDM mapping on aarch64, RCTL_BSEX removal. - SVGA3 cursor update on mouse-only composite frames. - Memory subsystem ram_base_offset for VMware aarch64. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
compose_partial_redraw()limits VRAM writes to the union of old+new window bounds during drag, replacing full 9.2MB screen copies. Major drag performance improvement on SVGA3 STDU.Test plan
🤖 Generated with Claude Code