summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOhad Ben-Cohen <ohad@wizery.com>2011-09-05 16:42:36 +0300
committerOhad Ben-Cohen <ohad@wizery.com>2011-09-21 19:45:32 +0300
commite467b6421435f467e274d4f25d62900e1e0e4286 (patch)
tree9b9b9eb7ab9680b89d34a2732f73b78b2d107582
parent315d8f5ccdbb2abb609d1ca1119fb32273a09cf8 (diff)
downloadlinux-e467b6421435f467e274d4f25d62900e1e0e4286.tar.bz2
hwspinlock/core: simplify 'owner' handling
Use struct device_driver's owner member instead of asking drivers to explicitly pass the owner again. This simplifies drivers and also save some memory, since there's no point now in maintaining a separate owner pointer per hwspinlock. Signed-off-by: Ohad Ben-Cohen <ohad@wizery.com>
-rw-r--r--Documentation/hwspinlock.txt6
-rw-r--r--drivers/hwspinlock/hwspinlock_core.c4
-rw-r--r--drivers/hwspinlock/hwspinlock_internal.h4
-rw-r--r--drivers/hwspinlock/omap_hwspinlock.c2
4 files changed, 6 insertions, 10 deletions
diff --git a/Documentation/hwspinlock.txt b/Documentation/hwspinlock.txt
index 7dcd1a4e726c..bbaa4649b637 100644
--- a/Documentation/hwspinlock.txt
+++ b/Documentation/hwspinlock.txt
@@ -256,18 +256,16 @@ underlying hwspinlock implementation using the hwspin_lock_register() API.
* @ops: vendor-specific hwspinlock handlers
* @id: a global, unique, system-wide, index of the lock.
* @lock: initialized and used by hwspinlock core
- * @owner: underlying implementation module, used to maintain module ref count
*/
struct hwspinlock {
struct device *dev;
const struct hwspinlock_ops *ops;
int id;
spinlock_t lock;
- struct module *owner;
};
-The underlying implementation is responsible to assign the dev, ops, id and
-owner members. The lock member, OTOH, is initialized and used by the hwspinlock
+The underlying implementation is responsible to assign the dev, ops and id
+members. The lock member, OTOH, is initialized and used by the hwspinlock
core.
6. Implementation callbacks
diff --git a/drivers/hwspinlock/hwspinlock_core.c b/drivers/hwspinlock/hwspinlock_core.c
index 43a62714b4fb..af5175c5d5f4 100644
--- a/drivers/hwspinlock/hwspinlock_core.c
+++ b/drivers/hwspinlock/hwspinlock_core.c
@@ -352,7 +352,7 @@ static int __hwspin_lock_request(struct hwspinlock *hwlock)
int ret;
/* prevent underlying implementation from being removed */
- if (!try_module_get(hwlock->owner)) {
+ if (!try_module_get(hwlock->dev->driver->owner)) {
dev_err(hwlock->dev, "%s: can't get owner\n", __func__);
return -EINVAL;
}
@@ -535,7 +535,7 @@ int hwspin_lock_free(struct hwspinlock *hwlock)
/* sanity check (this shouldn't happen) */
WARN_ON(tmp != hwlock);
- module_put(hwlock->owner);
+ module_put(hwlock->dev->driver->owner);
out:
spin_unlock(&hwspinlock_tree_lock);
diff --git a/drivers/hwspinlock/hwspinlock_internal.h b/drivers/hwspinlock/hwspinlock_internal.h
index 69935e6b93e5..fb25830c2ee7 100644
--- a/drivers/hwspinlock/hwspinlock_internal.h
+++ b/drivers/hwspinlock/hwspinlock_internal.h
@@ -44,10 +44,9 @@ struct hwspinlock_ops {
* @ops: platform-specific hwspinlock handlers
* @id: a global, unique, system-wide, index of the lock.
* @lock: initialized and used by hwspinlock core
- * @owner: underlying implementation module, used to maintain module ref count
*
* Note: currently simplicity was opted for, but later we can squeeze some
- * memory bytes by grouping the dev, ops and owner members in a single
+ * memory bytes by grouping dev, ops in a single
* per-platform struct, and have all hwspinlocks point at it.
*/
struct hwspinlock {
@@ -55,7 +54,6 @@ struct hwspinlock {
const struct hwspinlock_ops *ops;
int id;
spinlock_t lock;
- struct module *owner;
};
#endif /* __HWSPINLOCK_HWSPINLOCK_H */
diff --git a/drivers/hwspinlock/omap_hwspinlock.c b/drivers/hwspinlock/omap_hwspinlock.c
index a8f02734c026..1d19fe9324a4 100644
--- a/drivers/hwspinlock/omap_hwspinlock.c
+++ b/drivers/hwspinlock/omap_hwspinlock.c
@@ -143,7 +143,6 @@ static int __devinit omap_hwspinlock_probe(struct platform_device *pdev)
}
omap_lock->lock.dev = &pdev->dev;
- omap_lock->lock.owner = THIS_MODULE;
omap_lock->lock.id = i;
omap_lock->lock.ops = &omap_hwspinlock_ops;
omap_lock->addr = io_base + LOCK_BASE_OFFSET + sizeof(u32) * i;
@@ -208,6 +207,7 @@ static struct platform_driver omap_hwspinlock_driver = {
.remove = omap_hwspinlock_remove,
.driver = {
.name = "omap_hwspinlock",
+ .owner = THIS_MODULE,
},
};