Skip to content

Commit ff98439

Browse files
hoshinolinaherrnst
authored andcommitted
drm/asahi: gpu: Hook up crashdump generation
Signed-off-by: Asahi Lina <[email protected]>
1 parent 5671418 commit ff98439

1 file changed

Lines changed: 24 additions & 1 deletion

File tree

drivers/gpu/drm/asahi/gpu.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,11 +365,17 @@ impl rtkit::Operations for GpuManager::ver {
365365
ch.event.poll();
366366
}
367367

368-
fn crashed(data: <Self::Data as ForeignOwnable>::Borrowed<'_>, _crashlog: Option<&[u8]>) {
368+
fn crashed(data: <Self::Data as ForeignOwnable>::Borrowed<'_>, crashlog: Option<&[u8]>) {
369369
let dev = &data.dev;
370370

371371
data.crashed.store(true, Ordering::Relaxed);
372372

373+
if let Err(e) = data.generate_crashdump(crashlog) {
374+
dev_err!(dev.as_ref(), "Could not dump kernel VM pages: {:?}\n", e);
375+
}
376+
#[cfg(not(CONFIG_DEV_COREDUMP))]
377+
let _ = crashlog;
378+
373379
if debug_enabled(DebugFlags::OopsOnGpuCrash) {
374380
panic!("GPU firmware crashed");
375381
} else {
@@ -1149,6 +1155,23 @@ impl GpuManager::ver {
11491155

11501156
Ok(())
11511157
}
1158+
1159+
fn generate_crashdump(&self, crashlog: Option<&[u8]>) -> Result {
1160+
// Lock the allocators, to block kernel/FW memory mutations (mostly)
1161+
let kalloc = self.alloc();
1162+
let pages = self.uat.dump_kernel_pages()?;
1163+
core::mem::drop(kalloc);
1164+
1165+
let mut crashdump = crashdump::CrashDumpBuilder::new(pages)?;
1166+
let initdata_addr = self.initdata.gpu_va().get();
1167+
crashdump.add_agx_info(self.cfg, &self.dyncfg, initdata_addr)?;
1168+
if let Some(crashlog) = crashlog {
1169+
crashdump.add_crashlog(crashlog)?;
1170+
}
1171+
let crashdump = crashdump.finalize();
1172+
1173+
Ok(())
1174+
}
11521175
}
11531176

11541177
#[versions(AGX)]

0 commit comments

Comments
 (0)