[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH] cdi: Auf PCI-Service warten



! cdi: Beim Lesen der Liste aller PCI-Geraete sollte man erstmal warten,
  bis der PCI-Service da ist, sonst wird die Liste recht leer. Damit
  hängt jetzt die Benutzung von Busmaster-IDE auch nicht mehr von einem
  Race ab.

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/modules/cdi/lib/pci.c |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/src/modules/cdi/lib/pci.c b/src/modules/cdi/lib/pci.c
index 9c2e47f..9b37da8 100644
--- a/src/modules/cdi/lib/pci.c
+++ b/src/modules/cdi/lib/pci.c
@@ -23,6 +23,19 @@
 #include "cdi/lists.h"
 #include "cdi/pci.h"
 
+/*
+ * Wartet, bis der PCI-Service auftaucht
+ */
+static void wait_for_pci_service(void)
+{
+    static bool pci_started = false;
+
+    if (!pci_started) {
+        servmgr_need("pci");
+        pci_started = true;
+    }
+}
+
 /**
  * Liest die Daten eines PCI-Geraets ein
  */
@@ -78,7 +91,7 @@ static struct cdi_pci_device* read_pci_device(uint8_t* data, size_t size)
 
     return cdi_device;
 }
-    
+
 /**
  * Gibt alle PCI-Geraete im System zurueck. Die Geraete werden dazu
  * in die uebergebene Liste eingefuegt.
@@ -89,6 +102,8 @@ void cdi_pci_get_all_devices(cdi_list_t list)
     uint8_t* data;
     int ret;
 
+    wait_for_pci_service();
+
     ret = init_dev_list(&devs);
     if (ret < 0) {
         return;
-- 
1.6.0.2