]> git.karo-electronics.de Git - linux-beck.git/blobdiff - drivers/s390/cio/device.c
[S390] cio: fix init_count in case of recognition after steal lock
[linux-beck.git] / drivers / s390 / cio / device.c
index c6abb75c4615e2ff04d78edee05cce26a2d0c1c1..6d229f3523a0f9c043f2a33a8dfaba8504970ac1 100644 (file)
@@ -764,7 +764,7 @@ static void sch_create_and_recog_new_device(struct subchannel *sch)
 static void io_subchannel_register(struct ccw_device *cdev)
 {
        struct subchannel *sch;
-       int ret;
+       int ret, adjust_init_count = 1;
        unsigned long flags;
 
        sch = to_subchannel(cdev->dev.parent);
@@ -793,6 +793,7 @@ static void io_subchannel_register(struct ccw_device *cdev)
                                              cdev->private->dev_id.ssid,
                                              cdev->private->dev_id.devno);
                }
+               adjust_init_count = 0;
                goto out;
        }
        /*
@@ -818,7 +819,7 @@ out:
        cdev->private->flags.recog_done = 1;
        wake_up(&cdev->private->wait_q);
 out_err:
-       if (atomic_dec_and_test(&ccw_device_init_count))
+       if (adjust_init_count && atomic_dec_and_test(&ccw_device_init_count))
                wake_up(&ccw_device_init_wq);
 }