|
@@ -16,6 +16,7 @@
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/smp_lock.h>
|
|
|
#include <linux/kmod.h>
|
|
|
+#include <linux/mutex.h>
|
|
|
|
|
|
#include <net/irda/irda.h>
|
|
|
|
|
@@ -28,7 +29,7 @@
|
|
|
*/
|
|
|
|
|
|
static LIST_HEAD(dongle_list); /* list of registered dongle drivers */
|
|
|
-static DECLARE_MUTEX(dongle_list_lock); /* protects the list */
|
|
|
+static DEFINE_MUTEX(dongle_list_lock); /* protects the list */
|
|
|
|
|
|
int irda_register_dongle(struct dongle_driver *new)
|
|
|
{
|
|
@@ -38,25 +39,25 @@ int irda_register_dongle(struct dongle_driver *new)
|
|
|
IRDA_DEBUG(0, "%s : registering dongle \"%s\" (%d).\n",
|
|
|
__FUNCTION__, new->driver_name, new->type);
|
|
|
|
|
|
- down(&dongle_list_lock);
|
|
|
+ mutex_lock(&dongle_list_lock);
|
|
|
list_for_each(entry, &dongle_list) {
|
|
|
drv = list_entry(entry, struct dongle_driver, dongle_list);
|
|
|
if (new->type == drv->type) {
|
|
|
- up(&dongle_list_lock);
|
|
|
+ mutex_unlock(&dongle_list_lock);
|
|
|
return -EEXIST;
|
|
|
}
|
|
|
}
|
|
|
list_add(&new->dongle_list, &dongle_list);
|
|
|
- up(&dongle_list_lock);
|
|
|
+ mutex_unlock(&dongle_list_lock);
|
|
|
return 0;
|
|
|
}
|
|
|
EXPORT_SYMBOL(irda_register_dongle);
|
|
|
|
|
|
int irda_unregister_dongle(struct dongle_driver *drv)
|
|
|
{
|
|
|
- down(&dongle_list_lock);
|
|
|
+ mutex_lock(&dongle_list_lock);
|
|
|
list_del(&drv->dongle_list);
|
|
|
- up(&dongle_list_lock);
|
|
|
+ mutex_unlock(&dongle_list_lock);
|
|
|
return 0;
|
|
|
}
|
|
|
EXPORT_SYMBOL(irda_unregister_dongle);
|
|
@@ -75,7 +76,7 @@ int sirdev_get_dongle(struct sir_dev *dev, IRDA_DONGLE type)
|
|
|
return -EBUSY;
|
|
|
|
|
|
/* serialize access to the list of registered dongles */
|
|
|
- down(&dongle_list_lock);
|
|
|
+ mutex_lock(&dongle_list_lock);
|
|
|
|
|
|
list_for_each(entry, &dongle_list) {
|
|
|
drv = list_entry(entry, struct dongle_driver, dongle_list);
|
|
@@ -109,14 +110,14 @@ int sirdev_get_dongle(struct sir_dev *dev, IRDA_DONGLE type)
|
|
|
if (!drv->open || (err=drv->open(dev))!=0)
|
|
|
goto out_reject; /* failed to open driver */
|
|
|
|
|
|
- up(&dongle_list_lock);
|
|
|
+ mutex_unlock(&dongle_list_lock);
|
|
|
return 0;
|
|
|
|
|
|
out_reject:
|
|
|
dev->dongle_drv = NULL;
|
|
|
module_put(drv->owner);
|
|
|
out_unlock:
|
|
|
- up(&dongle_list_lock);
|
|
|
+ mutex_unlock(&dongle_list_lock);
|
|
|
return err;
|
|
|
}
|
|
|
|