@@ -257,7 +257,8 @@ static void msm_gpu_crashstate_get_bo(struct msm_gpu_state *state,
257
257
}
258
258
259
259
static void msm_gpu_crashstate_capture (struct msm_gpu * gpu ,
260
- struct msm_gem_submit * submit , char * comm , char * cmd )
260
+ struct msm_gem_submit * submit , struct msm_gpu_fault_info * fault_info ,
261
+ char * comm , char * cmd )
261
262
{
262
263
struct msm_gpu_state * state ;
263
264
@@ -276,7 +277,8 @@ static void msm_gpu_crashstate_capture(struct msm_gpu *gpu,
276
277
/* Fill in the additional crash state information */
277
278
state -> comm = kstrdup (comm , GFP_KERNEL );
278
279
state -> cmd = kstrdup (cmd , GFP_KERNEL );
279
- state -> fault_info = gpu -> fault_info ;
280
+ if (fault_info )
281
+ state -> fault_info = * fault_info ;
280
282
281
283
if (submit ) {
282
284
int i ;
@@ -308,7 +310,8 @@ static void msm_gpu_crashstate_capture(struct msm_gpu *gpu,
308
310
}
309
311
#else
310
312
static void msm_gpu_crashstate_capture (struct msm_gpu * gpu ,
311
- struct msm_gem_submit * submit , char * comm , char * cmd )
313
+ struct msm_gem_submit * submit , struct msm_gpu_fault_info * fault_info ,
314
+ char * comm , char * cmd )
312
315
{
313
316
}
314
317
#endif
@@ -405,7 +408,7 @@ static void recover_worker(struct kthread_work *work)
405
408
406
409
/* Record the crash state */
407
410
pm_runtime_get_sync (& gpu -> pdev -> dev );
408
- msm_gpu_crashstate_capture (gpu , submit , comm , cmd );
411
+ msm_gpu_crashstate_capture (gpu , submit , NULL , comm , cmd );
409
412
410
413
kfree (cmd );
411
414
kfree (comm );
@@ -459,9 +462,8 @@ static void recover_worker(struct kthread_work *work)
459
462
msm_gpu_retire (gpu );
460
463
}
461
464
462
- static void fault_worker (struct kthread_work * work )
465
+ void msm_gpu_fault_crashstate_capture (struct msm_gpu * gpu , struct msm_gpu_fault_info * fault_info )
463
466
{
464
- struct msm_gpu * gpu = container_of (work , struct msm_gpu , fault_work );
465
467
struct msm_gem_submit * submit ;
466
468
struct msm_ringbuffer * cur_ring = gpu -> funcs -> active_ring (gpu );
467
469
char * comm = NULL , * cmd = NULL ;
@@ -484,16 +486,13 @@ static void fault_worker(struct kthread_work *work)
484
486
485
487
/* Record the crash state */
486
488
pm_runtime_get_sync (& gpu -> pdev -> dev );
487
- msm_gpu_crashstate_capture (gpu , submit , comm , cmd );
489
+ msm_gpu_crashstate_capture (gpu , submit , fault_info , comm , cmd );
488
490
pm_runtime_put_sync (& gpu -> pdev -> dev );
489
491
490
492
kfree (cmd );
491
493
kfree (comm );
492
494
493
495
resume_smmu :
494
- memset (& gpu -> fault_info , 0 , sizeof (gpu -> fault_info ));
495
- gpu -> aspace -> mmu -> funcs -> resume_translation (gpu -> aspace -> mmu );
496
-
497
496
mutex_unlock (& gpu -> lock );
498
497
}
499
498
@@ -882,7 +881,6 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,
882
881
init_waitqueue_head (& gpu -> retire_event );
883
882
kthread_init_work (& gpu -> retire_work , retire_worker );
884
883
kthread_init_work (& gpu -> recover_work , recover_worker );
885
- kthread_init_work (& gpu -> fault_work , fault_worker );
886
884
887
885
priv -> hangcheck_period = DRM_MSM_HANGCHECK_DEFAULT_PERIOD ;
888
886
0 commit comments