[PATCH v3 04/11] drivers/base/devcoredump: convert devcd_count to counter_atomic32

Shuah Khan
2020-10-09T15:56:23Z

counter_atomic* is introduced to be used when a variable is used as
a simple counter and doesn't guard object lifetimes. This clearly
differentiates atomic_t usages that guard object lifetimes.

counter_atomic* variables wrap around to INT_MIN when it overflows
and should not be used to guard resource lifetimes, device usage and
open counts that control state changes, and pm states.

devcd_count is used to track dev_coredumpm device count and used in
device name string. It doesn't guard object lifetimes, device usage
counts, device open counts, and pm states. There is very little chance
of this counter overflowing. Convert it to use counter_atomic32.

This conversion doesn't change the overflow wrap around behavior.

Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
---
drivers/base/devcoredump.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/base/devcoredump.c b/drivers/base/devcoredump.c
index e42d0b514384..59bc48ee44af 100644
--- a/drivers/base/devcoredump.c
+++ b/drivers/base/devcoredump.c
@@ -16,6 +16,7 @@
#include <linux/slab.h>
#include <linux/fs.h>
#include <linux/workqueue.h>
+#include <linux/counters.h>

static struct class devcd_class;

@@ -255,7 +256,7 @@ void dev_coredumpm(struct device *dev, struct module *owner,
void *data, size_t datalen),
void (*free)(void *data))
{
- static atomic_t devcd_count = ATOMIC_INIT(0);
+ static struct counter_atomic32 devcd_count = COUNTER_ATOMIC_INIT(0);
struct devcd_entry *devcd;
struct device *existing;

@@ -286,7 +287,7 @@ void dev_coredumpm(struct device *dev, struct module *owner,
device_initialize(&devcd->devcd_dev);

dev_set_name(&devcd->devcd_dev, "devcd%d",
- atomic_inc_return(&devcd_count));
+ counter_atomic32_inc_return(&devcd_count));
devcd->devcd_dev.class = &devcd_class;

if (device_add(&devcd->devcd_dev))
--
2.25.1