| Commit message (Collapse) | Author | Age |
| |
|
|
| |
topology/index args
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
boot, clear the DS latch after each window
The active indexed draw's vertex/index buffers resolve through the client's
page tables to vidmem pages whose emulated BAR1 shadow is empty (no emulated
upload path ever populated it), so the engine fetched zeros and the draw
stored nothing. Three delivery paths now cover the page: a real-FB VID leaf
for launch fetch pages (QMD pointers, never the data-fill surface) and for
vertex streams when every shadow byte is zero; a sysmem-backing copy when the
same VA also has a nonzero SYS mapping; otherwise the existing shadow page is
used untouched. Render-target pages keep their shadow identity so the copy-out
can still ship stores back to the guest.
The fixed constant buffer is discovered per boot: the captured
SET_MME_SHADOW_SCRATCH(0x18) value is authoritative, the historically observed
base is a gated fallback, and a resolved real page is remembered for later
misses. The DS HWW ESR latch is now also cleared (W1C) after each replayed
window, so a failed window cannot poison the next window's entry state.
Validated with three supervised cycles (r1497-r1499): the active streams read
the client's real vertex floats, the real MVP resolves, poison stays at 0-1
per run, and the engine clears the render target to opaque black
(dump_vidmem 0x200000 = ff000000) with the guest window still all black -
the remaining wall is geometry coverage, not data delivery.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
contiguously
- Remember the last fixed-CB page that resolved through a SYS source and
passed the matrix gate; a later resolution miss (or a method-page answer)
reuses it instead of zeroing the seed page with the synthetic identity.
Only a boot with no validated read ever uses the identity fallback. Do not
skip the write on an unchanged hash: the seed page lives in the client's
screen allocation and the guest can rewrite it between launches.
- Treat the CALL_MME_MACRO(2) vertex stream as one range: map [base,end) into
a fresh contiguous fetch line and rewrite both ends from it, preserving the
client's stream length across 4 KB boundaries. Unresolvable pages map the
module zero page (a zero vertex, never a fault). The generic per-word pass
remains the fallback.
- Diagnostics: cb-copy logs the first 8 seed-page words and the cached flag;
MME-VSTREAM-LINE dumps the resolved base page (client VA, HPA, page count,
first 8 words).
- Evidence: r1494 (poison 11/17 -> 1/16, real vertex floats at the stream
bases, CB cache verified live with src=vaswalk -> src=cached-real) and
r1495/r1496 (the active draw's vertex/index page is an all-zero vidmem
shadow page while the data exists in guest sysmem - the new wall).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
header-only VS image
The GL draw's VS was reading two wrong inputs. First, the fixed-CB copy
resolved the client VA through a learned/FB layer first, so it read the
emulated BAR1 vidmem shadow - a buffer the engine never writes - and
delivered unrelated vidmem (r1490 first=09037223 00000004; r1482
oscillated between a float row, method words and zeros). Resolve the CB
the way the engine does: channel VAS, every registered VAS page-table
walk, then the GR relocation resolver; only a SYS answer is content-valid
and an FB answer is flagged. The matrix gate now requires four
normal-magnitude floats in c[0x0][0x80..0xbc] (r1492 accepted a method
page as a matrix); a rejected read authors the identity MVP.
Second, the captured 1536 B VTG upload is spliced at a page boundary: the
delivered image was the SPH header plus ZERO SASS, so the VS executed no
code. Reject captured program images whose SASS body [0x80,min(len,0x200))
is zero (the real-upload ring record, the 020a0481 cache and the window's
own upload all pass the gate) and deliver the built-in known-good VTG
image (the client's own SPH V4T1 020a0481 + SASS) at the bind VA instead;
sema_gl_vs_img=0 restores the old behaviour.
Diagnostics: cb-matrix/cb-const dumps of every VS-read constant block,
SPH-ALIAS code4 words at the bind, and MME-VSTREAM post-relocation
stream/limit/address payloads.
r1491-r1493 (VP_MODE=6, RT0=1): the bind page now shows the real SASS
(code4=ff047321 0000a0ff ...) and the CB/identity delivery is logged, but
the draw still produces no fragments (retirement 0-3/900 = the forced MME
seed pages only; xwd decoration rows only). Next wall: the vertex
attribute/staging fetch (slot-57 0x39c8 data and the staging scratch
0x36/0x37), not the shader image or the fixed CB.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
VA-colliding allocation cannot receive the draw
The SURF-PRELUDE target pair was patched once per capture generation and
then reused; the re-patch test was dead because gsp_sema_gr_surf_recs()
only fills in the VA when it returns true and the code negated the call,
so 'want' could never be computed. A later draw whose ~10-page SYS
allocation sits at the same 0x1204xxxxx VA as the X server's 1280x720
screen inherited the X server's 900-page target; the engine's RT pair then
named the client's command/operand buffer, which is why the 'surface' held
method words and copy-out saw no engine pixels.
Add gsp_phys_gr_surf_launch_target(): only a complete contiguous rec run
for the captured surface may use its data-rec bounce lane; a partial run
falls back to the boot-time contiguous alias built from the captured
bind's VAS pages (the real screen HPAs). Re-patch whenever the cached pair
differs from that effective target (SURF-PRELUDE retarget); RT0 copies the
same words, so the RT0==RT1 design is unchanged.
r1490 (VP_MODE=6 RT0=1, r1476-args): 15 launches, poison=0, retarget
have=0xa000000 want=0x15e0000 for the partial lane then 900-page targets,
output retirement up to 3/900 with 2 copy-out pages changed by engine, and
a non-empty 3.69 MB xwd. New wall: the draw still produces no raster
fragments - the only changed pages are the forced MME constant-buffer
pages inside the screen (offset pages 768/772/773, 0xff000000 fills).
Also harden tools/guest-diag/qga_fetch.py (retry open, long timeout,
atomic .part write, clear error exit) for evidence capture.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
LOAD_CONSTANT_BUFFER without its selector state
A chunked GL draw whose earlier chunk was dropped (prelude LOAD-ONLY or the
r1447 arming window hold) replayed the remaining chunks' calls alone; the
constant-buffer selector (0x2380) lived in the dropped chunk, so the bug2548370
macro's LOAD_CONSTANT_BUFFER(0x2390) class-errored (ErrorCode 3) and the
engine poisoned (badf1201 sentinel: pc=513/mac=0xf1 are its artifact, not a
macro). Propagate the stream-relative chunk offset through the candidate and
submit path, keep a per-push STREAM-DAMAGE record of the lowest dropped chunk,
emit later chunks calls-held (the proven-safe shape), never arm the arming
window-hold on a damaged stream, and start a fresh section at stream_rel==0.
r1487: the exact r1485 damaging shape now retires clean (events=5, no poison)
and the next chunk is captured; r1486 (holds off) still poisons because the
first launch runs against a partially packed prelude, confirming the dropped
chunk is the cause, not the hold release.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
as immd13, and base the SPH region on the bound program's shadow page
- SVC_GR_PUSH_WORDS / GSP_PHYS_GR_RAW_WORDS raised 2048 -> 4096: the beef
full-frame push is 12288 B / 3072 words, so the 2048-word capture tail
failed the 3D mark (raw_ok=0 fit_ok=0) and the launch fell back to a
239-word stub, losing the real 2115-word draw. Now '3D stream chunked
window=1429 words -> 4 chunk(s)'.
- SET_SHADER_EXCEPTIONS (0x1528) is emitted as the client's immd13
(0x8000054a) and skipped when the window already carries it; the
remaining 0x1528 in the log is the client's own benign write.
- sema_gl_sph_region_bind (default 1): the SPH region base is the first
bound program's relocated shadow page, not the forced 0x1500000 pool
base; r1484 latched the fetched SPHs (0,019a0f00,019a0200,0,0,019a0000)
with ds=86040646 (region mismatch), r1485 uses base 0x19b0000 bind
0x19b0900 and the DS accepts (ds=80000000).
- r1484/r1485: the screen now shows gear-class pixels (xwd bbox spanning
the 800x600 window, multicolor); GUEST-WIT shows RT0 page 0 written. The
remaining wall is the MME draw macro 0xf1 / pc 513 poison on the first
calls+window launch after the arming hold is released.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
a cross-VAS 10-page operand buffer
The PS SPH has MRT_ENABLE=0 (writes RT0); the beef window binds no colour
target of its own, so the last trusted 0x800..0xbff run (the X screen
surface 0x120400000, 1280x720, 900 pages) is the render target. Its pages
were resolved through the global VA-keyed pin/ledger, which conflated
clients: the beef client's own injected pin for VA 0x120400000 (a SYS
staging/operand buffer holding SASS/method words) shadowed the X server's
surface VAS and cut the set at 10 pages. Capture the surface's source VAS
and resolve its pages through that VAS in the fill, bypassing the pin
override for this page set. Re-patch the SURF prelude when the launch's
rec base differs from the cached one, and copy the emitted SURF run's
target/geometry into the RT0 run so RT0 == RT1 every launch (was hardcoded
to the 0xa relocation half).
r1483: the beef retirement is now 0/900 pages of the visible surface (was
0/10), RT0-BIND target=0xa000000, data[0] va=0x120400000 pa=0x100000, n_data
=900, 6 launches, poison=0. The engine still stores nothing: GR-STATE sph is
zero at retire and the launch traps at method 0x1528, so the next wall is
making the pipeline program bind visible to the DS, not the RT VA.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
buffer to the engine-visible pages
- inline-apply writes the image into the guest HPA whenever the page is kept
at the guest VA (code_keep_guest), not only for stream3d windows; a shadow
copy is useless when the engine fetches the guest page (r1470: guest=0 VS
then lost to the window-0 shadow copy).
- the standalone 0x180/0x1b0 context-init upload pair (outside any C597
section) is also recorded in the GRCE destination ring, so a later draw
window can find the client's real VTG image at its bind VA.
- sema_gl_cb_copy_to / sema_gl_cb_src_va: copy the client fixed-CB page into
the forced, mapped MME seed page before the launch, so the vertex shader
reads the client's transform constants instead of screen/stale data. Falls
back to a synthetic identity MVP when the client VA cannot be walked.
- cache any push chunk whose first word is a real SPH (020a0481 VTG /
000a1482 PS) and use it as the program-record fallback when the window's
own bind-VA upload was never captured (the init push's continuation chunks
are otherwise judged implausible and never reach the ring).
- r1481/r1482: the real VS SPH+code and PS are applied guest=1 at the bind
VA, the client CB page resolves and is copied, poison=0 over 9-10 launches;
render-target writes still zero - the remaining wall is the draw's
render-target/colour-target binding (the beef window's output retirement
set is 10 pages of shader-like data, not the 900-page screen surface).
|
| |
|
|
| |
(PS 384B IPA/MUFU/EXIT, VS 1408/1536B ALD/FFMA transform); with the PS delivered and raw viewport mode 6 the engine writes render-target pages and copy-out pages for the first time (3/900 pages, 1 vidmem page, a few non-black pixels), leaving viewport coverage and guest-side VS delivery
|
| |
|
|
| |
shader-crutch finding: the 144-byte vs_hex/ps_hex test image overwrote the client SASS and writes no position; removing it lets real SASS survive but stores remain zero, so the next checks are the VS position/attribute fetch and the client upload path
|
| |
|
|
| |
0x1614) when the pair model is closed and restore pair_open/open_split from the launch-entry snapshot when a window is dropped/held, so dropped windows are pair-state no-ops; fixes the EC0x0d 0x1614/0x2098 poison that follows a held/dropped BEGIN
|
| |
|
|
| |
use live slot 33 (CALL 0x3908) / raw driver words with scaleY=+360, clip 0x0c00/0x0c04 and 0x193c=0x21800 (ZERO_ONE|FRUSTUM_XYZ); sema_gl_rt0_bind binds SET_COLOR_TARGET(0)=0x800 plus SET_CT_SELECT count=2 (the PS has MRT_ENABLE=0 and writes RT0 while the client binds only RT1); both preludes gated to windows with a CALL run so Xorg 2D windows are untouched; r1465: CALL(33) executes (mac=0x21) on the beef window, RT0 bound, DRAW blocked by the 0x1614 pair poison
|
| |
|
|
| |
first CALL run (default 1) so the 0x2080 SET_PIPELINE bind lands first, or before the first 0x3910 (pos 2); mode 4 = clip rect with the verified (size<<16)|origin pixel encoding; r1462: 3 DRAWs executed with pos=1 VP and still zero RT stores
|
| |
|
|
| |
scale/offset (mode 1) plus optional pixel-centre/clip-control (2) and clip-rect (3) at the head of replayed 3D windows; the client push never writes the viewport family; default 0 = legacy bytes; r1459: FE accepts the words, draws still store nothing -> insertion position vs pipeline-group binding is the next variable
|
| |
|
|
| |
is an execution gap (11 launches, zero data pages changed), window decode names the missing viewport family; next = gated viewport prelude
|
| |
|
|
| |
every 4KB page of the BAR1 shadow before the GR publish and diffs after the output-retirement wait, reporting any changed page outside the sampled output set; vidmem_hash_snap/vidmem_hash_diff manual module params; default 0 is a strict no-op
|
| |
|
|
| |
across windows + entry snapshot; PAIR-CHAIN-ENTRY-ELIDE post-branch compaction (drop [0x2054,0x2158] runs on windows that enter with a pair already open, gated pair_chain && entry_open && pairs_gen!=0) fixing the r1453b #11 0x2058/BEGIN_END_ACTIVE leak; resets at both wipe sites; 0=legacy
|
| |
|
|
| |
drain (WAIT_FOR_IDLE<-0) before each following normal/normal BEGIN so each END closes exactly one pair; held-call branch pair elision gated on pairs_gen==pl_gen; per-launch/context-wipe resets; guest BEGIN data carried verbatim (no normalisation site exists); 0=legacy bytes
|
| |
|
|
| |
0x3490/0x3494/0xd24/0xd25 via gsp_phys_mme_shadow_read (8/boot cap, zero behavior change) so sema_mme_state_d24/d25 can be seeded from the engine's own state instead of blind values
|
| |
|
|
| |
153/154, fdfb4673..bbda751e): first window retires + first engine stores (CONT-104), macro execution to completion + IRAM readback gate (CONT-107/109), first engine-changed RT pages (CONT-111), slot-34 DRAW execution (session-154b), and the 0x2090/VA-0 walls down (79545530/CONT-118); walls = poison lottery, raster RT/surface binding, present/capture; CUDA front backgrounded (physical-engine green, D2H staged); snapshot now covers both goals - companion graphics objective (M-GL1..M-GL6), ladder rows (OpenGL/X, Vulkan, video), graphics blocker entry
|
| |
|
|
| |
SET_PIPELINE(2) runs (method 0x2080; the guest's cold 0x20 word is refused EC4 by the FE on a windowless LOAD-ONLY carrier); exact mask (op in {1,3,5}, cnt!=0, (hdr&0xfff)<<2==0x2080), once-per-gen log + counter, 0=legacy; SPH-BIND log caps 16->64
|
| |
|
|
| |
BINDING(2)/(5)=0 data writes from the SPH-BIND emission (the FE rejects the 0x2090 word with Class Error EC4 when walking the window; the real client never emits 0x2090), keep the REG_COUNT(2)/(5)=0x1a runs; size guard 19->17 when dropped; 1 = legacy bytes
|
| |
|
|
| |
(entry=0 valid) + sema_gl_mme_golden_only=1 force-blanks non-golden called slots (stub/drop their CALL runs), overlay logs inspected/blank/maxa; tools/mme-audit: stdlib overlay-sim + booter-grammar walk + operand map + cross-boot table (decodes the r1448 slot-57 stall: IR 899-900 emits PIPELINE_BINDING(2) @0x2090 rejected only when the program-address pairs are carried)
|
| |
|
|
| |
moves the window drop to the one arming launch/gen (MME-WINDOW-HOLD) so the release launch carries calls+window together (the only 22x-clean r1443b shape; poison fires while the MME validates the loaded program on the first post-pack window launch); sema_gl_mme_strict_grace=8 fails the strict release's FE-idle term open (gsp_phys_gr_fe_idle is inert: ==1 exact vs real 0x0e0e0001-class); resets mirror CONT-118; 0=legacy
|
| |
|
|
| |
sema_gl_mme_hold_strict (calls release only when pre_words_out==0 && fe_idle() && live_gen==pl_gen) and sema_gl_mme_fe_defer (busy-defer the load-only carrier at svc_gr_request before fill/consume, bounded 4 consecutive defers/gen with GIVEUP log) - both default 1, independent live A/B, 0 = legacy-equivalent
|
| |
|
|
| |
default 1) - calls run only after the carrier executed AND settled, fixing the first-carrier pc=513/word-1539 part-2 pre-residency poison; resets in iram_gate_fail/WEDGE/PARK-RECOVER; seed-log caps 16->64; +60 net
|
| |
|
|
| |
params sema_mme_state_d24/d25 + fail-closed seed emissions after d19 (param>captured>skip, 3d-reloc) - the d28-forced slow path reads the 0x349x states after d19; +235/-1
|
| |
|
|
| |
0xD19 emission (param sema_mme_state_d19 > captured, 3d-reloc, fail-closed) - the d28-forced slow path reads an unseeded d19 and faults the consumer at VA 0 (HUBCLIENT_PD); +129/-1
|
| |
|
|
| |
prelude (guard 13u->19u, headers 0x20020823/0x20020853, values 0x1a/0x0) - supplies the per-stage validation input the DS checks on the synthesized stage slots (a2040x00/SPH9 wall); constants shaped from the captured j=1 record, fail-closed (no relocation)
|
| |
|
|
| |
sema_gl_sph_bind lever (first slot-34 execution), DS SPH validation wall decode (a2040800/a2040a00, region=0/0) + variant results
|
| |
|
|
| |
regression (gates off restores macro execution), golden+gates-off first engine-final stores
|
| |
|
|
| |
lottery loses on partial boots (13/55 slots; r1405/6/10/11/12) and the called DRAW_IAB slot 34 gets keep-clamped+call-dropped, so no draw ever executes; this overlay serves called-but-uncaptured SA slots from the driver's own generated macro code (word-exact vs a live full capture: 34=0x265/75w, 39=0x29f/69w, 40=0x2b6/69w, 48=0x337/21w, 51=0x350/12w, 57=0x364/189w) via an untracked .gitignore'd build input kernel/golden-mme-tu104.h: slot_kept/slot_stubbed consult it, the window scan counts golden slots as covered (no stub pair, calls survive), and the pack builder overlays the golden words+SA pairs into ir_pack after the capture fill (mode 1 = uncovered only, force=2 = overwrite all); golden-filled slots are byte-shape-identical to captured ones (0x11c pairs + one 0x114 ONEINC chunk) so the IRAM gate and downstream consumers are unchanged
|
| |
|
|
| |
strict-anchor pins land at +23.5 s = one 20 s throttle while the GL setup generation lives ~6-12 s, so the 60216-byte init push is consumed unreadable before its pins land; allows STREAM_ANCHOR_RETRY_S=2 cycles)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
cause)
The r1405 priv-error wedge traced live: the draw window calls
CALL_MME_MACRO(34)/(57) while the MME capture holds 13 SA slots
(0..12, IR <= 0xe9); keep_mask=~0 exempted every slot from stubbing,
so those calls ran, the MME fetched an instruction the packed program
does not hold (info=badf1201 pc_valid=1 pc=513 mac=0x1f1 miss=1
ir=badf1201) and poisoned the lane; the second recovery's hard re-arm
left the engine unresponsive (probe rc=-110, GP_GET frozen).
Fix (one variable): gsp_phys_gr_slot_kept() - a keep_mask slot is only
honored when the capture covers it (SA entry present AND its IR
instruction entered the replay); otherwise the proven r1186 safe
combination applies: SA stub + CALL-run drop, never a fetch of
non-resident code. The decision reads the live SA table per window, so
a later capture generation that covers the slot releases it
automatically. Bounded MME-KEEP-CLAMP witness. Knob
sema_gl_mme_keep_clamp (default 1; 0 = r1405 all-real A/B).
|
| |
|
|
| |
pinrej/pushfail visibility (carrier read >=6 GiB)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ALL maps first)
The r1398 client-mem sweep failed on a window that parses: with 74
qualifying rw mappings ahead of the nvidiactl mapping holding the MME
0x114 pack, their full per-map sweeps burned 37 808 of the global
8 192-candidate budget before the target map was ever reached, while a
manual _window_accept of that map accepted at idx 1/2/0/3. Near-first
PER MAP is not enough when the budget is global; near-first ACROSS maps
is.
Collect the candidate maps first and run two phases: phase 0 tries the
19 neighbourhood offsets for every map (cheap, not charged against the
budget), phase 1 runs the remaining full sweep under the historical
8192 bound. Content gates unchanged (_window_accept on every candidate
before any pin). k==None/0 (unknown family / family base) keeps its
single bounded full-sweep phase exactly as before.
SESSION 153 r1398; validation on the next cycle (r1399): the strict
client-mem parse of 0x4001004's 60216 B window should now succeed and
re-emit its 15 pins.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
host GL-family exception)
The r1397 cycle located and content-validated the 60 216 B GL setup push
(the MME 0x114 carrier: 15-page window at a client rw-s mapping, 3728 code
words / 74 SA pairs) and the strict client-mem parse emitted all 15 pins -
yet the host entry stayed unreadable (src=255) on every re-read: pages
0x400a000..0x400e000 never reached the pin table (no injection line, no
re-resolution), so the per-page read always failed on a missing tail page,
and the loose family-learn could additionally overwrite a validated page
with a wrong one (weak 0x200-byte prefix learn).
Two one-line-class changes, mirroring the proven CE-window rationale
('a pin batch that raced in must be allowed to land again even when the
pair is unchanged'):
* guest_pin_stream: a strict-window success stashes its content-validated
pairs (_strict_reemit) and re-emits them every ~4 s, so a page dropped
in burst delivery heals without a new resolution and without defeating
the done latch (r1397: the missing pages were never retried).
* pin_gr_stream: re-asserts GL setup-push family pairs (0x4000000-0x4160000,
0x4200000-0x4300000, 0xcc80000-0xcc90000, 0x6f00000-0x6f10000) like the
CE window, instead of dropping unchanged repeats via the seen dedup.
SESSION 153 r1397b; follows the r1397 offline brief Change 1 (pagemap
window fallback, kept).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
setup-push family
A strict demand anchor (the host's exact [entry_va,+len) read window, e.g.
the 60 216 B setup push) whose full-window content parse fails on every
candidate used to set strict_pending, and the pend_bases rule then skipped
every loose demand VA of the same GL family for as long as the anchor was
pending - the host demanded the push's pages individually, the guest
suppressed them, and the entry stayed unreadable for the whole generation
(r1396: entry 8 unreadable=1 on all generations while its sibling entries
read fine; generations churn every ~12 s, the content sweeps take longer).
Add _pagemap_window_pin(): on a failed strict resolve, pin the anchor
window's pages directly from the client's /proc/pid/pagemap (the r586
mechanism already proven for the non-family draws). The anchor VA is the
host's own GPFIFO entry VA, so a present client page is by definition its
translation; no content gate and no family learn, so no k/(area,adj) risk.
Partial presence heals on the ~2 s anchor resend. A 'strict-pagemap:' log
line reports present/total pages either way (0 present => kernel-resident,
the fallback cannot help).
SESSION 153 r1397; scan: r1397 offline brief Change 1.
|
| |
|
|
| |
setup push moved to 0x4250110)
|
| |
|
|
| |
patch knob (sema_gl_mme_irpatch_off/_val)
|
| |
|
|
| |
4-page GUEST-WIT shown budget ('if (shown < gsp_phys_gr_wit_shown)') so a store-rich launch dumps the full changed va/pa list; recipes carry 1024 - TASK 1 ANSWERED (surface): xwd/window path reads the RT va=0x120400000 pitch 5120 (proof via server GetImage ops sema-op2d h=0x1000013 dst=0x120350000 src=0x120658000 spitch=5120 so=1/480 => src base 0x120658000-480*5120=0x120400000); FIRST ENGINE-CHANGED RT PAGES of the campaign r1385: output retirement wait 2/900 pages changed (settled) + bounce copy-out 2 pages written back 2 changed by engine + OUT-ALIAS-WIT va=0x120705000 partner_va=0x120700000; but FB shadow at those pages reads same uniform weave invisible; GATE1 BLACK+STATIC: xwd root nz 0, shim frames=217 mean=0.0283 diff 0, FB shadow static while glxgears 445 FPS (8MB diff over 10s, md5 e85173d8 identical 5/5) - new /proc/kcore reader kcoredump.py/kscan*.py (region nv_vgpu_bar_init+0x15a SVC_VIDMEM base 0x120200000); HAZARD recorded: 64KB host probes into unverified regions panicked guest kernel (anon_vma), regions restored, SINGLE-PAGE PROBES ONLY - next: give changed pages priority in copy-out witness (OUT-PAGE-WIT with own budget; 12-line budget exhausted by OUT-UNCH flood so va->hpa of engine-changed pages never printed); then diff FB shadow via kcore reader across that copy-out to capture the engine's exact pixels; if weave then DRAW (0xd78) still isn't rasterizing and A/B moves to an IR-word patch knob on slot34's emitted BEGIN/SET_VERTEX_ARRAY_START/DRAW_VERTEX_ARRAY/END - SESSION 153 r1382-r1385
|
| |
|
|
| |
+ invalidates live_gen (r1377 deadlock: recovery reset pre_emit_off=0 but left pack_off at end -> split emitter can=0->packed=1 zero words -> MME-PRELUDE part gen=3 off=0 words=0/3083 forever, latch never re-set, MME never started); (2) PARK-RECOVER same rewinds; (3) gsp_phys_gr_fetch_miss_log promotes live_gen on GP_GET advance (readback-free promotion on timeout path; r1377 lost it FETCH-WIT timeout engine-fetched then pending_gen cleared); (4) gsp_phys_mme_fast_sample latches poisoned when sample's FIRST read is poison (r1378 MME-FAST begin esr=badf1201 ds=badf1201 grfifo=badf1201 -> esr badf1201->80000000 was missed; stale latch+live then ran macro 57 on wiped context sked mme_esr=80000004 mme_mac=0x39, FE parked pc=513 mac=0xf1 mmegen=1) - PROGRESS (not gate claim): r1378 MME-FAST launch macro-status=000393a2(mpc=930 mac=0x39 run=0) MACRO 57 EXECUTED TO ITS LAST INSTRUCTION; STORES GREW 9/909 -> 238/906 -> 305/903 (r1378); r1379 clean boot (0x mme_esr=80000004, no WEDGE-RECOVER) float-vertex stores 4/906 50/970; guest 5447 frames in 12.1s = 448.994 FPS (fence-level only not pixels); GATE1 BLACK both boots: r1378/r1379 xwd 1280x720 nonblack 0 max 0; r1379 staging page-note va=0x4500000 pa=0x1035f1000 has 2517 nonzero bytes but content is a DESCRIPTOR TABLE (28cd1000 00000001 68cd1000 ffff8a74) not pixels; every retire 0/903 - A/B bisect inconclusive (flipped live but no new beef launches, client moved to software release; needs insmod arming) - next: arm wedge bisect at insmod on fresh boot (sema_gl_mme_keep_mask=0 sema_gl_mme_nop_drop=0xffffffffffffffff before client launches): clean => executed macros' emitted methods (0x2390/0x34a4 CB writes) park FE; still poisons => win_drop non-call families (SURF-PRELUDE/SHADER-EXC 0x1528/SPH-REGION/SA-REARM); then output retirement must move off 0/N before sema_screen_blit (src=drawable GPA dst_off=0x200000 pitch 5120) can present - SESSION 153 r1378-r1379
|
| |
|
|
| |
sema_gl_mme_iram_gate_build (default 1) independently control the two gsp_phys_gr_mme_iram_gate() readback sites (poll-break ~28019, pre-doorbell builder ~20300; comment records r1374 healthy->FULL chronology + CONT-107 probe-park note) - TASK-1 SUPERSEDED: 'LOAD0 stall at slot 58' EXPLAINED+DISMISSED: no call to slot 58 exists (all 8 3D-raw windows CALL_MME_MACRO runs hit only lanes {0,2,34,39,40,48,51,57}; 0x39d0 CALL_MME_MACRO(58) ZERO times; SA complete MME-PRE-SA[57] entry=0x364 / [58] entry=0x3a3); word-exact: slot 57 = mmeCodeOGL_C597_LOAD_CONSTANT_BUFFER_BUG2548370 (63 instrs 0x364..0x3a2), slot 58 = mmeCodeOGL_C597_LOAD_CONSTANT_BUFFER_OFFSET (2 instrs 0x3a3..0x3a4); Mesa sim: slot-57 with real params ends after last instr 5/5 consumed -> next fetch 0x364+63=0x3a3 = observed pc = POST-COMPLETION FETCH POINTER not stalled LOAD0; INFO_EX=0x4 = DATA_FIFO_SIZE constant not exception; A/B VERDICT r1376 break=0 build=1 still wedges at first calls-bearing launch; r1377 BOTH SITES OFF still wedges but RECOVERS (WEDGE-RECOVER priv-error poison seen grfifo=0x1 self-cleared) -> debug-port readback NOT the wedge cause, wedge is IN THE FIRST WINDOW REPLAY ITSELF; FIRST NONZERO STORES r1377 output retirement wait 2/901 pages changed 214ms settled + GUEST-WIT retire 4/908 changed va=0x4500000 pa=0x5ac146000 pre=0x3fb2ca25c057d17b post=0x0 engine-authored writes; MME executed r1376 pc=931 ir=71cc0301,18c0034a,1c34238f; r1377 never started (pc_valid=0, gate off => no live promotion); GATE1 black - next: bisect wedge-causing window content at first window+live launch (r1377 config no readbacks): A/B keep_mask=0 nop_drop=all (ALL call runs dropped) vs default; wedge gone => executed macros' emitted methods (0x2390/0x34a4 CB writes) park FE; persists => non-call families (SURF-PRELUDE/SHADER-EXC 0x1528/SPH-REGION/SA-REARM) then bisect win_drop families; follow-up readback-free live-promotion trigger (MME pc!=0 witness) - SESSION 153 r1375-r1377
|
| |
|
|
| |
gsp_phys_mme_iram_read3() spec-correct MME debug read per NV_PGRAPH_PRI_MME_DEBUG (ENABLE bit1 -> PC|RD-trigger bit2 -> poll DONE -> data in HWW_ESR_INFO4/3/2); gsp_phys_gr_mme_iram_gate() reads every covered SA entry compares to packed image auto-calibrates port address unit (resolved INSTRUCTION not word); gate at poll-break (before live-gen promotion) + builder (before releasing calls); on fail: hold calls clear prelude latch rewind pack/drain cursors; MME-LOAD-ONLY carriers (window elided while unverified so 0x114/0x118 IRAM load cannot be interrupted by window's DS/SPH poison); knobs sema_gl_mme_iram_gate/_max/_probe sema_gl_mme_hold_fe_idle - MILESTONE r1374: MME-IRAM-BASE resolved=instruction (entry) at entry=0x5; MME-IRAM-GATE pass break h=0xbeef0100 gen=3 base=1 checked=54 + pass build run=1,2,3; MME-LOAD-ONLY carrier window dropped until gate verifies; ILLEGAL_OPCODE = 0 OCCURRENCES (was every prior boot); live readback 4044d0=0x01B20006 (IRAM_PC=0x364) -> 0x40449c=31c28300 0x4044a8=1a05834a 0x4044ac=00000003 EXACTLY THE GOLDEN MACRO-57 GROUP; MME fetch latch mme_esr_info=100003a3(pcv=1 pc=931) ir=71cc0301,18c0034a,1c34238f MATCHING reconstructed image at 931; new wall: calls released yet beef launches park grfifo=07071602 (FIFO not-empty+FULL count 22) MME at pc=931 (slot 58 entry ENDNEXT waiting on LOAD0 INFO_EX=4); GATE1 black 0/900 - next: explain LOAD0 stall at slot 58 entry 0x3a3 (decode full released window call runs win_dec.py on MME-WINRUN dump: is slot 58 genuinely called or macro 57 falls through predicated ENDNEXT 0x3a0/0x3a1 not taken); if fall-through snapshot/seed MME STATE predicate reads; if real call feed params or stub slot 58 to proven stub PC; r1374 first boot where full program runs this deep - SESSION 153 r1369-r1374
|
| |
|
|
| |
0x404498=NV_PGRAPH_PRI_MME_CONFIG, real INFO2/3/4 = 0x40449c/0x4044a8/0x4044ac (tu104 dev_graphics_nobundle.h), fixed in gsp_phys_mme_fast_sample/mme_regs_log/fault_regs_log/gr_state_rb_log/sked sample[17]/reg-probe; MME-FAST budget 48->256 launches; sema_mme_post_ms post-timeout re-spin (2000/12000/20000); DS-FAST per-stage SPH/region snapshot at DS latch transition + DS-FAST2 report-mask clear 0x405844/c; MME_STATUS_MACRO 0x4044b4 - DECISIVE: at trap PC 0x364 (macro 57 entry) MME fetched IR words are ZERO (MME-FAST info=10000364 pc_valid=1 pc=868 mac=0x0 ir=00000000,00000000,00000000; MME-REGS timeout esr=80000000 pc=868 ir zeros) NOT the golden group 0x00000003,0x1a05834a,0x31c28300 - host-sided pack verified verbatim CONT-105; IRAM debug port 0x4044d0 also reads zero at 0x364 while r1364 same port read golden first words at PC=0 (port real); DS-FAST first-sight: ds a2040a00->badf1201 poison floods whole PRI incl macro-status=badf1201(mpc=513 run=1), clears ~1ms later; SPH bind falsified as DS wall (bind=0 r1364/65/68 poison SPH10+18 a2040800/a2040a00 M_PIPE_STAGE=VSA|PS vs bind=1 r1363 same); trap timing r1367: ILLEGAL_OPCODE relayed +14.0s after GR LAUNCH FAILED timeout 1500ms yet GUEST GR LAUNCH OK elapsed_ms=35870 ok=7 block completes gr_swrel=0 engine-authored release; GATE1 black 0/901 - next: after each prelude pack read back IRAM via 0x4044d0 (IRAM_PC<<15|RD=2 data in INFO4/3/2) and re-emit/gate pack until IRAM reads back golden words at slot entries (prime suspect: 0x114 pack writes issued while PRI block poisoned, capturable at every DS fault); once fetch at 0x364 returns golden words ILLEGAL_OPCODE vanishes and macro 57 completes - SESSION 153 r1364-r1368
|
| |
|
|
| |
m=0x3498] 0xD26 .. [0x34a8] 0xD2A ahead of every replayed 3D window; exact method<->state mapping verified gf100mme.h RM_MME_FIRST_USABLE_SHADOW_SCRATCH=8 -> 0x1E/0x1F/0x20/0x21/0x22+8) + sema_gl_mme_pack_split (default 1; pack drains SA-once + whole-instruction 0x114 ONEINC IR chunks across launches, generation-keyed cursor reset alongside drain cursor, latch only on final chunk) - BOTH CONT-104 NEXT FIXES FALSIFIED AS WALL: r1362 state seed d26..d2a=00000000/80000000 still ESR 0x404490=0x80000004; r1363 pack split works mechanically (pack-part ir_words=1332/2799 sa=54 split=1 -> pack ir_words=2799 runs=55) wall unchanged; OFFLINE PROOF r1363: 55x 0x114 runs sum 2799 == image words zero overlaps pack==verbatim for every slot, live macro 57 body = golden 189/189 words - THE IR IMAGE IS COMPLETE AND CORRECT; NEW CHRONOLOGY r1363: GR LAUNCH FAILED timeout 1500ms want=0xc0ffee02 -> 'Shader Program Header 11/18 Error' + ESR 0x405840=0xa0040800 -> WEDGE-REARM -> FIRST ILLEGAL_OPCODE + ESR 0x404490=0x80000004 -> WEDGE-RECOVER priv-error poison grfifo=0xbadf1201 recovery #1; DS SPH POISON + TIMEOUT PRECEDE MME TRAP -> candidate chain: PRI poison 0xbadf1201 drops replay writes -> MME fetch reads poisoned path; GATE1 black 0/901 zero stores - next: catch MME latch WITH ITS INFO at first sight (host ESR/INFO/INFO2 sampler or hook before GSP-RM clears it) to settle whether live fetch at pc=0x364 matches proven-correct image + fix DS SPH-poison chronology: run sema_gl_sph_bind=0 from boot and/or verify poisoned-PRI write-drop via 0x114 shadow (if PRI poison drops replay writes no IR-content fix can ever land) - SESSION 153 r1362-r1363
|
| |
|
|
| |
+ mme_hold_calls also holds real CALL runs while front-end not settled (MME-CALL-HOLD log gains '[FE-not-idle (CONT-104)]'; prevents r1359 MME-ILLEGAL_OPCODE race - calls executing while previous prelude carrier's SA/IR writes still in flight) - 0x2390 IDENTIFIED + FIX VALIDATED: 0x2390 = NVC597_LOAD_CONSTANT_BUFFER(0); live trap reproduces exactly offline on real captured macro (./mme_ref slot57_gold.bin 1 5 -> EMIT mthd=0x2390 data=0x00000005 + mthd=0x34a4 data=0x00000004); root cause: winning config dropped slot 0 (nop_drop=0x5) and slot 0 = SETUP_FIXED_CONST emits CB selector setup (0x2380<-0x7000, 0x2384/0x2388<-STATE 0xd18 parts, 0x238c<-arg*4); without it FE rejects first CB write class error 3 ERROR_INVALID_OPERATION and parks; r1358 (slot 0 kept + seed): MME-FAST end events=1 NO class error NO 0x2390 - MME RAN and CB writes LANDED; wall moved to CB mapping: r1358 MMU Fault SCC @ 0x0_019d4000 FAULT_PTE VIRT_READ (seeded CB +0x4000, seed xlat mapped one page only); r1359 (seed to surface alias MME-SEED scratch 0x18 <- 0x000a3000 xlat=1): FIRST STORES EVER 'output retirement wait: 2/901 pages changed after 221 ms (settled)'; new wall r1361: calls-kept launch idle FE full prelude gen=3 words=3083 -> ILLEGAL_OPCODE ESR 0x404490=0x80000004, MME PC=0x364 / macro 0x39 = illegal instruction INSIDE macro 57 (golden MME runtime state wall); GATE1 black - next: seed golden MME runtime state slot 57 reads STATE 0xD26-0xD2A (gf100mme.h bug2548370: PAGE_ALLOCATION_COUNT/ZERO_VIEW_OFFSET/LAST_UPDATED_CB_SELECTOR_B_C/LOAD_CONSTANT_BUFFER_OFFSET/LAST_UPDATED_LOAD_OFFSET; methods 0x3498/0x349c/0x34a0/0x34a4/0x34a8) ahead of window, or prove/repair IR image at instruction 0x364 (split packed drain; single-block pack needs ~2960 words > 2048 cap) - SESSION 153 r1358-r1361
|
| |
|
|
| |
ARTIFACT - qmd_dst_mem never set for stream3d (all three sites !stream3d-guarded 25707/25733/25741) so the sentinel test was vacuous; GP_GET proves the engine fetches (FETCH-WIT h=0xbeef0100 slot=4 gpget 4->5 engine-fetched); (2) DEADLOCK: calls-kept launch was 2126-2142 words (1613-word prelude re-emit) > CONT-79 ~2050-wall so it never started (r1345/47/48 begin grfifo=00000001 events=0 timeout) - FIXES: sema_gl_mme_prelude_live_skip (default 1; skip forced 1613-word prelude re-emission once the generation's final part was carried by an engine-executed launch; live-gen set at poll break only when GP_GET advanced, cleared on timeout) + sema_gl_mme_nop_pair (default 0; elide program-pair runs method space [0x2054,0x2158]) + FETCH-WIT instrumentation (poll break/timeout gpget A->B engine-fetched, gpget/gpput in GR LAUNCH submitted, honest 'engine fetch n/a (no QMD deposit...sentinel vacuous)' wording); r1356 fix1: words=500, launch starts (FETCH-WIT timeout slot=6 gpget 6->7) then traps CONT-101 pair trap=80002058 data=019a0900; r1357 fix1+2: MME-PAIR-DROP 25 word(s) window=386->361, words=475, 0x2058 gone, FE advances to CALL runs: trap=80102390 data=00000005 (mmegen=1) park grfifo 0f0f1602->00000001 = FIRST MME-GENERATED METHOD WRITE AT THE WALL; GATE1 black 0/900 pages - next: FE rejects first MME-generated method 0x2390 (mmegen=1 data=5): identify 0x2390 role (macro-port family; check MME-WINRUN/3D win dumps + mmeref + direct lane h=0x1000013) and why generated write traps (CONT-80: bare DATA/macro-port write without open macro context parks; generated port may need macro context conserved); keep mode stays OFF - SESSION 153 r1356-r1357
|
| |
|
|
| |
channel for 0x3460 SET_MME_SHADOW_SCRATCH(0x18), log up to 24 hits, publish first value via gsp_sema_mme_scratch18_get) + sema_gl_mme_seed/seed_val/seed_xlat (emit [op1 cnt1 m=0x3460][value] ahead of every replayed 3D window; xlat translates value page through launch shadow mapper before >>8) - DECISIVE: client NEVER writes 0x3460 (0 hits across r1348-52 all channels); seed works end-to-end (MME-SEED scratch 0x18 <- 0x000a0000 va=0xa000000 xlat=1) but wall not cleared: MME-FAST trap=80002058 data=019b0900 grfifo 04041602->00000001 park events=2 - trap is window's own relocated program pair (pair addr=0x2054 va=0x4350900 -> 0x19b0900) and fires BEFORE MME consumes seed; DESIGNED FIX WORKS LIVE: sema_gl_prog_guest_va=Y -> PROG-GUEST-VA keep addr=0x2054 va=0x4400900 (Tier-1 identity; operand verbatim) -> ZERO trap=80002058 thereafter; r1352 (keep from boot) got session's FIRST MME-generated evidence (gen0=1) then lottery outcome events=4 (poison) esr->0xbadf1201 WEDGE-REARM engine still wedged; GATE1 black 0/900 pages NO-STORES - next: boot r1347 richest config (nop_drop=1<<0 slot 0 dropped) PLUS sema_gl_prog_guest_va=1 from insmod (removes 0x2058 trap class the seed cannot touch); check stores before re-arming slot 0 with seed; 0xd18 golden value open but subordinate (vGPU client never emits it) - SESSION 153 r1348-r1352
|