DF-2309 / master2309.log
=== pre-loop allocator state (malloc type 'temp') ===
Type Count MemUse SlabUse Limit Requests
temp 469 332K 0 390M 15.0K
vm.stats.vm.v_free_count: 832270
=== calibration: 20 iterations (expect ~15.6 MB consumed if real) ===
DF-2309 usrbufs leak loop: nmsgs=100000 iters=20
per-call leak if real: 800000 bytes; total if real: 15.3 MB
start: v_free_count=832270 (3251.1 MB free)
iter 1 faults=1 v_free_count=832350 (delta_from_start=+80 pages = -0.3 MB consumed)
iter 5 faults=5 v_free_count=832853 (delta_from_start=+583 pages = -2.3 MB consumed)
iter 10 faults=10 v_free_count=830824 (delta_from_start=-1446 pages = 5.6 MB consumed)
iter 15 faults=15 v_free_count=830824 (delta_from_start=-1446 pages = 5.6 MB consumed)
iter 20 faults=20 v_free_count=829253 (delta_from_start=-3017 pages = 11.8 MB consumed)
end: v_free_count=829253 consumed=3017 pages = 11.8 MB
expected if leak real: 15.3 MB; expected if fixed: ~0 MB
faults=20/20
=== PHASE A: stock iic.ko, nmsgs=100000 x 300 (expect ~234 MB leak) ===
DF-2309 usrbufs leak loop: nmsgs=100000 iters=300
per-call leak if real: 800000 bytes; total if real: 228.9 MB
start: v_free_count=829253 (3239.3 MB free)
iter 1 faults=1 v_free_count=829253 (delta_from_start=+0 pages = 0.0 MB consumed)
iter 50 faults=50 v_free_count=819143 (delta_from_start=-10110 pages = 39.5 MB consumed)
iter 100 faults=100 v_free_count=810110 (delta_from_start=-19143 pages = 74.8 MB consumed)
iter 150 faults=150 v_free_count=799898 (delta_from_start=-29355 pages = 114.7 MB consumed)
iter 200 faults=200 v_free_count=790275 (delta_from_start=-38978 pages = 152.3 MB consumed)
iter 250 faults=250 v_free_count=779474 (delta_from_start=-49779 pages = 194.4 MB consumed)
iter 300 faults=300 v_free_count=770244 (delta_from_start=-59009 pages = 230.5 MB consumed)
end: v_free_count=770244 consumed=59009 pages = 230.5 MB
expected if leak real: 228.9 MB; expected if fixed: ~0 MB
faults=300/300
=== post-loop allocator state ===
Type Count MemUse SlabUse Limit Requests
temp 789 245M 0 390M 15.6K
vm.stats.vm.v_free_count: 769761
=== attribution: unload+reload iic.ko, memory must NOT come back ===
vm.stats.vm.v_free_count: 769897
(leaked chunks are global M_TEMP, not tied to the module)
=== PHASE B: apply DF-2309 fix.diff, rebuild iic.ko, re-run ===
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- a/sys/bus/iicbus/iic.c 2026-06-29 12:51:18.000000000 +0000
|+++ b/sys/bus/iicbus/iic.c 2026-10-15 00:00:00.000000000 +0000
--------------------------
Patching file sys/bus/iicbus/iic.c using Plan A...
Hunk #1 succeeded at 351 (offset 1 line).
Hmm... Ignoring the trailing garbage.
done
DF-2309 usrbufs leak loop: nmsgs=100000 iters=300
per-call leak if real: 800000 bytes; total if real: 228.9 MB
start: v_free_count=769799 (3007.0 MB free)
iter 1 faults=1 v_free_count=769799 (delta_from_start=+0 pages = 0.0 MB consumed)
iter 50 faults=50 v_free_count=769273 (delta_from_start=-526 pages = 2.1 MB consumed)
iter 100 faults=100 v_free_count=769273 (delta_from_start=-526 pages = 2.1 MB consumed)
iter 150 faults=150 v_free_count=769593 (delta_from_start=-206 pages = 0.8 MB consumed)
iter 200 faults=200 v_free_count=769273 (delta_from_start=-526 pages = 2.1 MB consumed)
iter 250 faults=250 v_free_count=769273 (delta_from_start=-526 pages = 2.1 MB consumed)
iter 300 faults=300 v_free_count=769273 (delta_from_start=-526 pages = 2.1 MB consumed)
end: v_free_count=769273 consumed=526 pages = 2.1 MB
expected if leak real: 228.9 MB; expected if fixed: ~0 MB
faults=300/300
=== final allocator state ===
Type Count MemUse SlabUse Limit Requests
temp 789 245M 0 390M 16.8K
vm.stats.vm.v_free_count: 769603