hwspinlock/core: register a bank of hwspinlocks in a single API call
authorOhad Ben-Cohen <ohad@wizery.com>
Tue, 6 Sep 2011 12:39:21 +0000 (15:39 +0300)
committerOhad Ben-Cohen <ohad@wizery.com>
Wed, 21 Sep 2011 16:45:34 +0000 (19:45 +0300)
commit300bab9770e2bd10262bcc78e7249fdce2c74b38
tree5c23d7dce82b96fa177ea7c854de7f4b36992c80
parentc536abfdf5227987b8a72ff955b64e62fd58fe91
hwspinlock/core: register a bank of hwspinlocks in a single API call

Hardware Spinlock devices usually contain numerous locks (known
devices today support between 32 to 256 locks).

Originally hwspinlock core required drivers to register (and later,
when needed, unregister) each lock separately.

That worked, but required hwspinlocks drivers to do a bit extra work
when they were probed/removed.

This patch changes hwspin_lock_{un}register() to allow a bank of
hwspinlocks to be {un}registered in a single invocation.

A new 'struct hwspinlock_device', which contains an array of 'struct
hwspinlock's is now being passed to the core upon registration (so
instead of wrapping each struct hwspinlock, a priv member has been added
to allow drivers to piggyback their private data with each hwspinlock).

While at it, several per-lock members were moved to be per-device:
1. struct device *dev
2. struct hwspinlock_ops *ops

In addition, now that the array of locks is handled by the core,
there's no reason to maintain a per-lock 'int id' member: the id of the
lock anyway equals to its index in the bank's array plus the bank's
base_id.
Remove this per-lock id member too, and instead use a simple pointers
arithmetic to derive it.

As a result of this change, hwspinlocks drivers are now simpler and smaller
(about %20 code reduction) and the memory footprint of the hwspinlock
framework is reduced.

Signed-off-by: Ohad Ben-Cohen <ohad@wizery.com>
Documentation/hwspinlock.txt
drivers/hwspinlock/hwspinlock_core.c
drivers/hwspinlock/hwspinlock_internal.h
drivers/hwspinlock/omap_hwspinlock.c
include/linux/hwspinlock.h