udev: Listen for lease events

Lease events are sent when drm leases disappear. This event will help us
track leased out drm resources.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3746>
This commit is contained in:
Sebastian Wick 2023-10-17 18:25:45 +02:00 committed by Marge Bot
parent aaa8cefc25
commit 46493a986b
2 changed files with 32 additions and 0 deletions

View File

@ -35,6 +35,7 @@ enum
{ {
RESOURCES_CHANGED, RESOURCES_CHANGED,
DEVICE_ADDED, DEVICE_ADDED,
LEASE_CHANGED,
N_SIGNALS N_SIGNALS
}; };
@ -48,6 +49,7 @@ struct _MetaKms
MetaKmsFlags flags; MetaKmsFlags flags;
gulong hotplug_handler_id; gulong hotplug_handler_id;
gulong lease_handler_id;
gulong removed_handler_id; gulong removed_handler_id;
MetaKmsImpl *impl; MetaKmsImpl *impl;
@ -308,6 +310,14 @@ on_udev_device_removed (MetaUdev *udev,
handle_hotplug_event (kms, NULL, META_KMS_RESOURCE_CHANGE_NONE); handle_hotplug_event (kms, NULL, META_KMS_RESOURCE_CHANGE_NONE);
} }
static void
on_udev_lease (MetaUdev *udev,
GUdevDevice *udev_device,
MetaKms *kms)
{
g_signal_emit (kms, signals[LEASE_CHANGED], 0);
}
MetaBackend * MetaBackend *
meta_kms_get_backend (MetaKms *kms) meta_kms_get_backend (MetaKms *kms)
{ {
@ -403,6 +413,8 @@ meta_kms_new (MetaBackend *backend,
{ {
kms->hotplug_handler_id = kms->hotplug_handler_id =
g_signal_connect (udev, "hotplug", G_CALLBACK (on_udev_hotplug), kms); g_signal_connect (udev, "hotplug", G_CALLBACK (on_udev_hotplug), kms);
kms->lease_handler_id =
g_signal_connect (udev, "lease", G_CALLBACK (on_udev_lease), kms);
} }
kms->removed_handler_id = kms->removed_handler_id =
@ -427,6 +439,7 @@ meta_kms_finalize (GObject *object)
g_list_free_full (kms->devices, g_object_unref); g_list_free_full (kms->devices, g_object_unref);
g_clear_signal_handler (&kms->hotplug_handler_id, udev); g_clear_signal_handler (&kms->hotplug_handler_id, udev);
g_clear_signal_handler (&kms->lease_handler_id, udev);
g_clear_signal_handler (&kms->removed_handler_id, udev); g_clear_signal_handler (&kms->removed_handler_id, udev);
G_OBJECT_CLASS (meta_kms_parent_class)->finalize (object); G_OBJECT_CLASS (meta_kms_parent_class)->finalize (object);
@ -464,6 +477,14 @@ meta_kms_class_init (MetaKmsClass *klass)
G_TYPE_NONE, 1, G_TYPE_NONE, 1,
META_TYPE_KMS_DEVICE); META_TYPE_KMS_DEVICE);
signals[LEASE_CHANGED] =
g_signal_new ("lease-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
meta_thread_class_register_impl_type (thread_class, META_TYPE_KMS_IMPL); meta_thread_class_register_impl_type (thread_class, META_TYPE_KMS_IMPL);
} }

View File

@ -28,6 +28,7 @@
enum enum
{ {
HOTPLUG, HOTPLUG,
LEASE,
DEVICE_ADDED, DEVICE_ADDED,
DEVICE_REMOVED, DEVICE_REMOVED,
@ -230,6 +231,9 @@ on_uevent (GUdevClient *client,
if (g_udev_device_get_property_as_boolean (device, "HOTPLUG")) if (g_udev_device_get_property_as_boolean (device, "HOTPLUG"))
g_signal_emit (udev, signals[HOTPLUG], 0, device); g_signal_emit (udev, signals[HOTPLUG], 0, device);
if (g_udev_device_get_property_as_boolean (device, "LEASE"))
g_signal_emit (udev, signals[LEASE], 0, device);
} }
MetaUdev * MetaUdev *
@ -291,6 +295,13 @@ meta_udev_class_init (MetaUdevClass *klass)
0, NULL, NULL, NULL, 0, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_NONE, 1,
G_UDEV_TYPE_DEVICE); G_UDEV_TYPE_DEVICE);
signals[LEASE] =
g_signal_new ("lease",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 1,
G_UDEV_TYPE_DEVICE);
signals[DEVICE_ADDED] = signals[DEVICE_ADDED] =
g_signal_new ("device-added", g_signal_new ("device-added",
G_TYPE_FROM_CLASS (object_class), G_TYPE_FROM_CLASS (object_class),