Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 219718
b: refs/heads/master
c: b156cf7
h: refs/heads/master
v: v3
  • Loading branch information
Jonathan Cameron authored and Greg Kroah-Hartman committed Sep 5, 2010
1 parent 31bd69e commit b9e3928
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 37 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: 30295c8936f3a426985e99bebb17d72bd7847910
refs/heads/master: b156cf70e1f4befc4856baaf9681dede9a143888
8 changes: 4 additions & 4 deletions trunk/drivers/staging/iio/iio.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ void iio_device_unregister(struct iio_dev *dev_info);
* physical interrupt lines
* @dev_info: the iio device for which the is an interrupt line
* @line_number: associated line number
* @id: idr allocated unique id number
* @id: ida allocated unique id number
* @irq: associate interrupt number
* @ev_list: event handler list for associated events
* @ev_list_lock: ensure only one access to list at a time
Expand Down Expand Up @@ -302,8 +302,8 @@ static inline bool iio_ring_enabled(struct iio_dev *dev_info)
| INDIO_RING_HARDWARE_BUFFER);
};

struct idr;
struct ida;

int iio_get_new_idr_val(struct idr *this_idr);
void iio_free_idr_val(struct idr *this_idr, int id);
int iio_get_new_ida_val(struct ida *this_ida);
void iio_free_ida_val(struct ida *this_ida, int id);
#endif /* _INDUSTRIAL_IO_H_ */
63 changes: 31 additions & 32 deletions trunk/drivers/staging/iio/industrialio-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@
#define IIO_ID_FORMAT IIO_ID_PREFIX "%d"

/* IDR to assign each registered device a unique id*/
static DEFINE_IDR(iio_idr);
static DEFINE_IDA(iio_ida);
/* IDR to allocate character device minor numbers */
static DEFINE_IDR(iio_chrdev_idr);
static DEFINE_IDA(iio_chrdev_ida);
/* Lock used to protect both of the above */
static DEFINE_SPINLOCK(iio_idr_lock);
static DEFINE_SPINLOCK(iio_ida_lock);

dev_t iio_devt;
EXPORT_SYMBOL(iio_devt);
Expand Down Expand Up @@ -367,14 +367,14 @@ int iio_device_get_chrdev_minor(void)
{
int ret, val;

idr_again:
if (unlikely(idr_pre_get(&iio_chrdev_idr, GFP_KERNEL) == 0))
ida_again:
if (unlikely(ida_pre_get(&iio_chrdev_ida, GFP_KERNEL) == 0))
return -ENOMEM;
spin_lock(&iio_idr_lock);
ret = idr_get_new(&iio_chrdev_idr, NULL, &val);
spin_unlock(&iio_idr_lock);
spin_lock(&iio_ida_lock);
ret = ida_get_new(&iio_chrdev_ida, &val);
spin_unlock(&iio_ida_lock);
if (unlikely(ret == -EAGAIN))
goto idr_again;
goto ida_again;
else if (unlikely(ret))
return ret;
if (val > IIO_DEV_MAX)
Expand All @@ -384,9 +384,9 @@ int iio_device_get_chrdev_minor(void)

void iio_device_free_chrdev_minor(int val)
{
spin_lock(&iio_idr_lock);
idr_remove(&iio_chrdev_idr, val);
spin_unlock(&iio_idr_lock);
spin_lock(&iio_ida_lock);
ida_remove(&iio_chrdev_ida, val);
spin_unlock(&iio_ida_lock);
}

int iio_setup_ev_int(struct iio_event_interface *ev_int,
Expand Down Expand Up @@ -517,48 +517,47 @@ static void iio_device_unregister_sysfs(struct iio_dev *dev_info)
}

/* Return a negative errno on failure */
int iio_get_new_idr_val(struct idr *this_idr)
int iio_get_new_ida_val(struct ida *this_ida)
{
int ret;
int val;

idr_again:
if (unlikely(idr_pre_get(this_idr, GFP_KERNEL) == 0))
ida_again:
if (unlikely(ida_pre_get(this_ida, GFP_KERNEL) == 0))
return -ENOMEM;

spin_lock(&iio_idr_lock);
ret = idr_get_new(this_idr, NULL, &val);
spin_unlock(&iio_idr_lock);
spin_lock(&iio_ida_lock);
ret = ida_get_new(this_ida, &val);
spin_unlock(&iio_ida_lock);
if (unlikely(ret == -EAGAIN))
goto idr_again;
goto ida_again;
else if (unlikely(ret))
return ret;

return val;
}
EXPORT_SYMBOL(iio_get_new_idr_val);
EXPORT_SYMBOL(iio_get_new_ida_val);

void iio_free_idr_val(struct idr *this_idr, int id)
void iio_free_ida_val(struct ida *this_ida, int id)
{
spin_lock(&iio_idr_lock);
idr_remove(this_idr, id);
spin_unlock(&iio_idr_lock);
spin_lock(&iio_ida_lock);
ida_remove(this_ida, id);
spin_unlock(&iio_ida_lock);
}
EXPORT_SYMBOL(iio_free_idr_val);
EXPORT_SYMBOL(iio_free_ida_val);

static int iio_device_register_id(struct iio_dev *dev_info,
struct idr *this_idr)
struct ida *this_ida)
{

dev_info->id = iio_get_new_idr_val(&iio_idr);
dev_info->id = iio_get_new_ida_val(&iio_ida);
if (dev_info->id < 0)
return dev_info->id;
return 0;
}

static void iio_device_unregister_id(struct iio_dev *dev_info)
{
iio_free_idr_val(&iio_idr, dev_info->id);
iio_free_ida_val(&iio_ida, dev_info->id);
}

static inline int __iio_add_event_config_attrs(struct iio_dev *dev_info, int i)
Expand Down Expand Up @@ -757,7 +756,7 @@ int iio_device_register(struct iio_dev *dev_info)
{
int ret;

ret = iio_device_register_id(dev_info, &iio_idr);
ret = iio_device_register_id(dev_info, &iio_ida);
if (ret) {
dev_err(&dev_info->dev, "Failed to get id\n");
goto error_ret;
Expand All @@ -766,7 +765,7 @@ int iio_device_register(struct iio_dev *dev_info)

ret = device_add(&dev_info->dev);
if (ret)
goto error_free_idr;
goto error_free_ida;
ret = iio_device_register_sysfs(dev_info);
if (ret) {
dev_err(dev_info->dev.parent,
Expand All @@ -788,7 +787,7 @@ int iio_device_register(struct iio_dev *dev_info)
iio_device_unregister_sysfs(dev_info);
error_del_device:
device_del(&dev_info->dev);
error_free_idr:
error_free_ida:
iio_device_unregister_id(dev_info);
error_ret:
return ret;
Expand Down

0 comments on commit b9e3928

Please sign in to comment.