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:
parent
aaa8cefc25
commit
46493a986b
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user