From 75a26e94d25a10ca14c5a84453f7642eff806ad5 Mon Sep 17 00:00:00 2001
From: Alessandro Rubini <rubini@gnudd.com>
Date: Sun, 13 Nov 2011 11:58:33 +0100
Subject: [PATCH] zio core: renamed global status structure, "zstat" is now a
 pointer

Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
Acked-by: Federico Vaga <federico.vaga@gmail.com>
---
 include/linux/zio.h |  2 +-
 zio-dev.c           | 31 ++++++++++++++--------------
 zio-sys.c           | 50 +++++++++++++++++++++++----------------------
 3 files changed, 43 insertions(+), 40 deletions(-)

diff --git a/include/linux/zio.h b/include/linux/zio.h
index 8c7f3bf..3ba2091 100644
--- a/include/linux/zio.h
+++ b/include/linux/zio.h
@@ -310,7 +310,7 @@ struct zio_status {
 	struct zio_object_list	all_buffer_types;
 };
 
-extern struct zio_status zstat;
+extern struct zio_status zio_global_status;
 int __zio_minorbase_get(struct zio_cset *zcset);
 void __zio_minorbase_put(struct zio_cset *zcset);
 
diff --git a/zio-dev.c b/zio-dev.c
index 85217dc..6a9c9e9 100644
--- a/zio-dev.c
+++ b/zio-dev.c
@@ -10,7 +10,8 @@
 #include <linux/zio-buffer.h>
 
 static DEFINE_MUTEX(zmutex);
-struct zio_status zstat;
+struct zio_status zio_global_status;
+static struct zio_status *zstat = &zio_global_status; /* Always use ptr */
 
 static ssize_t zio_show_version(struct class *class,
 			struct class_attribute *attr,
@@ -50,7 +51,7 @@ static struct zio_channel *__zio_minor_to_chan(dev_t mm)
 
 	chan_minor = mm & (ZIO_NMAX_CSET_MINORS-1);
 	cset_base = mm & (~(ZIO_NMAX_CSET_MINORS-1));
-	list_for_each_entry(zcset, &zstat.list_cset, list_cset) {
+	list_for_each_entry(zcset, &zstat->list_cset, list_cset) {
 		if (cset_base == zcset->basedev) {
 			found = 1;
 			break;
@@ -128,12 +129,12 @@ int __zio_minorbase_get(struct zio_cset *zcset)
 {
 	int i;
 
-	i = find_first_zero_bit(zstat.cset_minors_mask, ZIO_CSET_MAXNUM);
+	i = find_first_zero_bit(zstat->cset_minors_mask, ZIO_CSET_MAXNUM);
 	if (i >= ZIO_CSET_MAXNUM)
 		return 1;
-	set_bit(i, zstat.cset_minors_mask);
+	set_bit(i, zstat->cset_minors_mask);
 	/* set the base minor for a cset*/
-	zcset->basedev = zstat.basedev + (i * ZIO_NMAX_CSET_MINORS);
+	zcset->basedev = zstat->basedev + (i * ZIO_NMAX_CSET_MINORS);
 	pr_debug("%s:%i BASEMINOR 0x%x\n", __func__, __LINE__, zcset->basedev);
 	return 0;
 }
@@ -141,8 +142,8 @@ void __zio_minorbase_put(struct zio_cset *zcset)
 {
 	int i;
 
-	i = (zcset->basedev - zstat.basedev) / ZIO_NMAX_CSET_MINORS;
-	clear_bit(i, zstat.cset_minors_mask);
+	i = (zcset->basedev - zstat->basedev) / ZIO_NMAX_CSET_MINORS;
+	clear_bit(i, zstat->cset_minors_mask);
 }
 
 /*
@@ -204,7 +205,7 @@ int __zio_register_cdev()
 		goto out;
 	}
 	/* alloc to zio the maximum number of minors usable in ZIO */
-	err = alloc_chrdev_region(&zstat.basedev, 0,
+	err = alloc_chrdev_region(&zstat->basedev, 0,
 			ZIO_CSET_MAXNUM * ZIO_NMAX_CSET_MINORS, "zio");
 	if (err) {
 		pr_err("%s: unable to allocate region for %i minors\n",
@@ -212,16 +213,16 @@ int __zio_register_cdev()
 		goto out;
 	}
 	/* all ZIO's devices, buffers and triggers has zfops as f_op */
-	cdev_init(&zstat.chrdev, &zfops);
-	zstat.chrdev.owner = THIS_MODULE;
-	err = cdev_add(&zstat.chrdev, zstat.basedev,
+	cdev_init(&zstat->chrdev, &zfops);
+	zstat->chrdev.owner = THIS_MODULE;
+	err = cdev_add(&zstat->chrdev, zstat->basedev,
 			ZIO_CSET_MAXNUM * ZIO_NMAX_CSET_MINORS);
 	if (err)
 		goto out_cdev;
-	INIT_LIST_HEAD(&zstat.list_cset);
+	INIT_LIST_HEAD(&zstat->list_cset);
 	return 0;
 out_cdev:
-	unregister_chrdev_region(zstat.basedev,
+	unregister_chrdev_region(zstat->basedev,
 			ZIO_CSET_MAXNUM * ZIO_NMAX_CSET_MINORS);
 out:
 	class_unregister(&zio_class);
@@ -229,8 +230,8 @@ out:
 }
 void __zio_unregister_cdev()
 {
-	cdev_del(&zstat.chrdev);
-	unregister_chrdev_region(zstat.basedev,
+	cdev_del(&zstat->chrdev);
+	unregister_chrdev_region(zstat->basedev,
 				ZIO_CSET_MAXNUM * ZIO_NMAX_CSET_MINORS);
 	class_unregister(&zio_class);
 }
diff --git a/zio-sys.c b/zio-sys.c
index de68c2e..36770e3 100644
--- a/zio-sys.c
+++ b/zio-sys.c
@@ -14,6 +14,8 @@
 #include <linux/zio-buffer.h>
 #include <linux/zio-trigger.h>
 
+static struct zio_status *zstat = &zio_global_status; /* Always use ptr */
+
 const char zio_attr_names[ZATTR_STD_ATTR_NUM][ZIO_NAME_LEN] = {
 	[ZATTR_GAIN]		= "gain_factor",
 	[ZATTR_OFFSET]		= "offset",
@@ -67,7 +69,7 @@ static struct zio_buffer_type *zbuf_find_by_name(char *name)
 {
 	struct zio_obj_head *zbuf_head;
 
-	zbuf_head = __find_by_name(&zstat.all_buffer_types, name);
+	zbuf_head = __find_by_name(&zstat->all_buffer_types, name);
 	pr_debug("%s:%d %s\n", __func__, __LINE__, name);
 	if (!zbuf_head)
 		return NULL;
@@ -78,7 +80,7 @@ static struct zio_trigger_type *trig_find_by_name(char *name)
 {
 	struct zio_obj_head *trig_head;
 
-	trig_head = __find_by_name(&zstat.all_trigger_types, name);
+	trig_head = __find_by_name(&zstat->all_trigger_types, name);
 	pr_debug("%s:%d %s\n", __func__, __LINE__, name);
 	if (!trig_head)
 		return NULL;
@@ -874,7 +876,7 @@ static int cset_register(struct zio_cset *cset)
 			goto out_trig;
 	}
 
-	list_add(&cset->list_cset, &zstat.list_cset);
+	list_add(&cset->list_cset, &zstat->list_cset);
 
 	/* private initialization function */
 	if (cset->init) {
@@ -963,9 +965,9 @@ static int zobj_register(struct zio_object_list *zlist,
 	}
 	item->obj_head = head;
 	item->owner = owner;
-	spin_lock(&zstat.lock);
+	spin_lock(&zstat->lock);
 	list_add(&item->list, &zlist->list);
-	spin_unlock(&zstat.lock);
+	spin_unlock(&zstat->lock);
 	return 0;
 out_km:
 	kobject_del(&head->kobj);
@@ -984,9 +986,9 @@ static void zobj_unregister(struct zio_object_list *zlist,
 		return;
 	list_for_each_entry(item, &zlist->list, list) {
 		if (item->obj_head == zobj) {
-			spin_lock(&zstat.lock);
+			spin_lock(&zstat->lock);
 			list_del(&item->list);
-			spin_unlock(&zstat.lock);
+			spin_unlock(&zstat->lock);
 			kfree(item);
 			break;
 		}
@@ -1005,7 +1007,7 @@ int zio_register_dev(struct zio_device *zdev, const char *name)
 		return -EINVAL;
 	}
 
-	err = zobj_register(&zstat.all_devices, &zdev->head,
+	err = zobj_register(&zstat->all_devices, &zdev->head,
 			    ZDEV, zdev->owner, name);
 	if (err)
 		goto out;
@@ -1031,7 +1033,7 @@ out_cset:
 	for (j = i-1; j >= 0; j--)
 		cset_unregister(zdev->cset + j);
 out_sysfs:
-	zobj_unregister(&zstat.all_devices, &zdev->head);
+	zobj_unregister(&zstat->all_devices, &zdev->head);
 out:
 	return err;
 }
@@ -1049,7 +1051,7 @@ void zio_unregister_dev(struct zio_device *zdev)
 	for (i = 0; i < zdev->n_cset; i++)
 		cset_unregister(&zdev->cset[i]);
 	zattr_remove_set(&zdev->head);
-	zobj_unregister(&zstat.all_devices, &zdev->head);
+	zobj_unregister(&zstat->all_devices, &zdev->head);
 }
 EXPORT_SYMBOL(zio_unregister_dev);
 
@@ -1061,7 +1063,7 @@ int zio_register_buf(struct zio_buffer_type *zbuf, const char *name)
 	if (!zbuf || !name)
 		return -EINVAL;
 
-	err = zobj_register(&zstat.all_buffer_types, &zbuf->head,
+	err = zobj_register(&zstat->all_buffer_types, &zbuf->head,
 			    ZBUF, zbuf->owner, name);
 	if (err)
 		goto out;
@@ -1077,7 +1079,7 @@ void zio_unregister_buf(struct zio_buffer_type *zbuf)
 {
 	if (!zbuf)
 		return;
-	zobj_unregister(&zstat.all_buffer_types, &zbuf->head);
+	zobj_unregister(&zstat->all_buffer_types, &zbuf->head);
 }
 EXPORT_SYMBOL(zio_unregister_buf);
 
@@ -1088,7 +1090,7 @@ int zio_register_trig(struct zio_trigger_type *trig, const char *name)
 
 	if (!trig || !name)
 		return -EINVAL;
-	err = zobj_register(&zstat.all_trigger_types, &trig->head,
+	err = zobj_register(&zstat->all_trigger_types, &trig->head,
 			    ZTRIG, trig->owner, name);
 	if (err)
 		goto out;
@@ -1104,7 +1106,7 @@ void zio_unregister_trig(struct zio_trigger_type *trig)
 {
 	if (!trig)
 		return;
-	zobj_unregister(&zstat.all_trigger_types, &trig->head);
+	zobj_unregister(&zstat->all_trigger_types, &trig->head);
 }
 EXPORT_SYMBOL(zio_unregister_trig);
 
@@ -1147,16 +1149,16 @@ static int __init zio_init(void)
 	if (err)
 		goto out_cdev;
 	/* create the zio container */
-	zstat.kobj = kobject_create_and_add("zio", NULL);
-	if (!zstat.kobj)
+	zstat->kobj = kobject_create_and_add("zio", NULL);
+	if (!zstat->kobj)
 		goto out_kobj;
 
 	/* register the object lists (device, buffer and trigger) */
-	zlist_register(&zstat.all_devices, zstat.kobj, ZDEV,
+	zlist_register(&zstat->all_devices, zstat->kobj, ZDEV,
 			"devices");
-	zlist_register(&zstat.all_trigger_types, zstat.kobj, ZTRIG,
+	zlist_register(&zstat->all_trigger_types, zstat->kobj, ZTRIG,
 			"triggers");
-	zlist_register(&zstat.all_buffer_types, zstat.kobj, ZBUF,
+	zlist_register(&zstat->all_buffer_types, zstat->kobj, ZBUF,
 			"buffers");
 	pr_info("zio-core had been loaded\n");
 	return 0;
@@ -1170,12 +1172,12 @@ out_cdev:
 
 static void __exit zio_exit(void)
 {
-	zlist_unregister(&zstat.all_devices);
-	zlist_unregister(&zstat.all_buffer_types);
-	zlist_unregister(&zstat.all_trigger_types);
+	zlist_unregister(&zstat->all_devices);
+	zlist_unregister(&zstat->all_buffer_types);
+	zlist_unregister(&zstat->all_trigger_types);
 
-	kobject_del(zstat.kobj);
-	kobject_put(zstat.kobj);
+	kobject_del(zstat->kobj);
+	kobject_put(zstat->kobj);
 
 	__zio_unregister_cdev();
 
-- 
GitLab