summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-11 16:43:33 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-11 16:43:33 -0400
commit5fa773c2cd4e166d2c31a40aff9fb63e7534fec3 (patch)
tree871d394be07e1d8a991a2f85fa5c46cb0e8bd201 /scripts
parent1743c19465f4c024010d37e1fd96e9192cdc4525 (diff)
downloadopen-iov-5fa773c2cd4e166d2c31a40aff9fb63e7534fec3.tar.gz
open-iov-5fa773c2cd4e166d2c31a40aff9fb63e7534fec3.zip
vgsp-sema: scope channel deletion to the owning RM client (ISSUE-0002)
Handles are per-client, but the FREE path unregistered any channel whose numeric handle matched the freed object, with no client check. r77 root cause of the third-client pma scrub hang: the boot session's CeUtils scrubber channel (h=0x2, gpfifo=0x120064000, entries=4096) was unregistered when an unrelated class-0x2080 object with handle 0x2 in client 0xc1d00011 was freed. The guest kept using the live channel for the scrub; the service no longer pumped it, its pushes were never decoded and the channel-buffer finish payload (pbGpuVA+0x6c004) was never written, so scrubCheckAndWaitForSize polled forever (sysrq stack: ceutilsUpdateProgress -> channelReadChannelMemdesc). Channel registration now records h_client (the RM alloc header's client) and deletion matches (h_object, h_client); a missing client on either side keeps the handle-only behaviour. Re-registration keeps the counter/release slots only for the same (handle, client) pair. Live proof from the hung VM: sema_probe translates the finish-payload VA 0x12006c004 to pa=0x10f962004 aperture=ram - the word the guest polls is reachable; the channel was simply invisible to the pump.
Diffstat (limited to 'scripts')
0 files changed, 0 insertions, 0 deletions