File plymouth-fallback-to-framebuffer.patch of Package plymouth

From d8278c93ad78a5cbeb89b6b825fc37454798164a Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 7 Jan 2015 16:24:57 -0500
Subject: [PATCH] device-manager: try fb device if drm device failed

Signed-off-by: Sebastian Parschauer <sparschauer@suse.de>

If the drm device failed to work, then fall back to the fb device.

Right now, we ignore fb devices that have associated drm devices.

This may fix vmwgfx.
---
 src/libply-splash-core/ply-device-manager.c | 35 ++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
index 75f41c8..67eba32 100644
--- a/src/libply-splash-core/ply-device-manager.c
+++ b/src/libply-splash-core/ply-device-manager.c
@@ -118,6 +118,39 @@ device_is_for_local_console (ply_device_
 }
 
 static bool
+drm_device_in_use (ply_device_manager_t *manager,
+                   const char           *device_path)
+{
+        ply_list_node_t *node;
+
+        node = ply_list_get_first_node (manager->seats);
+        while (node != NULL) {
+                ply_seat_t *seat;
+                ply_renderer_t *renderer;
+                ply_list_node_t *next_node;
+                const char *renderer_device_path;
+
+                seat = ply_list_node_get_data (node);
+                next_node = ply_list_get_next_node (manager->seats, node);
+                renderer = ply_seat_get_renderer (seat);
+
+                if (renderer != NULL) {
+                        renderer_device_path = ply_renderer_get_device_name (renderer);
+
+                        if (renderer_device_path != NULL) {
+                                if (strcmp (device_path, renderer_device_path) == 0) {
+                                        return true;
+                                }
+                        }
+                }
+
+                node = next_node;
+        }
+
+        return false;
+}
+
+static bool
 fb_device_has_drm_device (ply_device_manager_t *manager,
                           struct udev_device   *fb_device)
 {
@@ -156,7 +189,7 @@ fb_device_has_drm_device (ply_device_man
       card_path = udev_list_entry_get_name (card_entry);
       card_device = udev_device_new_from_syspath (manager->udev_context, card_path);
       card_node = udev_device_get_devnode (card_device);
-      if (card_node != NULL)
+      if (card_node != NULL && drm_device_in_use (manager, card_node))
         has_drm_device = true;
       else
         ply_trace ("no card node!");
-- 
2.6.6

openSUSE Build Service is sponsored by