staging: vchiq_arm: change order during module probe
authorStefan Wahren <stefan.wahren@i2se.com>
Mon, 31 Oct 2016 14:39:33 +0000 (14:39 +0000)
committerJaechul Lee <jcsing.lee@samsung.com>
Fri, 18 Aug 2017 01:04:49 +0000 (10:04 +0900)
The current order during module probe is prone to race conditions:

* debugfs entries, sysfs entries, platform code

So fix this by swapping the steps debugfs entries and platform code.
As a benefit this saves us a clean up step in the error path.

Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c

index 0dba7c14b7e64186d3c90156e3a99b8f5feafdce..fe48aa3d92db02e3d867fd6a7910ca6df109044b 100644 (file)
@@ -2925,16 +2925,15 @@ static int vchiq_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, fw);
 
-       /* create debugfs entries */
-       err = vchiq_debugfs_init();
+       err = vchiq_platform_init(pdev, &g_state);
        if (err != 0)
-               goto failed_debugfs_init;
+               goto failed_platform_init;
 
        err = alloc_chrdev_region(&vchiq_devid, VCHIQ_MINOR, 1, DEVICE_NAME);
        if (err != 0) {
                vchiq_log_error(vchiq_arm_log_level,
                        "Unable to allocate device number");
-               goto failed_alloc_chrdev;
+               goto failed_platform_init;
        }
        cdev_init(&vchiq_cdev, &vchiq_fops);
        vchiq_cdev.owner = THIS_MODULE;
@@ -2957,9 +2956,10 @@ static int vchiq_probe(struct platform_device *pdev)
        if (IS_ERR(ptr_err))
                goto failed_device_create;
 
-       err = vchiq_platform_init(pdev, &g_state);
+       /* create debugfs entries */
+       err = vchiq_debugfs_init();
        if (err != 0)
-               goto failed_platform_init;
+               goto failed_debugfs_init;
 
        vchiq_log_info(vchiq_arm_log_level,
                "vchiq: initialised - version %d (min %d), device %d.%d",
@@ -2968,7 +2968,7 @@ static int vchiq_probe(struct platform_device *pdev)
 
        return 0;
 
-failed_platform_init:
+failed_debugfs_init:
        device_destroy(vchiq_class, vchiq_devid);
 failed_device_create:
        class_destroy(vchiq_class);
@@ -2977,9 +2977,7 @@ failed_class_create:
        err = PTR_ERR(ptr_err);
 failed_cdev_add:
        unregister_chrdev_region(vchiq_devid, 1);
-failed_alloc_chrdev:
-       vchiq_debugfs_deinit();
-failed_debugfs_init:
+failed_platform_init:
        vchiq_log_warning(vchiq_arm_log_level, "could not load vchiq");
        return err;
 }