lkml.org 
[lkml]   [2020]   [Nov]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH v2 05/13] drivers/base/test/test_async_driver_probe: convert to use seqnum_ops
Date
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
\
 
 \ /
  Last update: 2020-11-13 18:48    [W:0.129 / U:1.160 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site