# DF-4995 — `irq_source_info_dcn10[]` leaves `DC_IRQ_SOURCE_DC{1..6}_VLINE0` with NULL `.funcs`; generic set/ack dereference it

**Files:** `sys/dev/drm/amd/display/dc/irq/dcn10/irq_service_dcn10.c:245-331` (table),
`sys/dev/drm/amd/display/dc/irq/irq_service.c:118,152` (unguarded deref — shared, DF-4932/DF-4713 family)

Verbatim-replica verification (hardware-gated kernel trigger — no AMD GPU in the
guest; the in-tree trigger is additionally caller-gated/latent, see VERDICT.md).

## Build

```sh
sh build.sh     # cc -O2 -Wall -std=gnu11 [-DFIX_DF4995]
```

## Run

```sh
sh run.sh       # baseline then fixed
```

## Expected

Baseline (table + dispatch verbatim):
- enum walk prints `VUPDATE1=72 VBLANK1=78 DC1_VLINE0=84 DC6_VLINE0=89
  DAL_IRQ_SOURCES_NUMBER=90`
- exactly six entries have `.funcs == NULL`: `table[84]` … `table[89]`
- controls: `find_irq_source_info` rejects index 90; `PFLIP1` set programs its
  HUBPREQ0 enable register (generic path, dcn10 pflip `.set==NULL`); `HPD1` ack
  runs the dcn10-local `hpd_ack` (polarity write observable:
  0xffffffff → 0xfffffffb); the `to_dal_irq_source_dcn10` walk (13 src_id × 13
  ext_id incl. 0xdead) maps 168 combos to covered sources and **0** to
  84..89 — the IH-driven entry can never synthesize a VLINE0 source (latent)
- trigger: `dal_irq_service_set(DC_IRQ_SOURCE_DC1_VLINE0)` →
  `dal_irq_service_ack` → `info->funcs->ack` with `funcs==NULL` →
  **Segmentation fault, exit 139** (kernel equivalent: page fault at address
  ~offsetof(.ack) ⇒ panic). Deterministic across runs (`run.2.log`).

Fixed (vline0 dummy entries + `!info->funcs` guards in set/ack): the dummy
handler logs and returns false; no crash; exit `0`.

Fix compile of the real module: `amd_fix_apply.log` + `amdgpu_module_build.log`
(fix.diff applied to guest `/usr/src` single-fix; `amdgpu.ko` fully rebuilt
under `-Werror`, RC=0, zero `error:`/`warning:` diagnostics,
`irq_service_dcn10.c` compiled at log:578 with the patched md5 recorded at
log:790; sources reverted md5-verified pristine, `make clean` done).
