Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 273334
b: refs/heads/master
c: e467b64
h: refs/heads/master
v: v3
  • Loading branch information
Ohad Ben-Cohen committed Sep 21, 2011
1 parent 6845cfb commit f3524e7
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 315d8f5ccdbb2abb609d1ca1119fb32273a09cf8
refs/heads/master: e467b6421435f467e274d4f25d62900e1e0e4286
6 changes: 2 additions & 4 deletions trunk/Documentation/hwspinlock.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/hwspinlock/hwspinlock_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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);
Expand Down
4 changes: 1 addition & 3 deletions trunk/drivers/hwspinlock/hwspinlock_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,16 @@ 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 {
struct device *dev;
const struct hwspinlock_ops *ops;
int id;
spinlock_t lock;
struct module *owner;
};

#endif /* __HWSPINLOCK_HWSPINLOCK_H */
2 changes: 1 addition & 1 deletion trunk/drivers/hwspinlock/omap_hwspinlock.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -208,6 +207,7 @@ static struct platform_driver omap_hwspinlock_driver = {
.remove = omap_hwspinlock_remove,
.driver = {
.name = "omap_hwspinlock",
.owner = THIS_MODULE,
},
};

Expand Down

0 comments on commit f3524e7

Please sign in to comment.