diff options
| author | Ohad Ben-Cohen <ohad@wizery.com> | 2011-09-05 16:42:36 +0300 | 
|---|---|---|
| committer | Ohad Ben-Cohen <ohad@wizery.com> | 2011-09-21 19:45:32 +0300 | 
| commit | e467b6421435f467e274d4f25d62900e1e0e4286 (patch) | |
| tree | 9b9b9eb7ab9680b89d34a2732f73b78b2d107582 /drivers/hwspinlock | |
| parent | 315d8f5ccdbb2abb609d1ca1119fb32273a09cf8 (diff) | |
| download | linux-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>
Diffstat (limited to 'drivers/hwspinlock')
| -rw-r--r-- | drivers/hwspinlock/hwspinlock_core.c | 4 | ||||
| -rw-r--r-- | drivers/hwspinlock/hwspinlock_internal.h | 4 | ||||
| -rw-r--r-- | drivers/hwspinlock/omap_hwspinlock.c | 2 | 
3 files changed, 4 insertions, 6 deletions
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,  	},  };  |