Skip to content

Commit c3e2a8a

Browse files
author
Bartosz Golaszewski
committed
gpio: virtuser: stop using dev-sync-probe
dev-err-probe is an overengineered solution to a simple problem. Use a combination of wait_for_probe() and device_is_bound() to synchronously wait for the platform device to probe. Reviewed-by: Linus Walleij <linusw@kernel.org> Link: https://patch.msgid.link/20260327-gpio-kill-dev-sync-probe-v1-3-efac254f1a1d@oss.qualcomm.com Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
1 parent 3a27f40 commit c3e2a8a

2 files changed

Lines changed: 20 additions & 11 deletions

File tree

drivers/gpio/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2098,7 +2098,6 @@ config GPIO_VIRTUSER
20982098
select DEBUG_FS
20992099
select CONFIGFS_FS
21002100
select IRQ_WORK
2101-
select DEV_SYNC_PROBE
21022101
help
21032102
Say Y here to enable the configurable, configfs-based virtual GPIO
21042103
consumer testing driver.

drivers/gpio/gpio-virtuser.c

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@
3636
#include <linux/string_helpers.h>
3737
#include <linux/types.h>
3838

39-
#include "dev-sync-probe.h"
40-
4139
#define GPIO_VIRTUSER_NAME_BUF_LEN 32
4240

4341
static DEFINE_IDA(gpio_virtuser_ida);
@@ -978,7 +976,7 @@ static struct platform_driver gpio_virtuser_driver = {
978976
};
979977

980978
struct gpio_virtuser_device {
981-
struct dev_sync_probe_data probe_data;
979+
struct platform_device *pdev;
982980
struct config_group group;
983981

984982
int id;
@@ -1002,7 +1000,7 @@ gpio_virtuser_device_is_live(struct gpio_virtuser_device *dev)
10021000
{
10031001
lockdep_assert_held(&dev->lock);
10041002

1005-
return !!dev->probe_data.pdev;
1003+
return !!dev->pdev;
10061004
}
10071005

10081006
struct gpio_virtuser_lookup {
@@ -1342,7 +1340,7 @@ gpio_virtuser_device_config_dev_name_show(struct config_item *item,
13421340

13431341
guard(mutex)(&dev->lock);
13441342

1345-
pdev = dev->probe_data.pdev;
1343+
pdev = dev->pdev;
13461344
if (pdev)
13471345
return sprintf(page, "%s\n", dev_name(&pdev->dev));
13481346

@@ -1450,6 +1448,7 @@ static int
14501448
gpio_virtuser_device_activate(struct gpio_virtuser_device *dev)
14511449
{
14521450
struct platform_device_info pdevinfo;
1451+
struct platform_device *pdev;
14531452
struct fwnode_handle *swnode;
14541453
int ret;
14551454

@@ -1471,12 +1470,23 @@ gpio_virtuser_device_activate(struct gpio_virtuser_device *dev)
14711470
if (ret)
14721471
goto err_remove_swnode;
14731472

1474-
ret = dev_sync_probe_register(&dev->probe_data, &pdevinfo);
1475-
if (ret)
1473+
pdev = platform_device_register_full(&pdevinfo);
1474+
if (IS_ERR(pdev)) {
1475+
ret = PTR_ERR(pdev);
14761476
goto err_remove_lookup_table;
1477+
}
1478+
1479+
wait_for_device_probe();
1480+
if (!device_is_bound(&pdev->dev)) {
1481+
ret = -ENXIO;
1482+
goto err_unregister_pdev;
1483+
}
14771484

1485+
dev->pdev = pdev;
14781486
return 0;
14791487

1488+
err_unregister_pdev:
1489+
platform_device_unregister(pdev);
14801490
err_remove_lookup_table:
14811491
gpio_virtuser_remove_lookup_table(dev);
14821492
err_remove_swnode:
@@ -1492,8 +1502,9 @@ gpio_virtuser_device_deactivate(struct gpio_virtuser_device *dev)
14921502

14931503
lockdep_assert_held(&dev->lock);
14941504

1495-
swnode = dev_fwnode(&dev->probe_data.pdev->dev);
1496-
dev_sync_probe_unregister(&dev->probe_data);
1505+
swnode = dev_fwnode(&dev->pdev->dev);
1506+
platform_device_unregister(dev->pdev);
1507+
dev->pdev = NULL;
14971508
gpio_virtuser_remove_lookup_table(dev);
14981509
fwnode_remove_software_node(swnode);
14991510
}
@@ -1723,7 +1734,6 @@ gpio_virtuser_config_make_device_group(struct config_group *group,
17231734
&gpio_virtuser_device_config_group_type);
17241735
mutex_init(&dev->lock);
17251736
INIT_LIST_HEAD(&dev->lookup_list);
1726-
dev_sync_probe_init(&dev->probe_data);
17271737

17281738
return &no_free_ptr(dev)->group;
17291739
}

0 commit comments

Comments
 (0)