[S390] Improve AP bus device removal.
authorRalph Wuerthner <rwuerthn@de.ibm.com>
Fri, 27 Oct 2006 10:39:26 +0000 (12:39 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 27 Oct 2006 10:39:26 +0000 (12:39 +0200)
Added a call to device_unregister() in ap_scan_bus() to actively
remove unavailable AP bus devices with every bus scan. Previously
devices were only removed in ap_queue_message() or __ap_poll_all().

Signed-off-by: Ralph Wuerthner <rwuerthn@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/crypto/ap_bus.c

index c5ccd20b110cc9b035088f9fe2b8b252ec6c6f03..79d89c3689194b7e4b1d1925537f7a510ad8cf41 100644 (file)
@@ -739,11 +739,16 @@ static void ap_scan_bus(void *data)
                dev = bus_find_device(&ap_bus_type, NULL,
                                      (void *)(unsigned long)qid,
                                      __ap_scan_bus);
+               rc = ap_query_queue(qid, &queue_depth, &device_type);
+               if (dev && rc) {
+                       put_device(dev);
+                       device_unregister(dev);
+                       continue;
+               }
                if (dev) {
                        put_device(dev);
                        continue;
                }
-               rc = ap_query_queue(qid, &queue_depth, &device_type);
                if (rc)
                        continue;
                rc = ap_init_queue(qid);