Messages in this thread Patch in this message | | | From | Shuah Khan <> | Subject | [PATCH v2 05/13] drivers/base/test/test_async_driver_probe: convert to use seqnum_ops | Date | Fri, 13 Nov 2020 10:46:07 -0700 |
| |
Sequence Number api provides interfaces for unsigned atomic up counters leveraging atomic_t and atomic64_t ops underneath.
atomic_t variables used to count errors, warns, keep track of timeout, and async completion are counters. Convert them to use seqnum32 and init counters to 0.
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org> --- drivers/base/test/test_async_driver_probe.c | 28 +++++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/drivers/base/test/test_async_driver_probe.c b/drivers/base/test/test_async_driver_probe.c index 3bb7beb127a9..75a3b617dcac 100644 --- a/drivers/base/test/test_async_driver_probe.c +++ b/drivers/base/test/test_async_driver_probe.c @@ -14,11 +14,15 @@ #include <linux/numa.h> #include <linux/nodemask.h> #include <linux/topology.h> +#include <linux/seqnum_ops.h> #define TEST_PROBE_DELAY (5 * 1000) /* 5 sec */ #define TEST_PROBE_THRESHOLD (TEST_PROBE_DELAY / 2) -static atomic_t warnings, errors, timeout, async_completed; +static struct seqnum32 warnings = SEQNUM_INIT(0); +static struct seqnum32 errors = SEQNUM_INIT(0); +static struct seqnum32 timeout = SEQNUM_INIT(0); +static struct seqnum32 async_completed = SEQNUM_INIT(0); static int test_probe(struct platform_device *pdev) { @@ -29,9 +33,9 @@ static int test_probe(struct platform_device *pdev) * have then report it as an error, otherwise we wil sleep for the * required amount of time and then report completion. */ - if (atomic_read(&timeout)) { + if (seqnum32_fetch(&timeout)) { dev_err(dev, "async probe took too long\n"); - atomic_inc(&errors); + seqnum32_inc_return(&errors); } else { dev_dbg(&pdev->dev, "sleeping for %d msecs in probe\n", TEST_PROBE_DELAY); @@ -48,10 +52,10 @@ static int test_probe(struct platform_device *pdev) dev_to_node(dev) != numa_node_id()) { dev_warn(dev, "NUMA node mismatch %d != %d\n", dev_to_node(dev), numa_node_id()); - atomic_inc(&warnings); + seqnum32_inc_return(&warnings); } - atomic_inc(&async_completed); + seqnum32_inc_return(&async_completed); } return 0; @@ -244,11 +248,12 @@ static int __init test_async_probe_init(void) * Otherwise if they completed without errors or warnings then * report successful completion. */ - if (atomic_read(&async_completed) != async_id) { + if (seqnum32_fetch(&async_completed) != async_id) { pr_err("async events still pending, forcing timeout\n"); - atomic_inc(&timeout); + seqnum32_inc_return(&timeout); err = -ETIMEDOUT; - } else if (!atomic_read(&errors) && !atomic_read(&warnings)) { + } else if (!seqnum32_fetch(&errors) && + !seqnum32_fetch(&warnings)) { pr_info("completed successfully\n"); return 0; } @@ -271,12 +276,13 @@ static int __init test_async_probe_init(void) * errors or warnings being reported by the probe routine. */ if (err) - atomic_inc(&errors); + seqnum32_inc_return(&errors); else err = -EINVAL; - pr_err("Test failed with %d errors and %d warnings\n", - atomic_read(&errors), atomic_read(&warnings)); + pr_err("Test failed with %u errors and %u warnings\n", + seqnum32_fetch(&errors), + seqnum32_fetch(&warnings)); return err; } -- 2.27.0
| |