From: Ray Strode Date: Fri, 24 Jul 2015 18:12:40 +0000 (-0400) Subject: device-manager: decouple local console from output device X-Git-Tag: 0.9.3~54 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef7adc36772f432da67c2e7033bb1493f241f0da;p=thirdparty%2Fplymouth.git device-manager: decouple local console from output device The code currently does a faulty heuristic to figure out which drm device is associated with the tty. We shouldn't actually even need an accurate association, so this commit just makes sure the terminal gets used for the first device. --- diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c index de792d9e..488f86be 100644 --- a/src/libply-splash-core/ply-device-manager.c +++ b/src/libply-splash-core/ply-device-manager.c @@ -96,33 +96,6 @@ attach_to_event_loop (ply_device_manager_t *manager, manager); } -static bool -device_is_for_local_console (ply_device_manager_t *manager, - struct udev_device *device) -{ - const char *device_path; - struct udev_device *bus_device; - char *bus_device_path; - const char *boot_vga; - bool for_local_console; - - /* Look at the associated bus device to see if this card is the - * card the kernel is using for its console. */ - device_path = udev_device_get_syspath (device); - asprintf (&bus_device_path, "%s/device", device_path); - bus_device = udev_device_new_from_syspath (manager->udev_context, bus_device_path); - - boot_vga = udev_device_get_sysattr_value (bus_device, "boot_vga"); - free (bus_device_path); - - if (boot_vga != NULL && strcmp (boot_vga, "1") == 0) - for_local_console = true; - else - for_local_console = false; - - return for_local_console; -} - static bool drm_device_in_use (ply_device_manager_t *manager, const char *device_path) @@ -186,16 +159,7 @@ static void create_devices_for_udev_device (ply_device_manager_t *manager, struct udev_device *device) { - bool for_local_console; const char *device_path; - ply_terminal_t *terminal = NULL; - - for_local_console = device_is_for_local_console (manager, device); - - ply_trace ("device is for local console: %s", for_local_console ? "yes" : "no"); - - if (for_local_console) - terminal = manager->local_console_terminal; device_path = udev_device_get_devnode (device); @@ -218,6 +182,12 @@ create_devices_for_udev_device (ply_device_manager_t *manager, } if (renderer_type != PLY_RENDERER_TYPE_NONE) { + ply_terminal_t *terminal = NULL; + + if (!manager->local_console_managed) { + terminal = manager->local_console_terminal; + } + create_devices_for_terminal_and_renderer_type (manager, device_path, terminal, @@ -678,13 +648,10 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager, ply_renderer_t *renderer = NULL; ply_keyboard_t *keyboard = NULL; - bool is_local_terminal = false; - - if (terminal != NULL && manager->local_console_terminal == terminal) - is_local_terminal = true; + renderer = ply_hashtable_lookup (manager->renderers, (void *) device_path); - if (is_local_terminal && manager->local_console_managed) { - ply_trace ("trying to create devices for local console when one already exists"); + if (renderer != NULL) { + ply_trace ("ignoring device %s since it's already managed", device_path); return; } @@ -723,18 +690,15 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager, if (terminal != NULL) { create_text_displays_for_terminal (manager, terminal); - if (is_local_terminal) - { - manager->local_console_is_text = true; + if (terminal == manager->local_console_terminal) { + manager->local_console_is_text = renderer == NULL; + manager->local_console_managed = true; } } if (keyboard != NULL) { ply_keyboard_watch_for_input (keyboard); } - - if (is_local_terminal) - manager->local_console_managed = true; } static void