@@ -28,29 +28,42 @@ static ssize_t __maybe_unused disp_devcoredump_read(char *buffer, loff_t offset,
28
28
return count - iter .remain ;
29
29
}
30
30
31
- static void _msm_disp_snapshot_work (struct kthread_work * work )
31
+ struct msm_disp_state *
32
+ msm_disp_snapshot_state_sync (struct msm_kms * kms )
32
33
{
33
- struct msm_kms * kms = container_of (work , struct msm_kms , dump_work );
34
34
struct drm_device * drm_dev = kms -> dev ;
35
35
struct msm_disp_state * disp_state ;
36
- struct drm_printer p ;
36
+
37
+ WARN_ON (!mutex_is_locked (& kms -> dump_mutex ));
37
38
38
39
disp_state = kzalloc (sizeof (struct msm_disp_state ), GFP_KERNEL );
39
40
if (!disp_state )
40
- return ;
41
+ return ERR_PTR ( - ENOMEM ) ;
41
42
42
43
disp_state -> dev = drm_dev -> dev ;
43
44
disp_state -> drm_dev = drm_dev ;
44
45
45
46
INIT_LIST_HEAD (& disp_state -> blocks );
46
47
47
- /* Serialize dumping here */
48
- mutex_lock (& kms -> dump_mutex );
49
-
50
48
msm_disp_snapshot_capture_state (disp_state );
51
49
50
+ return disp_state ;
51
+ }
52
+
53
+ static void _msm_disp_snapshot_work (struct kthread_work * work )
54
+ {
55
+ struct msm_kms * kms = container_of (work , struct msm_kms , dump_work );
56
+ struct msm_disp_state * disp_state ;
57
+ struct drm_printer p ;
58
+
59
+ /* Serialize dumping here */
60
+ mutex_lock (& kms -> dump_mutex );
61
+ disp_state = msm_disp_snapshot_state_sync (kms );
52
62
mutex_unlock (& kms -> dump_mutex );
53
63
64
+ if (IS_ERR (disp_state ))
65
+ return ;
66
+
54
67
if (MSM_DISP_SNAPSHOT_DUMP_IN_CONSOLE ) {
55
68
p = drm_info_printer (disp_state -> drm_dev -> dev );
56
69
msm_disp_state_print (disp_state , & p );
0 commit comments