- May: Xiaomi Redmi 9 (lancelot), MT6769T / Helio G80, GPU Mali-G52 MC2 r1p0
- Kernel: mainline 6.18 (
~/linux-618trenctdagent), release6.18.0-gc75a6bdd2a48-dirty - Userspace: Debian 13 arm64, Mesa 25.0.7-2+deb13u1, compositor
phoc(wlroots, GLES2) - Ngay: 2026-08-05
Nguyen nhan chinh (do tin cay cao, chua co bang chung tren may that): mot loi
that su cua driver panfrost trong kernel <= 6.18, o duong xu ly page fault cua
tiler heap (drivers/gpu/drm/panfrost/panfrost_mmu.c). Loi nay tao ra vong lap
page fault vo tan tu duy tri: sau mot lan cap phat trang that bai (thieu bo nho),
driver vinh vien tin rang vung 2 MB do "da duoc map" trong khi thuc te chua map gi,
nen moi lan GPU cham vao dia chi do, handler tra ve "da xu ly xong" ma khong lam gi,
GPU fault lai ngay lap tuc. Vong nay chi ket thuc khi reboot.
Loi da duoc sua o upstream, vao kernel 6.19, nhung khong duoc gan Cc: stable
nen khong duoc backport ve 6.18.
Da lam: backport 2 commit upstream vao ~/linux-618, build xong artefact:
pmos/ml618-Image-gpu(sha256a44ccf26446b0b44780ced35f2fd855880d4973d334b03738cc4fc638bf99c2a)pmos/ml618-lancelot-gpu.dtb(sha256d80c1cf7f8e69b646462cc5b0758b7981da0cae2fefc7721fc1b34750b5989ec)
Khong can tarball module: CONFIG_DRM_PANFROST=y (builtin), va chuoi phien ban
kernel khong doi (6.18.0-gc75a6bdd2a48-dirty), nen module dang co tren may van dung.
Trung thuc ve muc do chac chan: chua flash, chua do lai. Xem muc 6 (nghi ngo con lai).
$ grep -E 'CONFIG_ARM64_(4K|16K|64K)_PAGES' ~/linux-618/.config
CONFIG_ARM64_4K_PAGES=y
# CONFIG_ARM64_16K_PAGES is not set
# CONFIG_ARM64_64K_PAGES is not set
Kernel dung trang 4K, dung nhu panfrost/mesa gia dinh. PAGE_SHIFT = 12.
CONFIG_ARM64_VA_BITS=48, CONFIG_ARM64_PA_BITS=48. Khong phai nguyen nhan.
arch/arm64/boot/dts/mediatek/mt6768.dtsi:
gpu: gpu@13040000 {
compatible = "mediatek,mt6768-mali", "mediatek,mt8186-mali", "arm,mali-bifrost";
reg = <0 0x13040000 0 0x4000>;
interrupts = <GIC_SPI 276 ...>, <GIC_SPI 275 ...>, <GIC_SPI 274 ...>;
interrupt-names = "job", "mmu", "gpu";
clocks = <&mfgcfg CLK_MFGCFG_BG3D>;
power-domains = <&spm MT6768_POWER_DOMAIN_MFG_CORE0>,
<&spm MT6768_POWER_DOMAIN_MFG_CORE1>;
power-domain-names = "core0", "core1";
dynamic-power-coefficient = <4687>;
operating-points-v2 = <&gpu_opp_table>;
#cooling-cells = <2>;
};
Doi chieu:
mediatek,mt6768-malikhong co trongdt_match[]cuapanfrost_drv.c, nen driver khop vaomediatek,mt8186-mali->mediatek_mt8186_data:num_supplies = 1 ("mali"),num_pm_domains = 2 ("core0","core1"),pm_features = GPU_PM_CLK_DIS | GPU_PM_VREG_OFF, khong coGPU_QUIRK_FORCE_AARCH64_PGTABLE.- Dieu nay dung cho MT6768: MT8186 cung la Mali-G52 MC2, cung 2 power domain, va
node GPU cua
mt8186.dtsigan nhu giong het. Quan trong: khong dinh quirkFORCE_AARCH64_PGTABLE(quirk do chi danh cho mt8188/mt8192/mt8370), nen bang trang van laARM_MALI_LPAE— dung cho G52. - Chuoi power domain MFG day du trong
mt6768.dtsi:MFG_ASYNC->MFG-> {MFG_CORE0,MFG_CORE1},mfgcfgnam trongMFG_ASYNC. mali-supply = <&mt6358_vgpu_reg>co trongmt6769t-xiaomi-common.dtsi,mfg_asynccodomain-supply = <&mt6358_vsram_gpu_reg>,mfgcodomain-supply = <&mt6358_vgpu_reg>.- Bang OPP trong
mt6768.dtsi(32 muc, 299 MHz .. 1000 MHz) khop chinh xac tung gia tri voi bang downstreamdrivers/misc/mediatek/base/power/mt6768/mtk_gpufreq_core.h(SEG_GPU_DVFS_FREQ0..31/SEG_GPU_DVFS_VOLT0..31).
=> DTS khong thieu gi gay job fault.
Toi tung nghi day la thu pham va da chuan bi patch. Da bi bac bo.
Phep do quyet dinh (do agent chinh chay tren may that):
echo 299000000 > /sys/class/devfreq/13040000.gpu/min_freq
echo 299000000 > /sys/class/devfreq/13040000.gpu/max_freq
-> 682 loi panfrost trong 90 giay
clk_summary: mfgpll = mfgpll_ck = mfg_sel = mfg_ck = mfgcfg_bg3d = 299000000
regulator: vgpu = 612500 uV, vsram_gpu = 850000 uV
dmesg: KHONG co dong loi nao ve opp / regulator / devfreq
612500 uV / 850000 uV la dung y het cap gia tri downstream cho 299 MHz
(SEG_GPU_DVFS_VOLT31 / FIXED_VSRAM_VOLT). Nghia la GPU dang o mot diem lam viec
hoan toan hop le, tan so co dinh, khong co chuyen OPP — va van loi 7.6 lan/giay.
Ket luan: DVFS khong lien quan. Moi thay doi ve clock/regulator/OPP toi da lam
deu da duoc hoan tac (git checkout drivers/clk/mediatek/clk-mt6768-mfg.c, va
khoi phuc nguyen van khoi &mt6358_vgpu_reg / &mt6358_vsram_gpu_reg /
&gpu_opp_table trong mt6769t-xiaomi-common.dtsi).
Do agent chinh xac nhan: card0-DSI-1 connected 1080x2340, 1 plane XR24,
crtc-0 enable=1 active=1, khong co dong underrun/underflow/vblank nao trong dmesg.
Glitch "nhap nhay o giua man hinh" xay ra dong bo voi cap loi GPU
(DATA_INVALID_FAULT + TILE_RANGE_FAULT, ~12 lan/giay). Day la loi GPU, khong phai
loi hien thi.
drivers/gpu/drm/panfrost/panfrost_mmu.c:562 (trong panfrost_mmu_map_fault_addr()):
bomapping = addr_to_mapping(pfdev, as, addr);
if (!bomapping)
return -ENOENT;
bo = bomapping->obj;
if (!bo->is_heap) {
dev_WARN(pfdev->dev, "matching BO is not heap type (GPU VA = %llx)", ...);
ret = -EINVAL;
goto err_bo;
}addr_to_mapping() tra ve mot mapping dang song (node drm_mm bi go khi BO bi
huy/purge), nen day khong phai use-after-free va khong phai shrinker purge.
Y nghia that: GPU page-fault ben trong mot BO thuong ma kernel tin la da map day du.
Dieu do dang le khong the xay ra — nen moi la dev_WARN.
Ma nguon 6.18, panfrost_mmu_map_fault_addr():
if (!bo->base.pages) {
bo->sgts = kvmalloc_array(...);
pages = kvmalloc_array(...);
bo->base.pages = pages;
refcount_set(&bo->base.pages_use_count, 1);
} else {
pages = bo->base.pages;
if (pages[page_offset]) {
/* Pages are already mapped, bail out. */
goto out; /* <-- tra ve 0 = "da xu ly xong" */
}
}
...
for (i = page_offset; i < page_offset + NUM_FAULT_PAGES; i++) {
/* Can happen if the last fault only partially filled this
* section of the pages array before failing. ...
*/
if (pages[i])
continue;
pages[i] = shmem_read_folio_gfp(mapping, i, GFP_KERNEL);
if (IS_ERR(pages[i])) {
ret = PTR_ERR(pages[i]);
pages[i] = NULL;
goto err_unlock; /* <-- pages[page_offset] DA duoc dat */
}
}Chinh comment trong kernel thua nhan kha nang "lan fault truoc dien mang pages mot phan roi that bai". Khi dieu do xay ra:
pages[page_offset]da khac NULL, nhung khoi 2 MB chua he duoc map vao bang trang GPU.- Lan fault sau tren cung dia chi:
if (pages[page_offset]) goto out;-> tra ve 0. panfrost_mmu_irq_handler_thread()tuong da xu ly xong, ghiAS_COMMAND_UNLOCK, cho GPU chay tiep.- GPU cham lai dung dia chi do -> fault lai ngay -> quay ve buoc 2.
Vong lap tu duy tri, khong bao gio thoat. Khop chinh xac voi quan sat: "restart phosh -> 0 loi trong 10 giay -> mot luc sau loi quay lai va lien tuc mai".
Vi BO bi anh huong nang nhat la tiler heap (Mesa cap phat 1 BO
PAN_BO_INVISIBLE|PAN_BO_GROWABLE 128 MB moi thiet bi, chinh la BO is_heap duy nhat),
nen hau qua la:
- job tiler (js=1) doc/ghi polygon list vao vung hong ->
DATA_INVALID_FAULT,TILE_RANGE_FAULT - job fragment (js=0) doc ket qua tiler hong ->
DATA_INVALID_FAULT,JOB_BUS_FAULT - glitch mot vung man hinh (mot so tile hong, phan con lai ve dung) = dung mo ta "nhap nhay o giua"
- ty le 621
DATA_INVALID_FAULT/ 12not heap typetrong 90 s: WARN chi in khi fault roi vao BO khong phai heap; phan lon fault roi vao chinh tiler heap nen khong in WARN, chi bao loi job.
mmu_map_sg() trong 6.18:
while (len) {
size_t pgcount, mapped = 0;
size_t pgsize = get_pgsize(iova | paddr, len, &pgcount);
ops->map_pages(ops, iova, paddr, pgsize, pgcount, prot,
GFP_KERNEL, &mapped);
/* Don't get stuck if things have gone wrong */
mapped = max(mapped, pgsize);
iova += mapped;
paddr += mapped;
len -= mapped;
}
...
return 0; /* luon 0 */va panfrost_mmu_map() cung khong kiem tra gia tri tra ve, roi dat
mapping->active = true.
Neu ops->map_pages() that bai (cap phat bang trang bang GFP_KERNEL bi tu choi khi
thieu bo nho), vong lap nhay qua vung do va di tiep. Ket qua: mot BO thuong
(khong phai heap) bi danh dau "da map" nhung bang trang GPU co lo thung. GPU cham
vao lo -> TRANSLATION_FAULT_3 / SLAVE FAULT -> panfrost_mmu_map_fault_addr() tim
thay mapping hop le nhung bo->is_heap == false -> chinh la WARNING o dong 562.
Day la duong sinh ra 12 lan/90 s WARNING "matching BO is not heap type".
Khong co bao cao cong khai nao ghep truc tiep chuoi matching BO is not heap type voi
Mali-G52 (da tim Mesa GitLab, dri-devel, patchwork). Nhung ca hai bug tren da duoc sua
o upstream, trong loat patch cua Adrian Larumbe (Collabora), merge vao 6.19:
| Commit | Tieu de | Vao kernel |
|---|---|---|
3d7c626716aa |
drm/panfrost: Check sgt to know whether pages are already mapped | 6.19 |
4da352cf8fb1 |
drm/panfrost: Handle page mapping failure | 6.19 |
f45f73c68c59 |
drm/panfrost: Handle error when allocating AS number | 6.19 |
b49c35ba0ce1 |
Fix page leak in panfrost_mmu_map_fault_addr() when THP is on | 7.0 (chi ap dung cho 7.0) |
- Cover letter: https://www.mail-archive.com/dri-devel@lists.freedesktop.org/msg567773.html
- Patch chinh + review: https://www.mail-archive.com/dri-devel@lists.freedesktop.org/msg567581.html
- https://github.com/torvalds/linux/commit/4da352cf8fb1
- https://github.com/torvalds/linux/commit/3d7c626716aa
Khong co Fixes: tag, khong co Cc: stable -> khong duoc backport ve 6.16.y/6.17.y/6.18.y.
Da kiem tra: khong co su lech chuan giua Mesa va kernel ve co heap.
src/panfrost/lib/kmod/panfrost_kmod.c anh xa
PAN_KMOD_BO_FLAG_ALLOC_ON_FAULT -> PANFROST_BO_HEAP, va
PAN_BO_GROWABLE -> PAN_KMOD_BO_FLAG_ALLOC_ON_FAULT (voi rang buoc
GROWABLE => INVISIBLE). Hai ben khop nhau. RFC "Use shmem sparse allocation for heap
BOs" van la RFC v2, chua merge. Panfrost chua duoc chuyen sang drm_gpuvm.
Ap dung 3d7c626716aa roi 4da352cf8fb1. Diem khac duy nhat so voi upstream:
- 6.19 doi ten
pfdev->dev->pfdev->base.dev; da doi nguoc lai cho 6.18. - Duong loi
err_put_pages:cuapanfrost_mmu_map(): upstream 6.19 goi ham nay khi da giu sandma_resvcua BO. Trong cay 6.18 naypanfrost_gem_open()khong giu lock do, condrm_gem_shmem_get_pages_sgt()tu lay/nha lock ben trong. Neu goi thangdrm_gem_shmem_put_pages_locked()se dinhdma_resv_assert_held(). Da bo sung lock:
err_put_pages:
/*
* Backport note: upstream (6.19) calls panfrost_mmu_map() with the
* BO's dma_resv already held. In this tree panfrost_gem_open() does
* not hold it and drm_gem_shmem_get_pages_sgt() takes/releases it
* internally, so acquire it here before dropping the pages ref.
*/
dma_resv_lock(obj->resv, NULL);
drm_gem_shmem_put_pages_locked(shmem);
dma_resv_unlock(obj->resv);
return ret;Noi dung sau backport:
mmu_map_sg()kiem traops->map_pages(), neu loi thi go nguoc phan da map (mmu_unmap_range()) va tra loi ra ngoai.panfrost_mmu_map()kiem tra loi, khong datmapping->active = truekhi that bai.panfrost_mmu_map_fault_addr()kiem trasgt->sgl(co that su da map chua) thay vipages[page_offset](chi biet trang da duoc doc ve chua) -> pha vo vong lap fault vo tan.panfrost_mmu_map_fault_addr()co them duongerr_mmu_map_sg:goidma_unmap_sgtable().
Build sach, khong warning.
drivers/clk/mediatek/clk-mt6768-mfg.c— hoan tac (git checkout).arch/arm64/boot/dts/mediatek/mt6769t-xiaomi-common.dtsi— khoi phuc nguyen van&mt6358_vgpu_reg,&mt6358_vsram_gpu_reg, va xoa bo phan&gpu_opp_tabletoi them. Xac nhan banggit diffkhong con hunk nao lien quan GPU/regulator/OPP.
| File | sha256 | Ghi chu |
|---|---|---|
pmos/ml618-Image-gpu |
a44ccf26446b0b44780ced35f2fd855880d4973d334b03738cc4fc638bf99c2a |
33 806 344 byte |
pmos/ml618-lancelot-gpu.dtb |
d80c1cf7f8e69b646462cc5b0758b7981da0cae2fefc7721fc1b34750b5989ec |
44 789 byte |
uname -rkhong doi:6.18.0-gc75a6bdd2a48-dirty-> module dang co tren may van dung, khong canlancelot-modules-gpu.tar.gz.CONFIG_DRM_PANFROST=y(builtin), thay doi nam trongImage.- Luu y: cay
~/linux-618dung chung voi cac agent khac.Imageva.dtbnay do do cung chua thay doi dang lam do cua agent pin (mt6359-auxadc.c,generic-adc-battery.c,mt6358-irq.c, DTS) va agent WiFi..dtbnay giong hetml618-lancelot-batt2.dtbve noi dung GPU (toi khong sua DTS).
Neu can tarball module (do agent khac doi module), nho: goc tarball PHAI la
usr/lib/modules/<ver>, tuyet doi khong duoc la lib/.
Toi chua flash va chua do lai. Nhung diem con nghi ngo:
-
Ty le loi. Backport nay giai thich rat tot vong lap fault tu duy tri va WARNING "not heap type". Nhung no bien "hong am tham" thanh loi
-ENOMEMsach se — no khong tao ra bo nho khong co. Neu goc re la ap luc bo nho that su, sau khi va patch ban se thayUnhandled Page fault+ reset GPU sach thay vi fault storm, nhung ung dung van co the mat context. Can them zram/swap. -
f45f73c68c59chua backport. "drm/panfrost: Handle error when allocating AS number" cung nam trong loat patch 6.19. Toi khong backport vi no khong lien quan truc tiep den trieu chung. Neu van con loi, day la ung vien tiep theo. -
Mesa 25.0.7 co bug that su tren Mali-G52 — day co the la nua con lai cua van de, dac biet la trieu chung nhap nhay:
mesa#12718: hoi quy Mesa 25 gay flicker tren Mali-G52, da bisect ve commite0f48568c7f2— https://gitlab.freedesktop.org/mesa/mesa/-/issues/12718 (van mo)mesa#13650/ Debian#1116427: ung dung GTK crash ngau nhien trongpan_preload_emit_varying_buffer(pan_fb_preload.c:876) tren Mali-G52, Mesa 25.0.7. Da sua trong Mesa 25.2.0. — https://gitlab.freedesktop.org/mesa/mesa/-/issues/13650- Tham khao them:
mesa#12061(Mali-G31, cung chuoiAS0 / TRANSLATION_FAULT / JOB_BUS_FAULT / gpu sched timeout, khong co dong "not heap type"),mesa#7722(G52,TRANSLATION_FAULT_1+JOB_BUS_FAULT).
-
Chi tiet clock chua duoc lam ro (loi tiem an, KHONG phai thu pham).
drivers/clk/mediatek/clk-mt6768-mfg.cdungGATE_MTK(...)->flags = 0, thieuCLK_SET_RATE_PARENT, trong khi mt8183/mt8186/mt8188/mt8192/mt8195 deu dungGATE_MTK_FLAGS(..., CLK_SET_RATE_PARENT). Docclk_core_set_rate_nolock()thiclk_set_rate()tren mot gate khong co ops round/determine va khong coCLK_SET_RATE_PARENTse tra ve 0 ngay lap tuc ma khong doi gi. Phep do tren may lai cho thaymfgpll= 299 MHz khop voi devfreq — nhung do la khi devfreq bi ghim o OPP thap nhat, la gia tri co the trung voi tri boot. Chua co phep do o tan so cao de phan biet.clk-mt6768-mfg.ccung thieu.need_runtime_pm = truedumfgcfgnam trong power domainMFG_ASYNC(mt8183 co). De xuat kiem chung (30 giay, khong rui ro):echo simple_ondemand > /sys/class/devfreq/13040000.gpu/governor echo 950000000 > /sys/class/devfreq/13040000.gpu/min_freq grep -E 'mfgpll|mfg_sel|bg3d' /sys/kernel/debug/clk/clk_summaryNeu
mfgpllvan la 299000000 -> loi nay co that (GPU luon chay 299 MHz, DVFS chi doi dien ap). Nen sua rieng, khong lien quan den vu treo giao dien nay.
Agent chinh da flash ml618-Image-gpu + ml618-lancelot-gpu.dtb. Truoc do da nang Mesa
tu 25.0.7 len 26.1.2-1~bpo13+1 (trixie-backports).
Tai chuan glmark2-es2-wayland, 90 giay:
| DATA_INVALID | JOB_READ | JOB_BUS | IMPRECISE | not-heap-type | Tong | |
|---|---|---|---|---|---|---|
| Mesa 25.0.7, kernel chua va | 621 | 2 | 9 | 19 | 12 | 663 |
| Mesa 26.1.2, kernel chua va | — | — | — | — | — | 195 |
| Mesa 26.1.2, kernel da va | 0 | 32 | 21 | 0 | 53 | 106 |
DATA_INVALID_FAULTbien mat hoan toan (621 -> 0). Day la thang loi that su cua patch3d7c626716aa: vong lap fault vo tan da bi pha vo.- Tong su kien giam 6.3 lan (663 -> 106).
JOB_READ_FAULT/JOB_BUS_FAULTtang la loi cu doi mat na, khong phai hoi quy: truoc kia GPU ket trong vong lap nen moi job chet o buoc kiem tra descriptor (DATA_INVALID) che khuat tat ca; nay GPU chay dung den khi gap mot loi MMU that su va bao dung loai loi (job manager doc descriptor tu trang chua map =JOB_READ_FAULT).- Mesa 26.1.2 mot minh: 682 -> 195. Nhung chu may thay glitch nang hon, nen nang Mesa khong phai thuoc.
Chay cung mot benchmark 3 lan lien tiep:
lan 1: glmark2 Score 1044 -> 0 loi
lan 2: glmark2 Score 999 -> 2 loi
lan 3: glmark2 Score 105 -> 898 loi
Khi khong loi, GPU chay rat tot (FPS 900-1100). Phosh nam im: 12 loi/60 s. Day la hanh vi tich luy, khong phai loi tinh.
giay | MemAvail | loi tich luy
65 | 360 MB | 0
70 | 252 MB | 20 <-- loi bat dau dung luc RAM tut 108 MB
75 | 260 MB | 54
85 | 259 MB | 129
Agent chinh dung lai o cho "khong dam ket luan" vi grep 'page allocation failure|oom' = 0
va grep 'nomem|failed to map' = 0. Ca hai con so 0 do deu vo nghia:
drivers/gpu/drm/panfrost/panfrost_dump.c:163:iter.start = __vmalloc(file_size, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY); if (!iter.start) { dev_warn(pfdev->dev, "failed to allocate devcoredump file\n");
__GFP_NOWARN | __GFP_NORETRY= that bai hoan toan im lang, khong bao gio in "page allocation failure". Va dongfailed to allocate devcoredump fileda xuat hien trong log -> ap luc bo nho la CO THAT va cap phat lon DANG that bai.- Duong loi cua patch
4da352cf8fb1chireturn retlen Mesa, khong in gi ca. Nengrep nomem= 0 khong chung minh duoc no khong xay ra.
Ngoai ra file_size cua devcoredump = tong kich thuoc tat ca BO cua job, va duoc thu
lai o moi lan job timeout. Trong con bao 898 loi, day la vong phan hoi duong:
loi -> vmalloc lon -> them ap luc -> them loi. Cong them 898 backtrace day du tu dev_WARN.
Rat co the day chinh la co che lam score sup tu 1044 xuong 105.
- May chi nhan 871 MB RAM (
MemTotal: 892120 kB) du phan cung co 3 GB. Dang co viec rieng sua, chua xong. Day co the la dieu kien du gay ra toan bo hien tuong nay. - Khong co swap,
CONFIG_ZRAMtruoc do chua bat ->modprobe zrambao not found. CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y— lua chon rat xau cho may 871 MB (phinh bo nho + phan manh). Va neushmem_enabledkhong phaineverthi con dinh mot bug panfrost that su: 6.18 dungshmem_read_mapping_page()theo tung trang trong khidrm_gem_put_pages()dem ref theo folio -> ro ri trang moi lan gap huge folio. Upstream sua o 7.0:b49c35ba0ce1"drm/panfrost: Fix a page leak in panfrost_mmu_map_fault_addr() when THP is on". Ro ri trang tich luy khop chinh xac voi kieu "cang chay cang tut RAM, bung phat tung dot". (Chua backport viFixes:cua no tro toic12e9fcb5a5a"Introduce huge tmpfs mountpoint option" — commit do khong co trong 6.18, nen duong THP chi kich hoat neushmem_enabled != never. Can do truoc, xem 7.6.)irq/172-mt6358-irqan 22.5% CPU lien tuc (viec khac dang xu ly).- GPU co tang xung dung: idle 299 MHz, tai len 1000 MHz. Xac nhan lai lan nua rang DVFS khong lien quan.
| File | sha256 |
|---|---|
pmos/ml618-Image-gpu2 |
3d0c5101fdf2914d2fd02b16e406bc693b0cbbedce6c0f8e7dd1cea6a021ece8 |
pmos/ml618-lancelot-gpu2.dtb |
d80c1cf7f8e69b646462cc5b0758b7981da0cae2fefc7721fc1b34750b5989ec (giong het gpu.dtb) |
Gom ml618-Image-gpu + nhung thu sau:
A. Bat ZRAM (bien phap giam nhe that su, khong chi chan doan)
CONFIG_ZRAM=y, CONFIG_ZSMALLOC=y, CONFIG_ZRAM_BACKEND_LZO=y,
CONFIG_ZRAM_DEF_COMP="lzo-rle", CONFIG_CRYPTO_LZO=y. Builtin -> khong can tarball module.
Cach dung:
sudo zramctl --find --size 512M --algorithm lzo-rle
sudo mkswap /dev/zram0 && sudo swapon -p 100 /dev/zram0
B. Do dac trong duong map (tra loi cau hoi 4 cua agent chinh)
panfrost_mmu.c — thay dev_WARN "matching BO is not heap type" bang WARN_ONCE
(mot backtrace duy nhat) + dev_err_ratelimited chi tiet:
non-heap BO fault: fault_va=%llx bo_va=%llx..%llx off=%lld bo_size=%zu
label='%s' active=%d madv=%d pages=%s gpu_usecount=%d noexec=%d
label= ten BO do Mesa dat quaSET_LABEL_BO(Mesa 26.1 co dat). dmesg se noi thang do la buffer gi: "Tiler heap", "Batch descriptors", ...active= mapping con hieu luc khong (0 -> BO da bi go mapping)madv= trang thai madvise (-1-> BO da bi shrinker thu hoi)off= do lech so voi dau BO (am hoac > bo_size -> GPU doc vuot ngoai BO / dia chi GPU bi dung lai cho BO khac)
Ba truong nay phan biet dut khoat 3 kha nang con lai. Them cac dong:
map_pages failed: err=... iova=... paddr=... pgsize=... pgcount=... mapped=... total_mapped=...
panfrost_mmu_map failed: err=... size=... va=... noexec=...
heap fault: shmem_read_mapping_page failed err=... at page ... (block base ...) addr=...
heap fault: sg_alloc_table_from_pages failed err=... addr=...
heap fault: dma_map_sgtable failed err=... addr=...
(truoc day toan bo cac duong loi nay hoan toan im lang).
Doi dev_WARN -> WARN_ONCE cung giam tai log: 898 backtrace day du trong mot con bao
la rat nang, va co the ban than viec in log dang gop phan lam sup score.
(1) Shrinker cua panfrost co thu hoi BO khong — phep do quan trong nhat.
panfrost_gem_shrinker.c da san co pr_info_ratelimited("Purging %lu bytes\n", ...).
sudo dmesg -c >/dev/null; glmark2-es2-wayland; dmesg | grep -nE 'Purging|panfrost' | head -60
Neu "Purging" xuat hien ngay truoc khi loi bung phat -> noi thang duoc ap luc bo nho voi loi
GPU. Co che de xuat: shrinker thu hoi BO ma Mesa danh dau purgeable;
panfrost_gem_teardown_mapping() go luon node drm_mm, tra vung dia chi GPU ve pool;
vung do duoc cap lai cho BO khac; job cu cua GPU van tro toi dia chi cu -> roi vao BO moi
-> bo->is_heap == false -> dung cai WARN "not heap type". Neu khong co dong "Purging"
nao thi shrinker vo can va phai tim huong khac — ket qua nao cung co gia tri.
(2) THP.
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/shmem_enabled
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled
roi chay lai glmark2 3 lan. Neu lan 3 khong con sup do -> xac nhan huong ro ri trang THP
(muc 7.4) va can backport b49c35ba0ce1.
(3) Cat vong phan hoi duong cua devcoredump.
echo 1 | sudo tee /sys/class/devcoredump/disabled
Chay lai glmark2 3 lan. Neu con bao diu di nhieu -> xac nhan devcoredump dang lam nang them.
Patch da sua mot bug that su va co the do luong duoc (DATA_INVALID 621 -> 0, tong giam
6.3 lan, GPU dat score 1044 khi khong loi). Nhung chua dut diem. Nghi ngo hang dau bay
gio la ap luc bo nho (871 MB thay vi 3 GB, khong swap, THP=always), voi hai co che kha
di: (a) shrinker thu hoi BO -> tai su dung dia chi GPU, (b) ro ri trang THP trong
panfrost_mmu_map_fault_addr(). Ca hai deu do duoc bang muc 7.6.
Lever thuc te lon nhat van la sua cho may nhan du 3 GB RAM.
-
Flash
ml618-Image-gpu+ml618-lancelot-gpu.dtb, chay Phosh, do lai bang dung phep dem cu:dmesg -w | grep -c 'panfrost' # trong 90 giay dmesg | grep -oP 'status=\K\w+' | sort | uniq -cSo sanh voi mau chuan da co:
621 DATA_INVALID_FAULT / 19 IMPRECISE_FAULT / 9 JOB_BUS_FAULT / 2 JOB_READ_FAULT / 12 "not heap type"trong 90 s. -
Kiem tra ap luc bo nho (kiem chung truc tiep chan doan):
dmesg | grep -iE 'page allocation failure|oom|order-[0-9]' free -m ; swapon --showNeu co, bat zram la bien phap giam nhe that su.
-
Bien moi truong Mesa 25.0 — danh sach
PAN_MESA_DEBUGday du doc tusrc/gallium/drivers/panfrost/pan_screen.c:perf, trace, dirty, sync, nofp16, gl3, noafbc, nocrc, msaa16, linear, nocache, dump, overflow, yuv, forcepack, cs(norastvagofasterkhong ton tai trong panfrost — do la cua Asahi.)PAN_MESA_DEBUG=nocache— tat BO cache cua Mesa. Neu loi giam manh/bien mat => xac nhan van de vong doi/map BO. Cung giam han luu luongMADV_DONTNEED/shrinker vao dung duong code bi loi.PAN_MESA_DEBUG=sync— Mesa cho tung job, quy trach nhiem loi ve dung draw call.
-
Ep renderer phan mem de khoanh vung:
WLR_RENDERER=pixman WLR_NO_HARDWARE_CURSORS=1 phoc ...Het treo + het glitch => chac chan goc nam o duong GPU.
-
Neu van con loi: nang Mesa len >= 25.2 (cho
mesa#13650), va/hoac backport tiepf45f73c68c59, hoac chuyen han sang kernel >= 6.19.