digraph { node [shape=box] subgraph cluster_state { style=dashed label="Free-standing state" "drm_atomic_state" -> "duplicated drm_plane_state A" "drm_atomic_state" -> "duplicated drm_plane_state B" "drm_atomic_state" -> "duplicated drm_crtc_state" "drm_atomic_state" -> "duplicated drm_connector_state" "drm_atomic_state" -> "duplicated driver private state" } subgraph cluster_current { style=dashed label="Current state" "drm_device" -> "drm_plane A" "drm_device" -> "drm_plane B" "drm_device" -> "drm_crtc" "drm_device" -> "drm_connector" "drm_device" -> "driver private object" "drm_plane A" -> "drm_plane_state A" "drm_plane B" -> "drm_plane_state B" "drm_crtc" -> "drm_crtc_state" "drm_connector" -> "drm_connector_state" "driver private object" -> "driver private state" } "drm_atomic_state" -> "drm_device" [label="atomic_commit"] "duplicated drm_plane_state A" -> "drm_device"[style=invis] }