mirror of
https://github.com/brl/mutter.git
synced 2024-12-27 21:32:14 +00:00
kms/impl-device: Inhibit deadline timer on vc4 (Raspberry Pi)
vc4's implementation of `drmModeAtomicCommit` seems to require a few milliseconds advanced notice or else it will miss the frame deadline. That's too high for our deadline evasion threshold which is measured in microseconds. Let's stop trying to use deadline timers on vc4 to avoid this conflict without having to disable atomic KMS. Suggested-by: Jonas Ådahl <jadahl@gmail.com> Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2953 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3279>
This commit is contained in:
parent
eab5e94862
commit
48c9b638f3
@ -1882,6 +1882,26 @@ get_driver_info (int fd,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
maybe_inhibit_deadline_timer (MetaKmsImplDevice *impl_device)
|
||||||
|
{
|
||||||
|
MetaKmsImplDevicePrivate *priv =
|
||||||
|
meta_kms_impl_device_get_instance_private (impl_device);
|
||||||
|
static const char *deadline_timer_deny_list[] = {
|
||||||
|
"vc4",
|
||||||
|
};
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < G_N_ELEMENTS (deadline_timer_deny_list); i++)
|
||||||
|
{
|
||||||
|
if (g_strcmp0 (deadline_timer_deny_list[i], priv->driver_name) == 0)
|
||||||
|
{
|
||||||
|
priv->deadline_timer_inhibited = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
meta_kms_impl_device_initable_init (GInitable *initable,
|
meta_kms_impl_device_initable_init (GInitable *initable,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
@ -1907,6 +1927,8 @@ meta_kms_impl_device_initable_init (GInitable *initable,
|
|||||||
priv->driver_description = g_strdup ("Unknown");
|
priv->driver_description = g_strdup ("Unknown");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maybe_inhibit_deadline_timer (impl_device);
|
||||||
|
|
||||||
priv->crtc_frames =
|
priv->crtc_frames =
|
||||||
g_hash_table_new_full (NULL, NULL,
|
g_hash_table_new_full (NULL, NULL,
|
||||||
NULL, (GDestroyNotify) crtc_frame_free);
|
NULL, (GDestroyNotify) crtc_frame_free);
|
||||||
|
Loading…
Reference in New Issue
Block a user