Commit 9224c15c authored by Stefan Wahren's avatar Stefan Wahren Committed by Greg Kroah-Hartman

staging: vchiq_arm: change order during module probe

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: default avatarStefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 0ece01c6
...@@ -2914,16 +2914,15 @@ static int vchiq_probe(struct platform_device *pdev) ...@@ -2914,16 +2914,15 @@ static int vchiq_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, fw); platform_set_drvdata(pdev, fw);
/* create debugfs entries */ err = vchiq_platform_init(pdev, &g_state);
err = vchiq_debugfs_init();
if (err != 0) if (err != 0)
goto failed_debugfs_init; goto failed_platform_init;
err = alloc_chrdev_region(&vchiq_devid, VCHIQ_MINOR, 1, DEVICE_NAME); err = alloc_chrdev_region(&vchiq_devid, VCHIQ_MINOR, 1, DEVICE_NAME);
if (err != 0) { if (err != 0) {
vchiq_log_error(vchiq_arm_log_level, vchiq_log_error(vchiq_arm_log_level,
"Unable to allocate device number"); "Unable to allocate device number");
goto failed_alloc_chrdev; goto failed_platform_init;
} }
cdev_init(&vchiq_cdev, &vchiq_fops); cdev_init(&vchiq_cdev, &vchiq_fops);
vchiq_cdev.owner = THIS_MODULE; vchiq_cdev.owner = THIS_MODULE;
...@@ -2946,9 +2945,10 @@ static int vchiq_probe(struct platform_device *pdev) ...@@ -2946,9 +2945,10 @@ static int vchiq_probe(struct platform_device *pdev)
if (IS_ERR(ptr_err)) if (IS_ERR(ptr_err))
goto failed_device_create; goto failed_device_create;
err = vchiq_platform_init(pdev, &g_state); /* create debugfs entries */
err = vchiq_debugfs_init();
if (err != 0) if (err != 0)
goto failed_platform_init; goto failed_debugfs_init;
vchiq_log_info(vchiq_arm_log_level, vchiq_log_info(vchiq_arm_log_level,
"vchiq: initialised - version %d (min %d), device %d.%d", "vchiq: initialised - version %d (min %d), device %d.%d",
...@@ -2957,7 +2957,7 @@ static int vchiq_probe(struct platform_device *pdev) ...@@ -2957,7 +2957,7 @@ static int vchiq_probe(struct platform_device *pdev)
return 0; return 0;
failed_platform_init: failed_debugfs_init:
device_destroy(vchiq_class, vchiq_devid); device_destroy(vchiq_class, vchiq_devid);
failed_device_create: failed_device_create:
class_destroy(vchiq_class); class_destroy(vchiq_class);
...@@ -2966,9 +2966,7 @@ static int vchiq_probe(struct platform_device *pdev) ...@@ -2966,9 +2966,7 @@ static int vchiq_probe(struct platform_device *pdev)
err = PTR_ERR(ptr_err); err = PTR_ERR(ptr_err);
failed_cdev_add: failed_cdev_add:
unregister_chrdev_region(vchiq_devid, 1); unregister_chrdev_region(vchiq_devid, 1);
failed_alloc_chrdev: failed_platform_init:
vchiq_debugfs_deinit();
failed_debugfs_init:
vchiq_log_warning(vchiq_arm_log_level, "could not load vchiq"); vchiq_log_warning(vchiq_arm_log_level, "could not load vchiq");
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment