modesetting: Use atomic instead of per-crtc walks where we can

drmmode_set_desired_modes (reachable from CreateScreenResources,
EnterVT, etc.) currently works by doing ->set_mode_major on each CRTC.
This means initialization and VT switch are more flickery than they need
to be. It also means they're more fragile than they need to be, as
(especially for EnterVT) we're not trying very hard to ensure the
intermediate states are valid.

This patch introduces drmmode_set_mode_atomic, which blasts the entire
RANDR state into the kernel. We change drmmode_set_desired_modes and
drmmode_xf86crtc_resize to use this instead of walking each CRTC. We
also change drmmode_crtc_set_mode to use this, so that client RANDR
requests (operating CRTC-at-a-time, since RANDR doesn't have atomic
changes yet) use the same code paths.

Signed-off-by: Adam Jackson <>
1 job for be-more-atomic in 1 minute and 57 seconds (queued for 3 seconds)