aboutsummaryrefslogtreecommitdiffstats
path: root/sound/core/timer.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2006-01-16 10:29:08 -0500
committerJaroslav Kysela <perex@suse.cz>2006-03-22 04:24:50 -0500
commit1a60d4c5a0c4028559585a74e48593b16e1ca9b2 (patch)
treef03f8dfcd554f8ebbb295522dc46dfe4d110a484 /sound/core/timer.c
parentf0283f45a04d5cf31512e5e390a38504d97e7a97 (diff)
[ALSA] semaphore -> mutex (core part)
Semaphore to mutex conversion. The conversion was generated via scripts, and the result was validated automatically via a script as well. Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core/timer.c')
-rw-r--r--sound/core/timer.c77
1 files changed, 39 insertions, 38 deletions
diff --git a/sound/core/timer.c b/sound/core/timer.c
index 2425b971b240..cdeeb639b675 100644
--- a/sound/core/timer.c
+++ b/sound/core/timer.c
@@ -25,6 +25,7 @@
25#include <linux/smp_lock.h> 25#include <linux/smp_lock.h>
26#include <linux/slab.h> 26#include <linux/slab.h>
27#include <linux/time.h> 27#include <linux/time.h>
28#include <linux/mutex.h>
28#include <linux/moduleparam.h> 29#include <linux/moduleparam.h>
29#include <linux/string.h> 30#include <linux/string.h>
30#include <sound/core.h> 31#include <sound/core.h>
@@ -70,7 +71,7 @@ struct snd_timer_user {
70 struct timespec tstamp; /* trigger tstamp */ 71 struct timespec tstamp; /* trigger tstamp */
71 wait_queue_head_t qchange_sleep; 72 wait_queue_head_t qchange_sleep;
72 struct fasync_struct *fasync; 73 struct fasync_struct *fasync;
73 struct semaphore tread_sem; 74 struct mutex tread_sem;
74}; 75};
75 76
76/* list of timers */ 77/* list of timers */
@@ -82,7 +83,7 @@ static LIST_HEAD(snd_timer_slave_list);
82/* lock for slave active lists */ 83/* lock for slave active lists */
83static DEFINE_SPINLOCK(slave_active_lock); 84static DEFINE_SPINLOCK(slave_active_lock);
84 85
85static DECLARE_MUTEX(register_mutex); 86static DEFINE_MUTEX(register_mutex);
86 87
87static int snd_timer_free(struct snd_timer *timer); 88static int snd_timer_free(struct snd_timer *timer);
88static int snd_timer_dev_free(struct snd_device *device); 89static int snd_timer_dev_free(struct snd_device *device);
@@ -252,10 +253,10 @@ int snd_timer_open(struct snd_timer_instance **ti,
252 snd_printd("invalid slave class %i\n", tid->dev_sclass); 253 snd_printd("invalid slave class %i\n", tid->dev_sclass);
253 return -EINVAL; 254 return -EINVAL;
254 } 255 }
255 down(&register_mutex); 256 mutex_lock(&register_mutex);
256 timeri = snd_timer_instance_new(owner, NULL); 257 timeri = snd_timer_instance_new(owner, NULL);
257 if (!timeri) { 258 if (!timeri) {
258 up(&register_mutex); 259 mutex_unlock(&register_mutex);
259 return -ENOMEM; 260 return -ENOMEM;
260 } 261 }
261 timeri->slave_class = tid->dev_sclass; 262 timeri->slave_class = tid->dev_sclass;
@@ -263,37 +264,37 @@ int snd_timer_open(struct snd_timer_instance **ti,
263 timeri->flags |= SNDRV_TIMER_IFLG_SLAVE; 264 timeri->flags |= SNDRV_TIMER_IFLG_SLAVE;
264 list_add_tail(&timeri->open_list, &snd_timer_slave_list); 265 list_add_tail(&timeri->open_list, &snd_timer_slave_list);
265 snd_timer_check_slave(timeri); 266 snd_timer_check_slave(timeri);
266 up(&register_mutex); 267 mutex_unlock(&register_mutex);
267 *ti = timeri; 268 *ti = timeri;
268 return 0; 269 return 0;
269 } 270 }
270 271
271 /* open a master instance */ 272 /* open a master instance */
272 down(&register_mutex); 273 mutex_lock(&register_mutex);
273 timer = snd_timer_find(tid); 274 timer = snd_timer_find(tid);
274#ifdef CONFIG_KMOD 275#ifdef CONFIG_KMOD
275 if (timer == NULL) { 276 if (timer == NULL) {
276 up(&register_mutex); 277 mutex_unlock(&register_mutex);
277 snd_timer_request(tid); 278 snd_timer_request(tid);
278 down(&register_mutex); 279 mutex_lock(&register_mutex);
279 timer = snd_timer_find(tid); 280 timer = snd_timer_find(tid);
280 } 281 }
281#endif 282#endif
282 if (!timer) { 283 if (!timer) {
283 up(&register_mutex); 284 mutex_unlock(&register_mutex);
284 return -ENODEV; 285 return -ENODEV;
285 } 286 }
286 if (!list_empty(&timer->open_list_head)) { 287 if (!list_empty(&timer->open_list_head)) {
287 timeri = list_entry(timer->open_list_head.next, 288 timeri = list_entry(timer->open_list_head.next,
288 struct snd_timer_instance, open_list); 289 struct snd_timer_instance, open_list);
289 if (timeri->flags & SNDRV_TIMER_IFLG_EXCLUSIVE) { 290 if (timeri->flags & SNDRV_TIMER_IFLG_EXCLUSIVE) {
290 up(&register_mutex); 291 mutex_unlock(&register_mutex);
291 return -EBUSY; 292 return -EBUSY;
292 } 293 }
293 } 294 }
294 timeri = snd_timer_instance_new(owner, timer); 295 timeri = snd_timer_instance_new(owner, timer);
295 if (!timeri) { 296 if (!timeri) {
296 up(&register_mutex); 297 mutex_unlock(&register_mutex);
297 return -ENOMEM; 298 return -ENOMEM;
298 } 299 }
299 timeri->slave_class = tid->dev_sclass; 300 timeri->slave_class = tid->dev_sclass;
@@ -302,7 +303,7 @@ int snd_timer_open(struct snd_timer_instance **ti,
302 timer->hw.open(timer); 303 timer->hw.open(timer);
303 list_add_tail(&timeri->open_list, &timer->open_list_head); 304 list_add_tail(&timeri->open_list, &timer->open_list_head);
304 snd_timer_check_master(timeri); 305 snd_timer_check_master(timeri);
305 up(&register_mutex); 306 mutex_unlock(&register_mutex);
306 *ti = timeri; 307 *ti = timeri;
307 return 0; 308 return 0;
308} 309}
@@ -333,9 +334,9 @@ int snd_timer_close(struct snd_timer_instance *timeri)
333 spin_lock_irq(&slave_active_lock); 334 spin_lock_irq(&slave_active_lock);
334 } 335 }
335 spin_unlock_irq(&slave_active_lock); 336 spin_unlock_irq(&slave_active_lock);
336 down(&register_mutex); 337 mutex_lock(&register_mutex);
337 list_del(&timeri->open_list); 338 list_del(&timeri->open_list);
338 up(&register_mutex); 339 mutex_unlock(&register_mutex);
339 } else { 340 } else {
340 timer = timeri->timer; 341 timer = timeri->timer;
341 /* wait, until the active callback is finished */ 342 /* wait, until the active callback is finished */
@@ -346,7 +347,7 @@ int snd_timer_close(struct snd_timer_instance *timeri)
346 spin_lock_irq(&timer->lock); 347 spin_lock_irq(&timer->lock);
347 } 348 }
348 spin_unlock_irq(&timer->lock); 349 spin_unlock_irq(&timer->lock);
349 down(&register_mutex); 350 mutex_lock(&register_mutex);
350 list_del(&timeri->open_list); 351 list_del(&timeri->open_list);
351 if (timer && list_empty(&timer->open_list_head) && 352 if (timer && list_empty(&timer->open_list_head) &&
352 timer->hw.close) 353 timer->hw.close)
@@ -362,7 +363,7 @@ int snd_timer_close(struct snd_timer_instance *timeri)
362 slave->timer = NULL; 363 slave->timer = NULL;
363 spin_unlock_irq(&slave_active_lock); 364 spin_unlock_irq(&slave_active_lock);
364 } 365 }
365 up(&register_mutex); 366 mutex_unlock(&register_mutex);
366 } 367 }
367 if (timeri->private_free) 368 if (timeri->private_free)
368 timeri->private_free(timeri); 369 timeri->private_free(timeri);
@@ -835,7 +836,7 @@ static int snd_timer_dev_register(struct snd_device *dev)
835 !timer->hw.resolution && timer->hw.c_resolution == NULL) 836 !timer->hw.resolution && timer->hw.c_resolution == NULL)
836 return -EINVAL; 837 return -EINVAL;
837 838
838 down(&register_mutex); 839 mutex_lock(&register_mutex);
839 list_for_each(p, &snd_timer_list) { 840 list_for_each(p, &snd_timer_list) {
840 timer1 = list_entry(p, struct snd_timer, device_list); 841 timer1 = list_entry(p, struct snd_timer, device_list);
841 if (timer1->tmr_class > timer->tmr_class) 842 if (timer1->tmr_class > timer->tmr_class)
@@ -857,11 +858,11 @@ static int snd_timer_dev_register(struct snd_device *dev)
857 if (timer1->tmr_subdevice < timer->tmr_subdevice) 858 if (timer1->tmr_subdevice < timer->tmr_subdevice)
858 continue; 859 continue;
859 /* conflicts.. */ 860 /* conflicts.. */
860 up(&register_mutex); 861 mutex_unlock(&register_mutex);
861 return -EBUSY; 862 return -EBUSY;
862 } 863 }
863 list_add_tail(&timer->device_list, p); 864 list_add_tail(&timer->device_list, p);
864 up(&register_mutex); 865 mutex_unlock(&register_mutex);
865 return 0; 866 return 0;
866} 867}
867 868
@@ -871,7 +872,7 @@ static int snd_timer_unregister(struct snd_timer *timer)
871 struct snd_timer_instance *ti; 872 struct snd_timer_instance *ti;
872 873
873 snd_assert(timer != NULL, return -ENXIO); 874 snd_assert(timer != NULL, return -ENXIO);
874 down(&register_mutex); 875 mutex_lock(&register_mutex);
875 if (! list_empty(&timer->open_list_head)) { 876 if (! list_empty(&timer->open_list_head)) {
876 snd_printk(KERN_WARNING "timer 0x%lx is busy?\n", (long)timer); 877 snd_printk(KERN_WARNING "timer 0x%lx is busy?\n", (long)timer);
877 list_for_each_safe(p, n, &timer->open_list_head) { 878 list_for_each_safe(p, n, &timer->open_list_head) {
@@ -881,7 +882,7 @@ static int snd_timer_unregister(struct snd_timer *timer)
881 } 882 }
882 } 883 }
883 list_del(&timer->device_list); 884 list_del(&timer->device_list);
884 up(&register_mutex); 885 mutex_unlock(&register_mutex);
885 return snd_timer_free(timer); 886 return snd_timer_free(timer);
886} 887}
887 888
@@ -1065,7 +1066,7 @@ static void snd_timer_proc_read(struct snd_info_entry *entry,
1065 struct snd_timer_instance *ti; 1066 struct snd_timer_instance *ti;
1066 struct list_head *p, *q; 1067 struct list_head *p, *q;
1067 1068
1068 down(&register_mutex); 1069 mutex_lock(&register_mutex);
1069 list_for_each(p, &snd_timer_list) { 1070 list_for_each(p, &snd_timer_list) {
1070 timer = list_entry(p, struct snd_timer, device_list); 1071 timer = list_entry(p, struct snd_timer, device_list);
1071 switch (timer->tmr_class) { 1072 switch (timer->tmr_class) {
@@ -1105,7 +1106,7 @@ static void snd_timer_proc_read(struct snd_info_entry *entry,
1105 } 1106 }
1106 spin_unlock_irqrestore(&timer->lock, flags); 1107 spin_unlock_irqrestore(&timer->lock, flags);
1107 } 1108 }
1108 up(&register_mutex); 1109 mutex_unlock(&register_mutex);
1109} 1110}
1110 1111
1111static struct snd_info_entry *snd_timer_proc_entry = NULL; 1112static struct snd_info_entry *snd_timer_proc_entry = NULL;
@@ -1269,7 +1270,7 @@ static int snd_timer_user_open(struct inode *inode, struct file *file)
1269 return -ENOMEM; 1270 return -ENOMEM;
1270 spin_lock_init(&tu->qlock); 1271 spin_lock_init(&tu->qlock);
1271 init_waitqueue_head(&tu->qchange_sleep); 1272 init_waitqueue_head(&tu->qchange_sleep);
1272 init_MUTEX(&tu->tread_sem); 1273 mutex_init(&tu->tread_sem);
1273 tu->ticks = 1; 1274 tu->ticks = 1;
1274 tu->queue_size = 128; 1275 tu->queue_size = 128;
1275 tu->queue = kmalloc(tu->queue_size * sizeof(struct snd_timer_read), 1276 tu->queue = kmalloc(tu->queue_size * sizeof(struct snd_timer_read),
@@ -1325,7 +1326,7 @@ static int snd_timer_user_next_device(struct snd_timer_id __user *_tid)
1325 1326
1326 if (copy_from_user(&id, _tid, sizeof(id))) 1327 if (copy_from_user(&id, _tid, sizeof(id)))
1327 return -EFAULT; 1328 return -EFAULT;
1328 down(&register_mutex); 1329 mutex_lock(&register_mutex);
1329 if (id.dev_class < 0) { /* first item */ 1330 if (id.dev_class < 0) { /* first item */
1330 if (list_empty(&snd_timer_list)) 1331 if (list_empty(&snd_timer_list))
1331 snd_timer_user_zero_id(&id); 1332 snd_timer_user_zero_id(&id);
@@ -1407,7 +1408,7 @@ static int snd_timer_user_next_device(struct snd_timer_id __user *_tid)
1407 snd_timer_user_zero_id(&id); 1408 snd_timer_user_zero_id(&id);
1408 } 1409 }
1409 } 1410 }
1410 up(&register_mutex); 1411 mutex_unlock(&register_mutex);
1411 if (copy_to_user(_tid, &id, sizeof(*_tid))) 1412 if (copy_to_user(_tid, &id, sizeof(*_tid)))
1412 return -EFAULT; 1413 return -EFAULT;
1413 return 0; 1414 return 0;
@@ -1432,7 +1433,7 @@ static int snd_timer_user_ginfo(struct file *file,
1432 tid = ginfo->tid; 1433 tid = ginfo->tid;
1433 memset(ginfo, 0, sizeof(*ginfo)); 1434 memset(ginfo, 0, sizeof(*ginfo));
1434 ginfo->tid = tid; 1435 ginfo->tid = tid;
1435 down(&register_mutex); 1436 mutex_lock(&register_mutex);
1436 t = snd_timer_find(&tid); 1437 t = snd_timer_find(&tid);
1437 if (t != NULL) { 1438 if (t != NULL) {
1438 ginfo->card = t->card ? t->card->number : -1; 1439 ginfo->card = t->card ? t->card->number : -1;
@@ -1451,7 +1452,7 @@ static int snd_timer_user_ginfo(struct file *file,
1451 } else { 1452 } else {
1452 err = -ENODEV; 1453 err = -ENODEV;
1453 } 1454 }
1454 up(&register_mutex); 1455 mutex_unlock(&register_mutex);
1455 if (err >= 0 && copy_to_user(_ginfo, ginfo, sizeof(*ginfo))) 1456 if (err >= 0 && copy_to_user(_ginfo, ginfo, sizeof(*ginfo)))
1456 err = -EFAULT; 1457 err = -EFAULT;
1457 kfree(ginfo); 1458 kfree(ginfo);
@@ -1467,7 +1468,7 @@ static int snd_timer_user_gparams(struct file *file,
1467 1468
1468 if (copy_from_user(&gparams, _gparams, sizeof(gparams))) 1469 if (copy_from_user(&gparams, _gparams, sizeof(gparams)))
1469 return -EFAULT; 1470 return -EFAULT;
1470 down(&register_mutex); 1471 mutex_lock(&register_mutex);
1471 t = snd_timer_find(&gparams.tid); 1472 t = snd_timer_find(&gparams.tid);
1472 if (!t) { 1473 if (!t) {
1473 err = -ENODEV; 1474 err = -ENODEV;
@@ -1483,7 +1484,7 @@ static int snd_timer_user_gparams(struct file *file,
1483 } 1484 }
1484 err = t->hw.set_period(t, gparams.period_num, gparams.period_den); 1485 err = t->hw.set_period(t, gparams.period_num, gparams.period_den);
1485_error: 1486_error:
1486 up(&register_mutex); 1487 mutex_unlock(&register_mutex);
1487 return err; 1488 return err;
1488} 1489}
1489 1490
@@ -1500,7 +1501,7 @@ static int snd_timer_user_gstatus(struct file *file,
1500 tid = gstatus.tid; 1501 tid = gstatus.tid;
1501 memset(&gstatus, 0, sizeof(gstatus)); 1502 memset(&gstatus, 0, sizeof(gstatus));
1502 gstatus.tid = tid; 1503 gstatus.tid = tid;
1503 down(&register_mutex); 1504 mutex_lock(&register_mutex);
1504 t = snd_timer_find(&tid); 1505 t = snd_timer_find(&tid);
1505 if (t != NULL) { 1506 if (t != NULL) {
1506 if (t->hw.c_resolution) 1507 if (t->hw.c_resolution)
@@ -1517,7 +1518,7 @@ static int snd_timer_user_gstatus(struct file *file,
1517 } else { 1518 } else {
1518 err = -ENODEV; 1519 err = -ENODEV;
1519 } 1520 }
1520 up(&register_mutex); 1521 mutex_unlock(&register_mutex);
1521 if (err >= 0 && copy_to_user(_gstatus, &gstatus, sizeof(gstatus))) 1522 if (err >= 0 && copy_to_user(_gstatus, &gstatus, sizeof(gstatus)))
1522 err = -EFAULT; 1523 err = -EFAULT;
1523 return err; 1524 return err;
@@ -1532,7 +1533,7 @@ static int snd_timer_user_tselect(struct file *file,
1532 int err = 0; 1533 int err = 0;
1533 1534
1534 tu = file->private_data; 1535 tu = file->private_data;
1535 down(&tu->tread_sem); 1536 mutex_lock(&tu->tread_sem);
1536 if (tu->timeri) { 1537 if (tu->timeri) {
1537 snd_timer_close(tu->timeri); 1538 snd_timer_close(tu->timeri);
1538 tu->timeri = NULL; 1539 tu->timeri = NULL;
@@ -1576,7 +1577,7 @@ static int snd_timer_user_tselect(struct file *file,
1576 } 1577 }
1577 1578
1578 __err: 1579 __err:
1579 up(&tu->tread_sem); 1580 mutex_unlock(&tu->tread_sem);
1580 return err; 1581 return err;
1581} 1582}
1582 1583
@@ -1797,17 +1798,17 @@ static long snd_timer_user_ioctl(struct file *file, unsigned int cmd,
1797 { 1798 {
1798 int xarg; 1799 int xarg;
1799 1800
1800 down(&tu->tread_sem); 1801 mutex_lock(&tu->tread_sem);
1801 if (tu->timeri) { /* too late */ 1802 if (tu->timeri) { /* too late */
1802 up(&tu->tread_sem); 1803 mutex_unlock(&tu->tread_sem);
1803 return -EBUSY; 1804 return -EBUSY;
1804 } 1805 }
1805 if (get_user(xarg, p)) { 1806 if (get_user(xarg, p)) {
1806 up(&tu->tread_sem); 1807 mutex_unlock(&tu->tread_sem);
1807 return -EFAULT; 1808 return -EFAULT;
1808 } 1809 }
1809 tu->tread = xarg ? 1 : 0; 1810 tu->tread = xarg ? 1 : 0;
1810 up(&tu->tread_sem); 1811 mutex_unlock(&tu->tread_sem);
1811 return 0; 1812 return 0;
1812 } 1813 }
1813 case SNDRV_TIMER_IOCTL_GINFO: 1814 case SNDRV_TIMER_IOCTL_GINFO: