Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / drivers / s390 / cio / blacklist.c
index 12c2d6b..0960bef 100644 (file)
@@ -9,6 +9,7 @@
  *              Arnd Bergmann (arndb@de.ibm.com)
  */
 
+#include <linux/config.h>
 #include <linux/init.h>
 #include <linux/vmalloc.h>
 #include <linux/slab.h>
@@ -223,6 +224,39 @@ is_blacklisted (int ssid, int devno)
 }
 
 #ifdef CONFIG_PROC_FS
+static int
+__s390_redo_validation(struct subchannel_id schid, void *data)
+{
+       int ret;
+       struct subchannel *sch;
+
+       sch = get_subchannel_by_schid(schid);
+       if (sch) {
+               /* Already known. */
+               put_device(&sch->dev);
+               return 0;
+       }
+       ret = css_probe_device(schid);
+       if (ret == -ENXIO)
+               return ret; /* We're through. */
+       if (ret == -ENOMEM)
+               /* Stop validation for now. Bad, but no need for a panic. */
+               return ret;
+       return 0;
+}
+
+/*
+ * Function: s390_redo_validation
+ * Look for no longer blacklisted devices
+ * FIXME: there must be a better way to do this */
+static inline void
+s390_redo_validation (void)
+{
+       CIO_TRACE_EVENT (0, "redoval");
+
+       for_each_subchannel(__s390_redo_validation, NULL);
+}
+
 /*
  * Function: blacklist_parse_proc_parameters
  * parse the stuff which is piped to /proc/cio_ignore
@@ -247,7 +281,7 @@ blacklist_parse_proc_parameters (char *buf)
                return;
        }
 
-       css_schedule_reprobe();
+       s390_redo_validation ();
 }
 
 /* Iterator struct for all devices. */