summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2012-05-06 17:13:02 +0100
committerDave Airlie <airlied@redhat.com>2012-05-21 12:58:32 +0100
commit07dcc3f1a98dff2ee374a15ac5beac778d2ccc97 (patch)
tree31a8a1c8a49225d5ec883d74b64b8d6236917192 /config
parenta2a02882ab65133e6c0c69db1f38bc20b406236f (diff)
config/udev: add pre_init stage to config and udev.
In order to use udev for gpu enumeration, we need to init udev earlier than input initialisations. This splits the config init stuff so that udev pre init sets up before output initialisation. this is just a prepatory patch, doesn't change anything major. Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'config')
-rw-r--r--config/config-backends.h1
-rw-r--r--config/config.c9
-rw-r--r--config/udev.c16
3 files changed, 22 insertions, 4 deletions
diff --git a/config/config-backends.h b/config/config-backends.h
index e5622d51e..62abc0a5f 100644
--- a/config/config-backends.h
+++ b/config/config-backends.h
@@ -33,6 +33,7 @@ void remove_devices(const char *backend, const char *config_info);
BOOL device_is_duplicate(const char *config_info);
#ifdef CONFIG_UDEV
+int config_udev_pre_init(void);
int config_udev_init(void);
void config_udev_fini(void);
#else
diff --git a/config/config.c b/config/config.c
index 2b96dbb74..24e7ba7a0 100644
--- a/config/config.c
+++ b/config/config.c
@@ -33,6 +33,15 @@
#include "config-backends.h"
void
+config_pre_init(void)
+{
+#ifdef CONFIG_UDEV
+ if (!config_udev_pre_init())
+ ErrorF("[config] failed to pre-init udev\n");
+#endif
+}
+
+void
config_init(void)
{
#ifdef CONFIG_UDEV
diff --git a/config/udev.c b/config/udev.c
index 8b3ca0475..1995184f3 100644
--- a/config/udev.c
+++ b/config/udev.c
@@ -281,15 +281,14 @@ block_handler(pointer data, struct timeval **tv, pointer read_mask)
}
int
-config_udev_init(void)
+config_udev_pre_init(void)
{
struct udev *udev;
- struct udev_enumerate *enumerate;
- struct udev_list_entry *devices, *device;
udev = udev_new();
if (!udev)
return 0;
+
udev_monitor = udev_monitor_new_from_netlink(udev, "udev");
if (!udev_monitor)
return 0;
@@ -302,12 +301,21 @@ config_udev_init(void)
if (SeatId && strcmp(SeatId, "seat0"))
udev_monitor_filter_add_match_tag(udev_monitor, SeatId);
#endif
-
if (udev_monitor_enable_receiving(udev_monitor)) {
ErrorF("config/udev: failed to bind the udev monitor\n");
return 0;
}
+ return 1;
+}
+int
+config_udev_init(void)
+{
+ struct udev *udev;
+ struct udev_enumerate *enumerate;
+ struct udev_list_entry *devices, *device;
+
+ udev = udev_monitor_get_udev(udev_monitor);
enumerate = udev_enumerate_new(udev);
if (!enumerate)
return 0;