Hi Emerson I find the wall of text in the cover letter, commit messages and code comments extremely difficult to parse.
With AI, generating code is cheap, reviewing is expensive. I don't think anyone on the list can or should review a patch series like this. Please make sure you understand the code and deslop the AI-generated content before posting. After reading v1, I think I know what you try to solve, but I'm not going to accept a patch series like this. A lot of the patches don't seem to be related to the problem you want to solve. Thanks, Wei On Wed, Oct 07, 2026 at 04:07:38PM -0300, Emerson Busson wrote: > This series moves VMBus ring backing to the chunk allocator and keeps the > allocation, GPADL ownership, and mapping references together. It preserves > the exported four-argument interfaces while allowing the private allocation > paths to carry ownership and sharing policy. > > A review of the original vzalloc fallback noted that CCA and TDX guests > without a paravisor need direct-map page transitions. This revision uses > contiguous chunks for buffers that must be host-shared, transitions each > page through page_address(), and combines the chunks with vmap(). Ordinary > guest-private buffers retain vzalloc-style allocation. > > Allocation and compatibility > ---------------------------- > > Every ring allocation uses the chunk allocator. Ordinary guests and buffers > kept private by channel policy use vzalloc(). For host-shared buffers in an > encrypted or isolated guest, the allocator uses contiguous chunks and > transitions them page by page. Guest-memory encryption is selected > independently of Hyper-V isolation. > > Ring consumers select co_ring_buffer. External buffers and the legacy > allocator select co_external_memory. The exported allocator and caller- > decrypted GPADL prototypes retain four arguments throughout all fourteen > patches. UIO migration follows its release support. > > The address, page and chunk arrays, and embedded GPADL belong to one buffer. > The allocation extent, host-described GPADL extent, and retained allocation > extent remain distinct. Interior GPADL duplication preserves the existing > exported interfaces. Prepared owned buffers avoid repeat decryption, and > HV_GPADL_BUFFER_DECRYPTED is removed. > > Lifetime and host acknowledgement > --------------------------------- > > A host rescind alone does not prove GPADL revocation. For a known-live GPADL > whose channel identifier is still held, teardown posts a request and waits > for a matching GPADL_TORNDOWN message before clearing ownership. Synthetic > rescind notification cannot replace this acknowledgement. Unknown creates, > local removal, invalid identifiers, failed posting, and timeouts retain > ownership. > > Waiter removal shares the response-list lock with matching replies so a late > acknowledgement cannot use a freed waiter. Released owners retain pages > across mapping references and failed page-state restoration. Reclaimer > shutdown cancels pending timers under the owner lock and requeues only work > that was actually canceled; running callbacks drain through workqueue > destruction without re-executing freed embedded work. > > Sysfs mappings install no vm_ops and release the bridge pin on every setup > outcome. UIO mappings hold their pin through VMA close. Page, count, and > protection snapshots share the owner-lock boundary. New tests call the real > sysfs wrapper, insert actual PTEs, and check readable bytes and page > references through success and partial -EBUSY. They do not execute a full > kernfs syscall or full device destruction. > > The final four fixes use vzalloc() for guest-private requestor arrays and > bitmaps, kvzalloc_obj() for guest-private RNDIS descriptors, handle NULL > control requests on empty NetVSC completions, and use kvzalloc_obj()/kvfree() > for the large guest-private NetVSC device object. > > Qualification on the exact fourteen-patch series > ------------------------------------------------ > > The code mails are pinned by series/SHA256SUMS. Applying all fourteen to > 93f51579e7df248780214094418f205253383cc5 produces source tree > e6fe523ca92ce30ea7edb265b8a26bf20a867c47. > > The VMBus workflow builds x86_64 and arm64 with W=1 and C=2, passes sparse, > and passes all 69 linked x86_64 QEMU KUnit cases. The distinct WSL backport > passes all 26 of its KUnit cases. CoCo source invariants pass on both > architectures; these are necessary static checks, not confidential-hardware > qualification. > > Exact-source Hyper-V runtime, including controlled host rescind: > https://github.com/emersonbusson/WSL2-Linux-Kernel/actions/runs/37650468077 > > On both windows-2025 and windows-latest, the candidate passes 100 bind/unbind > cycles, bounded buddy fragmentation, channel rebind, UIO mapping teardown, > and the controlled host-origin NIC removal. Each report records > HYPERV_DRILL_HOST_RESCIND status=PASS, target_absent=yes, > matching_events=1. Both report zero splats and faults, restore the measured > kernel settings, and return lifecycle map accounting to the settled > operational > baseline. Captured owner accounting reports 722 created, zero unobserved > creates, 715 reclaimed, and seven still active; active owners are not > classified as leaks. Trace capture has no overruns or dropped events, and > the disposable VM, VHD, and switch cleanup passes. > > The baseline is an intentional negative control. It reproduces the expected > fragmented-allocation failure without guest faults; the workflow accepts > that exact signature as a passing control. It is not a candidate result. > > WSL backport runtime matrix: > https://github.com/emersonbusson/WSL2-Linux-Kernel/actions/runs/37645708153 > > That separate backport passes the actual Windows candidate matrix. Each > runner completes 64 commands with matching teardown acknowledgements, > zero unacknowledged requests, no backing or tail growth, and all six > shutdown checks. The shutdown retry path is covered by 40 local parser and > refusal regressions; the live candidate runs required zero retries. These > results qualify the WSL backport's measured ordinary behavior, not the > mainline mail series. > > Qualification limits > -------------------- > > The Hyper-V runtime uses the ordinary x86_64 vzalloc path. It does not > execute confidential chunk transitions. Full memory saturation, the > chunked CoCo fallback on hardware, SEV-SNP, TDX without a paravisor, Arm > CCA, and complete VMBus module unload and retained-owner destruction remain > unqualified. The exact mainline series has not been installed or booted on > the daily WSL host; the installed kernel and Windows WSL matrix are a separate > backport. The baseline is one intentional fragmentation negative control, > not a matched same-configuration diagnostic-count comparison for every patch. > No confidential-platform result is inferred from ordinary Hyper-V or static > checks. > > --- > Emerson Busson (14): > hv: vmbus: convert ring backing through the chunk allocator > hv: vmbus: validate chunk buffer allocation and cleanup > uio: hv_generic: describe buffers for owned allocation > hv: vmbus: add KUnit tests for GPADL post failure injection > hv: vmbus: add KUnit test for order-zero allocation fallback > hv: vmbus: cover all shared-page policy combinations > hv: vmbus: distinguish host rescind from local channel unload > hv: vmbus: retain backing until ownership and references clear > hv: use owned VMBus buffers in NetVSC and UIO > hv: vmbus: pin buffer pages across UIO mmap to close the reclaim race > hv: vmbus: vmalloc requestor metadata > hv: netvsc: allocate RNDIS request descriptors with kvzalloc_obj() > hv: netvsc: handle a NULL request address on empty completions > hv: netvsc: use kvzalloc for device state

