diff options
| author | Johannes Berg <johannes@sipsolutions.net> | 2006-10-05 10:02:22 -0400 |
|---|---|---|
| committer | Jaroslav Kysela <perex@suse.cz> | 2007-02-09 03:00:10 -0500 |
| commit | 9244b2c3079faac79b3b961116bd548c45087e2c (patch) | |
| tree | 1a9e2ead054ed58efcad3fd43fb2aedeb6731baa | |
| parent | d595ee7e0162ae66faa8c4c7d8c2069b40d64fed (diff) | |
[ALSA] alsa core: convert to list_for_each_entry*
This patch converts most uses of list_for_each to list_for_each_entry all
across alsa. In some place apparently an item can be on a list with
different pointers so of course that isn't compatible with list_for_each, I
therefore didn't touch those places.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
| -rw-r--r-- | sound/core/control.c | 37 | ||||
| -rw-r--r-- | sound/core/control_compat.c | 5 | ||||
| -rw-r--r-- | sound/core/device.c | 24 | ||||
| -rw-r--r-- | sound/core/hwdep.c | 10 | ||||
| -rw-r--r-- | sound/core/memalloc.c | 10 | ||||
| -rw-r--r-- | sound/core/pcm.c | 32 | ||||
| -rw-r--r-- | sound/core/rawmidi.c | 29 | ||||
| -rw-r--r-- | sound/core/seq/seq_clientmgr.c | 14 | ||||
| -rw-r--r-- | sound/core/seq/seq_device.c | 25 | ||||
| -rw-r--r-- | sound/core/seq/seq_ports.c | 49 | ||||
| -rw-r--r-- | sound/core/seq/seq_virmidi.c | 4 | ||||
| -rw-r--r-- | sound/core/timer.c | 77 |
12 files changed, 102 insertions, 214 deletions
diff --git a/sound/core/control.c b/sound/core/control.c index 0c7bcd62e5b2..67f09b8f85e4 100644 --- a/sound/core/control.c +++ b/sound/core/control.c | |||
| @@ -108,7 +108,6 @@ static void snd_ctl_empty_read_queue(struct snd_ctl_file * ctl) | |||
| 108 | static int snd_ctl_release(struct inode *inode, struct file *file) | 108 | static int snd_ctl_release(struct inode *inode, struct file *file) |
| 109 | { | 109 | { |
| 110 | unsigned long flags; | 110 | unsigned long flags; |
| 111 | struct list_head *list; | ||
| 112 | struct snd_card *card; | 111 | struct snd_card *card; |
| 113 | struct snd_ctl_file *ctl; | 112 | struct snd_ctl_file *ctl; |
| 114 | struct snd_kcontrol *control; | 113 | struct snd_kcontrol *control; |
| @@ -122,12 +121,10 @@ static int snd_ctl_release(struct inode *inode, struct file *file) | |||
| 122 | list_del(&ctl->list); | 121 | list_del(&ctl->list); |
| 123 | write_unlock_irqrestore(&card->ctl_files_rwlock, flags); | 122 | write_unlock_irqrestore(&card->ctl_files_rwlock, flags); |
| 124 | down_write(&card->controls_rwsem); | 123 | down_write(&card->controls_rwsem); |
| 125 | list_for_each(list, &card->controls) { | 124 | list_for_each_entry(control, &card->controls, list) |
| 126 | control = snd_kcontrol(list); | ||
| 127 | for (idx = 0; idx < control->count; idx++) | 125 | for (idx = 0; idx < control->count; idx++) |
| 128 | if (control->vd[idx].owner == ctl) | 126 | if (control->vd[idx].owner == ctl) |
| 129 | control->vd[idx].owner = NULL; | 127 | control->vd[idx].owner = NULL; |
| 130 | } | ||
| 131 | up_write(&card->controls_rwsem); | 128 | up_write(&card->controls_rwsem); |
| 132 | snd_ctl_empty_read_queue(ctl); | 129 | snd_ctl_empty_read_queue(ctl); |
| 133 | kfree(ctl); | 130 | kfree(ctl); |
| @@ -140,7 +137,6 @@ void snd_ctl_notify(struct snd_card *card, unsigned int mask, | |||
| 140 | struct snd_ctl_elem_id *id) | 137 | struct snd_ctl_elem_id *id) |
| 141 | { | 138 | { |
| 142 | unsigned long flags; | 139 | unsigned long flags; |
| 143 | struct list_head *flist; | ||
| 144 | struct snd_ctl_file *ctl; | 140 | struct snd_ctl_file *ctl; |
| 145 | struct snd_kctl_event *ev; | 141 | struct snd_kctl_event *ev; |
| 146 | 142 | ||
| @@ -149,14 +145,11 @@ void snd_ctl_notify(struct snd_card *card, unsigned int mask, | |||
| 149 | #if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE) | 145 | #if defined(CONFIG_SND_MIXER_OSS) || defined(CONFIG_SND_MIXER_OSS_MODULE) |
| 150 | card->mixer_oss_change_count++; | 146 | card->mixer_oss_change_count++; |
| 151 | #endif | 147 | #endif |
| 152 | list_for_each(flist, &card->ctl_files) { | 148 | list_for_each_entry(ctl, &card->ctl_files, list) { |
| 153 | struct list_head *elist; | ||
| 154 | ctl = snd_ctl_file(flist); | ||
| 155 | if (!ctl->subscribed) | 149 | if (!ctl->subscribed) |
| 156 | continue; | 150 | continue; |
| 157 | spin_lock_irqsave(&ctl->read_lock, flags); | 151 | spin_lock_irqsave(&ctl->read_lock, flags); |
| 158 | list_for_each(elist, &ctl->events) { | 152 | list_for_each_entry(ev, &ctl->events, list) { |
| 159 | ev = snd_kctl_event(elist); | ||
| 160 | if (ev->id.numid == id->numid) { | 153 | if (ev->id.numid == id->numid) { |
| 161 | ev->mask |= mask; | 154 | ev->mask |= mask; |
| 162 | goto _found; | 155 | goto _found; |
| @@ -277,11 +270,9 @@ EXPORT_SYMBOL(snd_ctl_free_one); | |||
| 277 | static unsigned int snd_ctl_hole_check(struct snd_card *card, | 270 | static unsigned int snd_ctl_hole_check(struct snd_card *card, |
| 278 | unsigned int count) | 271 | unsigned int count) |
| 279 | { | 272 | { |
| 280 | struct list_head *list; | ||
| 281 | struct snd_kcontrol *kctl; | 273 | struct snd_kcontrol *kctl; |
| 282 | 274 | ||
| 283 | list_for_each(list, &card->controls) { | 275 | list_for_each_entry(kctl, &card->controls, list) { |
| 284 | kctl = snd_kcontrol(list); | ||
| 285 | if ((kctl->id.numid <= card->last_numid && | 276 | if ((kctl->id.numid <= card->last_numid && |
| 286 | kctl->id.numid + kctl->count > card->last_numid) || | 277 | kctl->id.numid + kctl->count > card->last_numid) || |
| 287 | (kctl->id.numid <= card->last_numid + count - 1 && | 278 | (kctl->id.numid <= card->last_numid + count - 1 && |
| @@ -498,12 +489,10 @@ EXPORT_SYMBOL(snd_ctl_rename_id); | |||
| 498 | */ | 489 | */ |
| 499 | struct snd_kcontrol *snd_ctl_find_numid(struct snd_card *card, unsigned int numid) | 490 | struct snd_kcontrol *snd_ctl_find_numid(struct snd_card *card, unsigned int numid) |
| 500 | { | 491 | { |
| 501 | struct list_head *list; | ||
| 502 | struct snd_kcontrol *kctl; | 492 | struct snd_kcontrol *kctl; |
| 503 | 493 | ||
| 504 | snd_assert(card != NULL && numid != 0, return NULL); | 494 | snd_assert(card != NULL && numid != 0, return NULL); |
| 505 | list_for_each(list, &card->controls) { | 495 | list_for_each_entry(kctl, &card->controls, list) { |
| 506 | kctl = snd_kcontrol(list); | ||
| 507 | if (kctl->id.numid <= numid && kctl->id.numid + kctl->count > numid) | 496 | if (kctl->id.numid <= numid && kctl->id.numid + kctl->count > numid) |
| 508 | return kctl; | 497 | return kctl; |
| 509 | } | 498 | } |
| @@ -527,14 +516,12 @@ EXPORT_SYMBOL(snd_ctl_find_numid); | |||
| 527 | struct snd_kcontrol *snd_ctl_find_id(struct snd_card *card, | 516 | struct snd_kcontrol *snd_ctl_find_id(struct snd_card *card, |
| 528 | struct snd_ctl_elem_id *id) | 517 | struct snd_ctl_elem_id *id) |
| 529 | { | 518 | { |
| 530 | struct list_head *list; | ||
| 531 | struct snd_kcontrol *kctl; | 519 | struct snd_kcontrol *kctl; |
| 532 | 520 | ||
| 533 | snd_assert(card != NULL && id != NULL, return NULL); | 521 | snd_assert(card != NULL && id != NULL, return NULL); |
| 534 | if (id->numid != 0) | 522 | if (id->numid != 0) |
| 535 | return snd_ctl_find_numid(card, id->numid); | 523 | return snd_ctl_find_numid(card, id->numid); |
| 536 | list_for_each(list, &card->controls) { | 524 | list_for_each_entry(kctl, &card->controls, list) { |
| 537 | kctl = snd_kcontrol(list); | ||
| 538 | if (kctl->id.iface != id->iface) | 525 | if (kctl->id.iface != id->iface) |
| 539 | continue; | 526 | continue; |
| 540 | if (kctl->id.device != id->device) | 527 | if (kctl->id.device != id->device) |
| @@ -1182,7 +1169,6 @@ static long snd_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg | |||
| 1182 | { | 1169 | { |
| 1183 | struct snd_ctl_file *ctl; | 1170 | struct snd_ctl_file *ctl; |
| 1184 | struct snd_card *card; | 1171 | struct snd_card *card; |
| 1185 | struct list_head *list; | ||
| 1186 | struct snd_kctl_ioctl *p; | 1172 | struct snd_kctl_ioctl *p; |
| 1187 | void __user *argp = (void __user *)arg; | 1173 | void __user *argp = (void __user *)arg; |
| 1188 | int __user *ip = argp; | 1174 | int __user *ip = argp; |
| @@ -1232,8 +1218,7 @@ static long snd_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg | |||
| 1232 | #endif | 1218 | #endif |
| 1233 | } | 1219 | } |
| 1234 | down_read(&snd_ioctl_rwsem); | 1220 | down_read(&snd_ioctl_rwsem); |
| 1235 | list_for_each(list, &snd_control_ioctls) { | 1221 | list_for_each_entry(p, &snd_control_ioctls, list) { |
| 1236 | p = list_entry(list, struct snd_kctl_ioctl, list); | ||
| 1237 | err = p->fioctl(card, ctl, cmd, arg); | 1222 | err = p->fioctl(card, ctl, cmd, arg); |
| 1238 | if (err != -ENOIOCTLCMD) { | 1223 | if (err != -ENOIOCTLCMD) { |
| 1239 | up_read(&snd_ioctl_rwsem); | 1224 | up_read(&snd_ioctl_rwsem); |
| @@ -1357,13 +1342,11 @@ EXPORT_SYMBOL(snd_ctl_register_ioctl_compat); | |||
| 1357 | static int _snd_ctl_unregister_ioctl(snd_kctl_ioctl_func_t fcn, | 1342 | static int _snd_ctl_unregister_ioctl(snd_kctl_ioctl_func_t fcn, |
| 1358 | struct list_head *lists) | 1343 | struct list_head *lists) |
| 1359 | { | 1344 | { |
| 1360 | struct list_head *list; | ||
| 1361 | struct snd_kctl_ioctl *p; | 1345 | struct snd_kctl_ioctl *p; |
| 1362 | 1346 | ||
| 1363 | snd_assert(fcn != NULL, return -EINVAL); | 1347 | snd_assert(fcn != NULL, return -EINVAL); |
| 1364 | down_write(&snd_ioctl_rwsem); | 1348 | down_write(&snd_ioctl_rwsem); |
| 1365 | list_for_each(list, lists) { | 1349 | list_for_each_entry(p, lists, list) { |
| 1366 | p = list_entry(list, struct snd_kctl_ioctl, list); | ||
| 1367 | if (p->fioctl == fcn) { | 1350 | if (p->fioctl == fcn) { |
| 1368 | list_del(&p->list); | 1351 | list_del(&p->list); |
| 1369 | up_write(&snd_ioctl_rwsem); | 1352 | up_write(&snd_ioctl_rwsem); |
| @@ -1453,7 +1436,6 @@ static int snd_ctl_dev_register(struct snd_device *device) | |||
| 1453 | static int snd_ctl_dev_disconnect(struct snd_device *device) | 1436 | static int snd_ctl_dev_disconnect(struct snd_device *device) |
| 1454 | { | 1437 | { |
| 1455 | struct snd_card *card = device->device_data; | 1438 | struct snd_card *card = device->device_data; |
| 1456 | struct list_head *flist; | ||
| 1457 | struct snd_ctl_file *ctl; | 1439 | struct snd_ctl_file *ctl; |
| 1458 | int err, cardnum; | 1440 | int err, cardnum; |
| 1459 | 1441 | ||
| @@ -1462,8 +1444,7 @@ static int snd_ctl_dev_disconnect(struct snd_device *device) | |||
| 1462 | snd_assert(cardnum >= 0 && cardnum < SNDRV_CARDS, return -ENXIO); | 1444 | snd_assert(cardnum >= 0 && cardnum < SNDRV_CARDS, return -ENXIO); |
| 1463 | 1445 | ||
| 1464 | down_read(&card->controls_rwsem); | 1446 | down_read(&card->controls_rwsem); |
| 1465 | list_for_each(flist, &card->ctl_files) { | 1447 | list_for_each_entry(ctl, &card->ctl_files, list) { |
| 1466 | ctl = snd_ctl_file(flist); | ||
| 1467 | wake_up(&ctl->change_sleep); | 1448 | wake_up(&ctl->change_sleep); |
| 1468 | kill_fasync(&ctl->fasync, SIGIO, POLL_ERR); | 1449 | kill_fasync(&ctl->fasync, SIGIO, POLL_ERR); |
| 1469 | } | 1450 | } |
diff --git a/sound/core/control_compat.c b/sound/core/control_compat.c index ab48962c48ce..9311ca397bbc 100644 --- a/sound/core/control_compat.c +++ b/sound/core/control_compat.c | |||
| @@ -392,7 +392,7 @@ enum { | |||
| 392 | static inline long snd_ctl_ioctl_compat(struct file *file, unsigned int cmd, unsigned long arg) | 392 | static inline long snd_ctl_ioctl_compat(struct file *file, unsigned int cmd, unsigned long arg) |
| 393 | { | 393 | { |
| 394 | struct snd_ctl_file *ctl; | 394 | struct snd_ctl_file *ctl; |
| 395 | struct list_head *list; | 395 | struct snd_kctl_ioctl *p; |
| 396 | void __user *argp = compat_ptr(arg); | 396 | void __user *argp = compat_ptr(arg); |
| 397 | int err; | 397 | int err; |
| 398 | 398 | ||
| @@ -427,8 +427,7 @@ static inline long snd_ctl_ioctl_compat(struct file *file, unsigned int cmd, uns | |||
| 427 | } | 427 | } |
| 428 | 428 | ||
| 429 | down_read(&snd_ioctl_rwsem); | 429 | down_read(&snd_ioctl_rwsem); |
| 430 | list_for_each(list, &snd_control_compat_ioctls) { | 430 | list_for_each_entry(p, &snd_control_compat_ioctls, list) { |
| 431 | struct snd_kctl_ioctl *p = list_entry(list, struct snd_kctl_ioctl, list); | ||
| 432 | if (p->fioctl) { | 431 | if (p->fioctl) { |
| 433 | err = p->fioctl(ctl->card, ctl, cmd, arg); | 432 | err = p->fioctl(ctl->card, ctl, cmd, arg); |
| 434 | if (err != -ENOIOCTLCMD) { | 433 | if (err != -ENOIOCTLCMD) { |
diff --git a/sound/core/device.c b/sound/core/device.c index ccb25816ac9e..5858b02b0b1d 100644 --- a/sound/core/device.c +++ b/sound/core/device.c | |||
| @@ -79,13 +79,11 @@ EXPORT_SYMBOL(snd_device_new); | |||
| 79 | */ | 79 | */ |
| 80 | int snd_device_free(struct snd_card *card, void *device_data) | 80 | int snd_device_free(struct snd_card *card, void *device_data) |
| 81 | { | 81 | { |
| 82 | struct list_head *list; | ||
| 83 | struct snd_device *dev; | 82 | struct snd_device *dev; |
| 84 | 83 | ||
| 85 | snd_assert(card != NULL, return -ENXIO); | 84 | snd_assert(card != NULL, return -ENXIO); |
| 86 | snd_assert(device_data != NULL, return -ENXIO); | 85 | snd_assert(device_data != NULL, return -ENXIO); |
| 87 | list_for_each(list, &card->devices) { | 86 | list_for_each_entry(dev, &card->devices, list) { |
| 88 | dev = snd_device(list); | ||
| 89 | if (dev->device_data != device_data) | 87 | if (dev->device_data != device_data) |
| 90 | continue; | 88 | continue; |
| 91 | /* unlink */ | 89 | /* unlink */ |
| @@ -124,13 +122,11 @@ EXPORT_SYMBOL(snd_device_free); | |||
| 124 | */ | 122 | */ |
| 125 | int snd_device_disconnect(struct snd_card *card, void *device_data) | 123 | int snd_device_disconnect(struct snd_card *card, void *device_data) |
| 126 | { | 124 | { |
| 127 | struct list_head *list; | ||
| 128 | struct snd_device *dev; | 125 | struct snd_device *dev; |
| 129 | 126 | ||
| 130 | snd_assert(card != NULL, return -ENXIO); | 127 | snd_assert(card != NULL, return -ENXIO); |
| 131 | snd_assert(device_data != NULL, return -ENXIO); | 128 | snd_assert(device_data != NULL, return -ENXIO); |
| 132 | list_for_each(list, &card->devices) { | 129 | list_for_each_entry(dev, &card->devices, list) { |
| 133 | dev = snd_device(list); | ||
| 134 | if (dev->device_data != device_data) | 130 | if (dev->device_data != device_data) |
| 135 | continue; | 131 | continue; |
| 136 | if (dev->state == SNDRV_DEV_REGISTERED && | 132 | if (dev->state == SNDRV_DEV_REGISTERED && |
| @@ -161,14 +157,12 @@ int snd_device_disconnect(struct snd_card *card, void *device_data) | |||
| 161 | */ | 157 | */ |
| 162 | int snd_device_register(struct snd_card *card, void *device_data) | 158 | int snd_device_register(struct snd_card *card, void *device_data) |
| 163 | { | 159 | { |
| 164 | struct list_head *list; | ||
| 165 | struct snd_device *dev; | 160 | struct snd_device *dev; |
| 166 | int err; | 161 | int err; |
| 167 | 162 | ||
| 168 | snd_assert(card != NULL, return -ENXIO); | 163 | snd_assert(card != NULL, return -ENXIO); |
| 169 | snd_assert(device_data != NULL, return -ENXIO); | 164 | snd_assert(device_data != NULL, return -ENXIO); |
| 170 | list_for_each(list, &card->devices) { | 165 | list_for_each_entry(dev, &card->devices, list) { |
| 171 | dev = snd_device(list); | ||
| 172 | if (dev->device_data != device_data) | 166 | if (dev->device_data != device_data) |
| 173 | continue; | 167 | continue; |
| 174 | if (dev->state == SNDRV_DEV_BUILD && dev->ops->dev_register) { | 168 | if (dev->state == SNDRV_DEV_BUILD && dev->ops->dev_register) { |
| @@ -192,13 +186,11 @@ EXPORT_SYMBOL(snd_device_register); | |||
| 192 | */ | 186 | */ |
| 193 | int snd_device_register_all(struct snd_card *card) | 187 | int snd_device_register_all(struct snd_card *card) |
| 194 | { | 188 | { |
| 195 | struct list_head *list; | ||
| 196 | struct snd_device *dev; | 189 | struct snd_device *dev; |
| 197 | int err; | 190 | int err; |
| 198 | 191 | ||
| 199 | snd_assert(card != NULL, return -ENXIO); | 192 | snd_assert(card != NULL, return -ENXIO); |
| 200 | list_for_each(list, &card->devices) { | 193 | list_for_each_entry(dev, &card->devices, list) { |
| 201 | dev = snd_device(list); | ||
| 202 | if (dev->state == SNDRV_DEV_BUILD && dev->ops->dev_register) { | 194 | if (dev->state == SNDRV_DEV_BUILD && dev->ops->dev_register) { |
| 203 | if ((err = dev->ops->dev_register(dev)) < 0) | 195 | if ((err = dev->ops->dev_register(dev)) < 0) |
| 204 | return err; | 196 | return err; |
| @@ -215,12 +207,10 @@ int snd_device_register_all(struct snd_card *card) | |||
| 215 | int snd_device_disconnect_all(struct snd_card *card) | 207 | int snd_device_disconnect_all(struct snd_card *card) |
| 216 | { | 208 | { |
| 217 | struct snd_device *dev; | 209 | struct snd_device *dev; |
| 218 | struct list_head *list; | ||
| 219 | int err = 0; | 210 | int err = 0; |
| 220 | 211 | ||
| 221 | snd_assert(card != NULL, return -ENXIO); | 212 | snd_assert(card != NULL, return -ENXIO); |
| 222 | list_for_each(list, &card->devices) { | 213 | list_for_each_entry(dev, &card->devices, list) { |
| 223 | dev = snd_device(list); | ||
| 224 | if (snd_device_disconnect(card, dev->device_data) < 0) | 214 | if (snd_device_disconnect(card, dev->device_data) < 0) |
| 225 | err = -ENXIO; | 215 | err = -ENXIO; |
| 226 | } | 216 | } |
| @@ -234,7 +224,6 @@ int snd_device_disconnect_all(struct snd_card *card) | |||
| 234 | int snd_device_free_all(struct snd_card *card, snd_device_cmd_t cmd) | 224 | int snd_device_free_all(struct snd_card *card, snd_device_cmd_t cmd) |
| 235 | { | 225 | { |
| 236 | struct snd_device *dev; | 226 | struct snd_device *dev; |
| 237 | struct list_head *list; | ||
| 238 | int err; | 227 | int err; |
| 239 | unsigned int range_low, range_high; | 228 | unsigned int range_low, range_high; |
| 240 | 229 | ||
| @@ -242,8 +231,7 @@ int snd_device_free_all(struct snd_card *card, snd_device_cmd_t cmd) | |||
| 242 | range_low = cmd * SNDRV_DEV_TYPE_RANGE_SIZE; | 231 | range_low = cmd * SNDRV_DEV_TYPE_RANGE_SIZE; |
| 243 | range_high = range_low + SNDRV_DEV_TYPE_RANGE_SIZE - 1; | 232 | range_high = range_low + SNDRV_DEV_TYPE_RANGE_SIZE - 1; |
| 244 | __again: | 233 | __again: |
| 245 | list_for_each(list, &card->devices) { | 234 | list_for_each_entry(dev, &card->devices, list) { |
| 246 | dev = snd_device(list); | ||
| 247 | if (dev->type >= range_low && dev->type <= range_high) { | 235 | if (dev->type >= range_low && dev->type <= range_high) { |
| 248 | if ((err = snd_device_free(card, dev->device_data)) < 0) | 236 | if ((err = snd_device_free(card, dev->device_data)) < 0) |
| 249 | return err; | 237 | return err; |
diff --git a/sound/core/hwdep.c b/sound/core/hwdep.c index 46b47689362c..a6a6ad0ad3c8 100644 --- a/sound/core/hwdep.c +++ b/sound/core/hwdep.c | |||
| @@ -47,14 +47,11 @@ static int snd_hwdep_dev_disconnect(struct snd_device *device); | |||
| 47 | 47 | ||
| 48 | static struct snd_hwdep *snd_hwdep_search(struct snd_card *card, int device) | 48 | static struct snd_hwdep *snd_hwdep_search(struct snd_card *card, int device) |
| 49 | { | 49 | { |
| 50 | struct list_head *p; | ||
| 51 | struct snd_hwdep *hwdep; | 50 | struct snd_hwdep *hwdep; |
| 52 | 51 | ||
| 53 | list_for_each(p, &snd_hwdep_devices) { | 52 | list_for_each_entry(hwdep, &snd_hwdep_devices, list) |
| 54 | hwdep = list_entry(p, struct snd_hwdep, list); | ||
| 55 | if (hwdep->card == card && hwdep->device == device) | 53 | if (hwdep->card == card && hwdep->device == device) |
| 56 | return hwdep; | 54 | return hwdep; |
| 57 | } | ||
| 58 | return NULL; | 55 | return NULL; |
| 59 | } | 56 | } |
| 60 | 57 | ||
| @@ -468,15 +465,12 @@ static int snd_hwdep_dev_disconnect(struct snd_device *device) | |||
| 468 | static void snd_hwdep_proc_read(struct snd_info_entry *entry, | 465 | static void snd_hwdep_proc_read(struct snd_info_entry *entry, |
| 469 | struct snd_info_buffer *buffer) | 466 | struct snd_info_buffer *buffer) |
| 470 | { | 467 | { |
| 471 | struct list_head *p; | ||
| 472 | struct snd_hwdep *hwdep; | 468 | struct snd_hwdep *hwdep; |
| 473 | 469 | ||
| 474 | mutex_lock(®ister_mutex); | 470 | mutex_lock(®ister_mutex); |
| 475 | list_for_each(p, &snd_hwdep_devices) { | 471 | list_for_each_entry(hwdep, &snd_hwdep_devices, list) |
| 476 | hwdep = list_entry(p, struct snd_hwdep, list); | ||
| 477 | snd_iprintf(buffer, "%02i-%02i: %s\n", | 472 | snd_iprintf(buffer, "%02i-%02i: %s\n", |
| 478 | hwdep->card->number, hwdep->device, hwdep->name); | 473 | hwdep->card->number, hwdep->device, hwdep->name); |
| 479 | } | ||
| 480 | mutex_unlock(®ister_mutex); | 474 | mutex_unlock(®ister_mutex); |
| 481 | } | 475 | } |
| 482 | 476 | ||
diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index bc0bd0910a62..f057430db0d0 100644 --- a/sound/core/memalloc.c +++ b/sound/core/memalloc.c | |||
| @@ -406,19 +406,17 @@ void snd_dma_free_pages(struct snd_dma_buffer *dmab) | |||
| 406 | */ | 406 | */ |
| 407 | size_t snd_dma_get_reserved_buf(struct snd_dma_buffer *dmab, unsigned int id) | 407 | size_t snd_dma_get_reserved_buf(struct snd_dma_buffer *dmab, unsigned int id) |
| 408 | { | 408 | { |
| 409 | struct list_head *p; | ||
| 410 | struct snd_mem_list *mem; | 409 | struct snd_mem_list *mem; |
| 411 | 410 | ||
| 412 | snd_assert(dmab, return 0); | 411 | snd_assert(dmab, return 0); |
| 413 | 412 | ||
| 414 | mutex_lock(&list_mutex); | 413 | mutex_lock(&list_mutex); |
| 415 | list_for_each(p, &mem_list_head) { | 414 | list_for_each_entry(mem, &mem_list_head, list) { |
| 416 | mem = list_entry(p, struct snd_mem_list, list); | ||
| 417 | if (mem->id == id && | 415 | if (mem->id == id && |
| 418 | (mem->buffer.dev.dev == NULL || dmab->dev.dev == NULL || | 416 | (mem->buffer.dev.dev == NULL || dmab->dev.dev == NULL || |
| 419 | ! memcmp(&mem->buffer.dev, &dmab->dev, sizeof(dmab->dev)))) { | 417 | ! memcmp(&mem->buffer.dev, &dmab->dev, sizeof(dmab->dev)))) { |
| 420 | struct device *dev = dmab->dev.dev; | 418 | struct device *dev = dmab->dev.dev; |
| 421 | list_del(p); | 419 | list_del(&mem->list); |
| 422 | *dmab = mem->buffer; | 420 | *dmab = mem->buffer; |
| 423 | if (dmab->dev.dev == NULL) | 421 | if (dmab->dev.dev == NULL) |
| 424 | dmab->dev.dev = dev; | 422 | dmab->dev.dev = dev; |
| @@ -488,7 +486,6 @@ static int snd_mem_proc_read(char *page, char **start, off_t off, | |||
| 488 | { | 486 | { |
| 489 | int len = 0; | 487 | int len = 0; |
| 490 | long pages = snd_allocated_pages >> (PAGE_SHIFT-12); | 488 | long pages = snd_allocated_pages >> (PAGE_SHIFT-12); |
| 491 | struct list_head *p; | ||
| 492 | struct snd_mem_list *mem; | 489 | struct snd_mem_list *mem; |
| 493 | int devno; | 490 | int devno; |
| 494 | static char *types[] = { "UNKNOWN", "CONT", "DEV", "DEV-SG", "SBUS" }; | 491 | static char *types[] = { "UNKNOWN", "CONT", "DEV", "DEV-SG", "SBUS" }; |
| @@ -498,8 +495,7 @@ static int snd_mem_proc_read(char *page, char **start, off_t off, | |||
| 498 | "pages : %li bytes (%li pages per %likB)\n", | 495 | "pages : %li bytes (%li pages per %likB)\n", |
| 499 | pages * PAGE_SIZE, pages, PAGE_SIZE / 1024); | 496 | pages * PAGE_SIZE, pages, PAGE_SIZE / 1024); |
| 500 | devno = 0; | 497 | devno = 0; |
| 501 | list_for_each(p, &mem_list_head) { | 498 | list_for_each_entry(mem, &mem_list_head, list) { |
| 502 | mem = list_entry(p, struct snd_mem_list, list); | ||
| 503 | devno++; | 499 | devno++; |
| 504 | len += snprintf(page + len, count - len, | 500 | len += snprintf(page + len, count - len, |
| 505 | "buffer %d : ID %08x : type %s\n", | 501 | "buffer %d : ID %08x : type %s\n", |
diff --git a/sound/core/pcm.c b/sound/core/pcm.c index 4701f07ee0ae..76fcc5234d83 100644 --- a/sound/core/pcm.c +++ b/sound/core/pcm.c | |||
| @@ -45,11 +45,9 @@ static int snd_pcm_dev_disconnect(struct snd_device *device); | |||
| 45 | 45 | ||
| 46 | static struct snd_pcm *snd_pcm_search(struct snd_card *card, int device) | 46 | static struct snd_pcm *snd_pcm_search(struct snd_card *card, int device) |
| 47 | { | 47 | { |
| 48 | struct list_head *p; | ||
| 49 | struct snd_pcm *pcm; | 48 | struct snd_pcm *pcm; |
| 50 | 49 | ||
| 51 | list_for_each(p, &snd_pcm_devices) { | 50 | list_for_each_entry(pcm, &snd_pcm_devices, list) { |
| 52 | pcm = list_entry(p, struct snd_pcm, list); | ||
| 53 | if (pcm->card == card && pcm->device == device) | 51 | if (pcm->card == card && pcm->device == device) |
| 54 | return pcm; | 52 | return pcm; |
| 55 | } | 53 | } |
| @@ -782,7 +780,6 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, | |||
| 782 | struct snd_pcm_runtime *runtime; | 780 | struct snd_pcm_runtime *runtime; |
| 783 | struct snd_ctl_file *kctl; | 781 | struct snd_ctl_file *kctl; |
| 784 | struct snd_card *card; | 782 | struct snd_card *card; |
| 785 | struct list_head *list; | ||
| 786 | int prefer_subdevice = -1; | 783 | int prefer_subdevice = -1; |
| 787 | size_t size; | 784 | size_t size; |
| 788 | 785 | ||
| @@ -795,8 +792,7 @@ int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, | |||
| 795 | 792 | ||
| 796 | card = pcm->card; | 793 | card = pcm->card; |
| 797 | down_read(&card->controls_rwsem); | 794 | down_read(&card->controls_rwsem); |
| 798 | list_for_each(list, &card->ctl_files) { | 795 | list_for_each_entry(kctl, &card->ctl_files, list) { |
| 799 | kctl = snd_ctl_file(list); | ||
| 800 | if (kctl->pid == current->pid) { | 796 | if (kctl->pid == current->pid) { |
| 801 | prefer_subdevice = kctl->prefer_pcm_subdevice; | 797 | prefer_subdevice = kctl->prefer_pcm_subdevice; |
| 802 | if (prefer_subdevice != -1) | 798 | if (prefer_subdevice != -1) |
| @@ -941,7 +937,7 @@ static int snd_pcm_dev_register(struct snd_device *device) | |||
| 941 | { | 937 | { |
| 942 | int cidx, err; | 938 | int cidx, err; |
| 943 | struct snd_pcm_substream *substream; | 939 | struct snd_pcm_substream *substream; |
| 944 | struct list_head *list; | 940 | struct snd_pcm_notify *notify; |
| 945 | char str[16]; | 941 | char str[16]; |
| 946 | struct snd_pcm *pcm = device->device_data; | 942 | struct snd_pcm *pcm = device->device_data; |
| 947 | struct device *dev; | 943 | struct device *dev; |
| @@ -988,11 +984,10 @@ static int snd_pcm_dev_register(struct snd_device *device) | |||
| 988 | for (substream = pcm->streams[cidx].substream; substream; substream = substream->next) | 984 | for (substream = pcm->streams[cidx].substream; substream; substream = substream->next) |
| 989 | snd_pcm_timer_init(substream); | 985 | snd_pcm_timer_init(substream); |
| 990 | } | 986 | } |
| 991 | list_for_each(list, &snd_pcm_notify_list) { | 987 | |
| 992 | struct snd_pcm_notify *notify; | 988 | list_for_each_entry(notify, &snd_pcm_notify_list, list) |
| 993 | notify = list_entry(list, struct snd_pcm_notify, list); | ||
| 994 | notify->n_register(pcm); | 989 | notify->n_register(pcm); |
| 995 | } | 990 | |
| 996 | mutex_unlock(®ister_mutex); | 991 | mutex_unlock(®ister_mutex); |
| 997 | return 0; | 992 | return 0; |
| 998 | } | 993 | } |
| @@ -1035,7 +1030,7 @@ static int snd_pcm_dev_disconnect(struct snd_device *device) | |||
| 1035 | 1030 | ||
| 1036 | int snd_pcm_notify(struct snd_pcm_notify *notify, int nfree) | 1031 | int snd_pcm_notify(struct snd_pcm_notify *notify, int nfree) |
| 1037 | { | 1032 | { |
| 1038 | struct list_head *p; | 1033 | struct snd_pcm *pcm; |
| 1039 | 1034 | ||
| 1040 | snd_assert(notify != NULL && | 1035 | snd_assert(notify != NULL && |
| 1041 | notify->n_register != NULL && | 1036 | notify->n_register != NULL && |
| @@ -1044,13 +1039,12 @@ int snd_pcm_notify(struct snd_pcm_notify *notify, int nfree) | |||
| 1044 | mutex_lock(®ister_mutex); | 1039 | mutex_lock(®ister_mutex); |
| 1045 | if (nfree) { | 1040 | if (nfree) { |
| 1046 | list_del(¬ify->list); | 1041 | list_del(¬ify->list); |
| 1047 | list_for_each(p, &snd_pcm_devices) | 1042 | list_for_each_entry(pcm, &snd_pcm_devices, list) |
| 1048 | notify->n_unregister(list_entry(p, | 1043 | notify->n_unregister(pcm); |
| 1049 | struct snd_pcm, list)); | ||
| 1050 | } else { | 1044 | } else { |
| 1051 | list_add_tail(¬ify->list, &snd_pcm_notify_list); | 1045 | list_add_tail(¬ify->list, &snd_pcm_notify_list); |
| 1052 | list_for_each(p, &snd_pcm_devices) | 1046 | list_for_each_entry(pcm, &snd_pcm_devices, list) |
| 1053 | notify->n_register(list_entry(p, struct snd_pcm, list)); | 1047 | notify->n_register(pcm); |
| 1054 | } | 1048 | } |
| 1055 | mutex_unlock(®ister_mutex); | 1049 | mutex_unlock(®ister_mutex); |
| 1056 | return 0; | 1050 | return 0; |
| @@ -1066,12 +1060,10 @@ EXPORT_SYMBOL(snd_pcm_notify); | |||
| 1066 | static void snd_pcm_proc_read(struct snd_info_entry *entry, | 1060 | static void snd_pcm_proc_read(struct snd_info_entry *entry, |
| 1067 | struct snd_info_buffer *buffer) | 1061 | struct snd_info_buffer *buffer) |
| 1068 | { | 1062 | { |
| 1069 | struct list_head *p; | ||
| 1070 | struct snd_pcm *pcm; | 1063 | struct snd_pcm *pcm; |
| 1071 | 1064 | ||
| 1072 | mutex_lock(®ister_mutex); | 1065 | mutex_lock(®ister_mutex); |
| 1073 | list_for_each(p, &snd_pcm_devices) { | 1066 | list_for_each_entry(pcm, &snd_pcm_devices, list) { |
| 1074 | pcm = list_entry(p, struct snd_pcm, list); | ||
| 1075 | snd_iprintf(buffer, "%02i-%02i: %s : %s", | 1067 | snd_iprintf(buffer, "%02i-%02i: %s : %s", |
| 1076 | pcm->card->number, pcm->device, pcm->id, pcm->name); | 1068 | pcm->card->number, pcm->device, pcm->id, pcm->name); |
| 1077 | if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) | 1069 | if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) |
diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c index 0f055bfcbdac..7e6ceec738d5 100644 --- a/sound/core/rawmidi.c +++ b/sound/core/rawmidi.c | |||
| @@ -61,14 +61,11 @@ static DEFINE_MUTEX(register_mutex); | |||
| 61 | 61 | ||
| 62 | static struct snd_rawmidi *snd_rawmidi_search(struct snd_card *card, int device) | 62 | static struct snd_rawmidi *snd_rawmidi_search(struct snd_card *card, int device) |
| 63 | { | 63 | { |
| 64 | struct list_head *p; | ||
| 65 | struct snd_rawmidi *rawmidi; | 64 | struct snd_rawmidi *rawmidi; |
| 66 | 65 | ||
| 67 | list_for_each(p, &snd_rawmidi_devices) { | 66 | list_for_each_entry(rawmidi, &snd_rawmidi_devices, list) |
| 68 | rawmidi = list_entry(p, struct snd_rawmidi, list); | ||
| 69 | if (rawmidi->card == card && rawmidi->device == device) | 67 | if (rawmidi->card == card && rawmidi->device == device) |
| 70 | return rawmidi; | 68 | return rawmidi; |
| 71 | } | ||
| 72 | return NULL; | 69 | return NULL; |
| 73 | } | 70 | } |
| 74 | 71 | ||
| @@ -389,7 +386,6 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file) | |||
| 389 | struct snd_rawmidi *rmidi; | 386 | struct snd_rawmidi *rmidi; |
| 390 | struct snd_rawmidi_file *rawmidi_file; | 387 | struct snd_rawmidi_file *rawmidi_file; |
| 391 | wait_queue_t wait; | 388 | wait_queue_t wait; |
| 392 | struct list_head *list; | ||
| 393 | struct snd_ctl_file *kctl; | 389 | struct snd_ctl_file *kctl; |
| 394 | 390 | ||
| 395 | if (maj == snd_major) { | 391 | if (maj == snd_major) { |
| @@ -426,8 +422,7 @@ static int snd_rawmidi_open(struct inode *inode, struct file *file) | |||
| 426 | while (1) { | 422 | while (1) { |
| 427 | subdevice = -1; | 423 | subdevice = -1; |
| 428 | down_read(&card->controls_rwsem); | 424 | down_read(&card->controls_rwsem); |
| 429 | list_for_each(list, &card->ctl_files) { | 425 | list_for_each_entry(kctl, &card->ctl_files, list) { |
| 430 | kctl = snd_ctl_file(list); | ||
| 431 | if (kctl->pid == current->pid) { | 426 | if (kctl->pid == current->pid) { |
| 432 | subdevice = kctl->prefer_rawmidi_subdevice; | 427 | subdevice = kctl->prefer_rawmidi_subdevice; |
| 433 | if (subdevice != -1) | 428 | if (subdevice != -1) |
| @@ -575,7 +570,6 @@ int snd_rawmidi_info_select(struct snd_card *card, struct snd_rawmidi_info *info | |||
| 575 | struct snd_rawmidi *rmidi; | 570 | struct snd_rawmidi *rmidi; |
| 576 | struct snd_rawmidi_str *pstr; | 571 | struct snd_rawmidi_str *pstr; |
| 577 | struct snd_rawmidi_substream *substream; | 572 | struct snd_rawmidi_substream *substream; |
| 578 | struct list_head *list; | ||
| 579 | 573 | ||
| 580 | mutex_lock(®ister_mutex); | 574 | mutex_lock(®ister_mutex); |
| 581 | rmidi = snd_rawmidi_search(card, info->device); | 575 | rmidi = snd_rawmidi_search(card, info->device); |
| @@ -589,8 +583,7 @@ int snd_rawmidi_info_select(struct snd_card *card, struct snd_rawmidi_info *info | |||
| 589 | return -ENOENT; | 583 | return -ENOENT; |
| 590 | if (info->subdevice >= pstr->substream_count) | 584 | if (info->subdevice >= pstr->substream_count) |
| 591 | return -ENXIO; | 585 | return -ENXIO; |
| 592 | list_for_each(list, &pstr->substreams) { | 586 | list_for_each_entry(substream, &pstr->substreams, list) { |
| 593 | substream = list_entry(list, struct snd_rawmidi_substream, list); | ||
| 594 | if ((unsigned int)substream->number == info->subdevice) | 587 | if ((unsigned int)substream->number == info->subdevice) |
| 595 | return snd_rawmidi_info(substream, info); | 588 | return snd_rawmidi_info(substream, info); |
| 596 | } | 589 | } |
| @@ -1313,14 +1306,14 @@ static void snd_rawmidi_proc_info_read(struct snd_info_entry *entry, | |||
| 1313 | struct snd_rawmidi *rmidi; | 1306 | struct snd_rawmidi *rmidi; |
| 1314 | struct snd_rawmidi_substream *substream; | 1307 | struct snd_rawmidi_substream *substream; |
| 1315 | struct snd_rawmidi_runtime *runtime; | 1308 | struct snd_rawmidi_runtime *runtime; |
| 1316 | struct list_head *list; | ||
| 1317 | 1309 | ||
| 1318 | rmidi = entry->private_data; | 1310 | rmidi = entry->private_data; |
| 1319 | snd_iprintf(buffer, "%s\n\n", rmidi->name); | 1311 | snd_iprintf(buffer, "%s\n\n", rmidi->name); |
| 1320 | mutex_lock(&rmidi->open_mutex); | 1312 | mutex_lock(&rmidi->open_mutex); |
| 1321 | if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_OUTPUT) { | 1313 | if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_OUTPUT) { |
| 1322 | list_for_each(list, &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams) { | 1314 | list_for_each_entry(substream, |
| 1323 | substream = list_entry(list, struct snd_rawmidi_substream, list); | 1315 | &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams, |
| 1316 | list) { | ||
| 1324 | snd_iprintf(buffer, | 1317 | snd_iprintf(buffer, |
| 1325 | "Output %d\n" | 1318 | "Output %d\n" |
| 1326 | " Tx bytes : %lu\n", | 1319 | " Tx bytes : %lu\n", |
| @@ -1339,8 +1332,9 @@ static void snd_rawmidi_proc_info_read(struct snd_info_entry *entry, | |||
| 1339 | } | 1332 | } |
| 1340 | } | 1333 | } |
| 1341 | if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_INPUT) { | 1334 | if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_INPUT) { |
| 1342 | list_for_each(list, &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams) { | 1335 | list_for_each_entry(substream, |
| 1343 | substream = list_entry(list, struct snd_rawmidi_substream, list); | 1336 | &rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams, |
| 1337 | list) { | ||
| 1344 | snd_iprintf(buffer, | 1338 | snd_iprintf(buffer, |
| 1345 | "Input %d\n" | 1339 | "Input %d\n" |
| 1346 | " Rx bytes : %lu\n", | 1340 | " Rx bytes : %lu\n", |
| @@ -1625,13 +1619,10 @@ static int snd_rawmidi_dev_disconnect(struct snd_device *device) | |||
| 1625 | void snd_rawmidi_set_ops(struct snd_rawmidi *rmidi, int stream, | 1619 | void snd_rawmidi_set_ops(struct snd_rawmidi *rmidi, int stream, |
| 1626 | struct snd_rawmidi_ops *ops) | 1620 | struct snd_rawmidi_ops *ops) |
| 1627 | { | 1621 | { |
| 1628 | struct list_head *list; | ||
| 1629 | struct snd_rawmidi_substream *substream; | 1622 | struct snd_rawmidi_substream *substream; |
| 1630 | 1623 | ||
| 1631 | list_for_each(list, &rmidi->streams[stream].substreams) { | 1624 | list_for_each_entry(substream, &rmidi->streams[stream].substreams, list) |
| 1632 | substream = list_entry(list, struct snd_rawmidi_substream, list); | ||
| 1633 | substream->ops = ops; | 1625 | substream->ops = ops; |
| 1634 | } | ||
| 1635 | } | 1626 | } |
| 1636 | 1627 | ||
| 1637 | /* | 1628 | /* |
diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c index 532a660df51d..bb9dd9fa8e51 100644 --- a/sound/core/seq/seq_clientmgr.c +++ b/sound/core/seq/seq_clientmgr.c | |||
| @@ -659,7 +659,6 @@ static int deliver_to_subscribers(struct snd_seq_client *client, | |||
| 659 | int err = 0, num_ev = 0; | 659 | int err = 0, num_ev = 0; |
| 660 | struct snd_seq_event event_saved; | 660 | struct snd_seq_event event_saved; |
| 661 | struct snd_seq_client_port *src_port; | 661 | struct snd_seq_client_port *src_port; |
| 662 | struct list_head *p; | ||
| 663 | struct snd_seq_port_subs_info *grp; | 662 | struct snd_seq_port_subs_info *grp; |
| 664 | 663 | ||
| 665 | src_port = snd_seq_port_use_ptr(client, event->source.port); | 664 | src_port = snd_seq_port_use_ptr(client, event->source.port); |
| @@ -674,8 +673,7 @@ static int deliver_to_subscribers(struct snd_seq_client *client, | |||
| 674 | read_lock(&grp->list_lock); | 673 | read_lock(&grp->list_lock); |
| 675 | else | 674 | else |
| 676 | down_read(&grp->list_mutex); | 675 | down_read(&grp->list_mutex); |
| 677 | list_for_each(p, &grp->list_head) { | 676 | list_for_each_entry(subs, &grp->list_head, src_list) { |
| 678 | subs = list_entry(p, struct snd_seq_subscribers, src_list); | ||
| 679 | event->dest = subs->info.dest; | 677 | event->dest = subs->info.dest; |
| 680 | if (subs->info.flags & SNDRV_SEQ_PORT_SUBS_TIMESTAMP) | 678 | if (subs->info.flags & SNDRV_SEQ_PORT_SUBS_TIMESTAMP) |
| 681 | /* convert time according to flag with subscription */ | 679 | /* convert time according to flag with subscription */ |
| @@ -709,15 +707,14 @@ static int port_broadcast_event(struct snd_seq_client *client, | |||
| 709 | { | 707 | { |
| 710 | int num_ev = 0, err = 0; | 708 | int num_ev = 0, err = 0; |
| 711 | struct snd_seq_client *dest_client; | 709 | struct snd_seq_client *dest_client; |
| 712 | struct list_head *p; | 710 | struct snd_seq_client_port *port; |
| 713 | 711 | ||
| 714 | dest_client = get_event_dest_client(event, SNDRV_SEQ_FILTER_BROADCAST); | 712 | dest_client = get_event_dest_client(event, SNDRV_SEQ_FILTER_BROADCAST); |
| 715 | if (dest_client == NULL) | 713 | if (dest_client == NULL) |
| 716 | return 0; /* no matching destination */ | 714 | return 0; /* no matching destination */ |
| 717 | 715 | ||
| 718 | read_lock(&dest_client->ports_lock); | 716 | read_lock(&dest_client->ports_lock); |
| 719 | list_for_each(p, &dest_client->ports_list_head) { | 717 | list_for_each_entry(port, &dest_client->ports_list_head, list) { |
| 720 | struct snd_seq_client_port *port = list_entry(p, struct snd_seq_client_port, list); | ||
| 721 | event->dest.port = port->addr.port; | 718 | event->dest.port = port->addr.port; |
| 722 | /* pass NULL as source client to avoid error bounce */ | 719 | /* pass NULL as source client to avoid error bounce */ |
| 723 | err = snd_seq_deliver_single_event(NULL, event, | 720 | err = snd_seq_deliver_single_event(NULL, event, |
| @@ -2473,11 +2470,10 @@ static void snd_seq_info_dump_subscribers(struct snd_info_buffer *buffer, | |||
| 2473 | static void snd_seq_info_dump_ports(struct snd_info_buffer *buffer, | 2470 | static void snd_seq_info_dump_ports(struct snd_info_buffer *buffer, |
| 2474 | struct snd_seq_client *client) | 2471 | struct snd_seq_client *client) |
| 2475 | { | 2472 | { |
| 2476 | struct list_head *l; | 2473 | struct snd_seq_client_port *p; |
| 2477 | 2474 | ||
| 2478 | mutex_lock(&client->ports_mutex); | 2475 | mutex_lock(&client->ports_mutex); |
| 2479 | list_for_each(l, &client->ports_list_head) { | 2476 | list_for_each_entry(p, &client->ports_list_head, list) { |
| 2480 | struct snd_seq_client_port *p = list_entry(l, struct snd_seq_client_port, list); | ||
| 2481 | snd_iprintf(buffer, " Port %3d : \"%s\" (%c%c%c%c)\n", | 2477 | snd_iprintf(buffer, " Port %3d : \"%s\" (%c%c%c%c)\n", |
| 2482 | p->addr.port, p->name, | 2478 | p->addr.port, p->name, |
| 2483 | FLAG_PERM_RD(p->capability), | 2479 | FLAG_PERM_RD(p->capability), |
diff --git a/sound/core/seq/seq_device.c b/sound/core/seq/seq_device.c index b79d011813c0..37852cdace76 100644 --- a/sound/core/seq/seq_device.c +++ b/sound/core/seq/seq_device.c | |||
| @@ -106,11 +106,10 @@ static void remove_drivers(void); | |||
| 106 | static void snd_seq_device_info(struct snd_info_entry *entry, | 106 | static void snd_seq_device_info(struct snd_info_entry *entry, |
| 107 | struct snd_info_buffer *buffer) | 107 | struct snd_info_buffer *buffer) |
| 108 | { | 108 | { |
| 109 | struct list_head *head; | 109 | struct ops_list *ops; |
| 110 | 110 | ||
| 111 | mutex_lock(&ops_mutex); | 111 | mutex_lock(&ops_mutex); |
| 112 | list_for_each(head, &opslist) { | 112 | list_for_each_entry(ops, &opslist, list) { |
| 113 | struct ops_list *ops = list_entry(head, struct ops_list, list); | ||
| 114 | snd_iprintf(buffer, "snd-%s%s%s%s,%d\n", | 113 | snd_iprintf(buffer, "snd-%s%s%s%s,%d\n", |
| 115 | ops->id, | 114 | ops->id, |
| 116 | ops->driver & DRIVER_LOADED ? ",loaded" : (ops->driver == DRIVER_EMPTY ? ",empty" : ""), | 115 | ops->driver & DRIVER_LOADED ? ",loaded" : (ops->driver == DRIVER_EMPTY ? ",empty" : ""), |
| @@ -143,7 +142,7 @@ void snd_seq_autoload_unlock(void) | |||
| 143 | void snd_seq_device_load_drivers(void) | 142 | void snd_seq_device_load_drivers(void) |
| 144 | { | 143 | { |
| 145 | #ifdef CONFIG_KMOD | 144 | #ifdef CONFIG_KMOD |
| 146 | struct list_head *head; | 145 | struct ops_list *ops; |
| 147 | 146 | ||
| 148 | /* Calling request_module during module_init() | 147 | /* Calling request_module during module_init() |
| 149 | * may cause blocking. | 148 | * may cause blocking. |
| @@ -155,8 +154,7 @@ void snd_seq_device_load_drivers(void) | |||
| 155 | return; | 154 | return; |
| 156 | 155 | ||
| 157 | mutex_lock(&ops_mutex); | 156 | mutex_lock(&ops_mutex); |
| 158 | list_for_each(head, &opslist) { | 157 | list_for_each_entry(ops, &opslist, list) { |
| 159 | struct ops_list *ops = list_entry(head, struct ops_list, list); | ||
| 160 | if (! (ops->driver & DRIVER_LOADED) && | 158 | if (! (ops->driver & DRIVER_LOADED) && |
| 161 | ! (ops->driver & DRIVER_REQUESTED)) { | 159 | ! (ops->driver & DRIVER_REQUESTED)) { |
| 162 | ops->used++; | 160 | ops->used++; |
| @@ -314,8 +312,8 @@ static int snd_seq_device_dev_disconnect(struct snd_device *device) | |||
| 314 | int snd_seq_device_register_driver(char *id, struct snd_seq_dev_ops *entry, | 312 | int snd_seq_device_register_driver(char *id, struct snd_seq_dev_ops *entry, |
| 315 | int argsize) | 313 | int argsize) |
| 316 | { | 314 | { |
| 317 | struct list_head *head; | ||
| 318 | struct ops_list *ops; | 315 | struct ops_list *ops; |
| 316 | struct snd_seq_device *dev; | ||
| 319 | 317 | ||
| 320 | if (id == NULL || entry == NULL || | 318 | if (id == NULL || entry == NULL || |
| 321 | entry->init_device == NULL || entry->free_device == NULL) | 319 | entry->init_device == NULL || entry->free_device == NULL) |
| @@ -341,8 +339,7 @@ int snd_seq_device_register_driver(char *id, struct snd_seq_dev_ops *entry, | |||
| 341 | ops->argsize = argsize; | 339 | ops->argsize = argsize; |
| 342 | 340 | ||
| 343 | /* initialize existing devices if necessary */ | 341 | /* initialize existing devices if necessary */ |
| 344 | list_for_each(head, &ops->dev_list) { | 342 | list_for_each_entry(dev, &ops->dev_list, list) { |
| 345 | struct snd_seq_device *dev = list_entry(head, struct snd_seq_device, list); | ||
| 346 | init_device(dev, ops); | 343 | init_device(dev, ops); |
| 347 | } | 344 | } |
| 348 | mutex_unlock(&ops->reg_mutex); | 345 | mutex_unlock(&ops->reg_mutex); |
| @@ -394,8 +391,8 @@ static struct ops_list * create_driver(char *id) | |||
| 394 | */ | 391 | */ |
| 395 | int snd_seq_device_unregister_driver(char *id) | 392 | int snd_seq_device_unregister_driver(char *id) |
| 396 | { | 393 | { |
| 397 | struct list_head *head; | ||
| 398 | struct ops_list *ops; | 394 | struct ops_list *ops; |
| 395 | struct snd_seq_device *dev; | ||
| 399 | 396 | ||
| 400 | ops = find_driver(id, 0); | 397 | ops = find_driver(id, 0); |
| 401 | if (ops == NULL) | 398 | if (ops == NULL) |
| @@ -411,8 +408,7 @@ int snd_seq_device_unregister_driver(char *id) | |||
| 411 | /* close and release all devices associated with this driver */ | 408 | /* close and release all devices associated with this driver */ |
| 412 | mutex_lock(&ops->reg_mutex); | 409 | mutex_lock(&ops->reg_mutex); |
| 413 | ops->driver |= DRIVER_LOCKED; /* do not remove this driver recursively */ | 410 | ops->driver |= DRIVER_LOCKED; /* do not remove this driver recursively */ |
| 414 | list_for_each(head, &ops->dev_list) { | 411 | list_for_each_entry(dev, &ops->dev_list, list) { |
| 415 | struct snd_seq_device *dev = list_entry(head, struct snd_seq_device, list); | ||
| 416 | free_device(dev, ops); | 412 | free_device(dev, ops); |
| 417 | } | 413 | } |
| 418 | 414 | ||
| @@ -512,11 +508,10 @@ static int free_device(struct snd_seq_device *dev, struct ops_list *ops) | |||
| 512 | */ | 508 | */ |
| 513 | static struct ops_list * find_driver(char *id, int create_if_empty) | 509 | static struct ops_list * find_driver(char *id, int create_if_empty) |
| 514 | { | 510 | { |
| 515 | struct list_head *head; | 511 | struct ops_list *ops; |
| 516 | 512 | ||
| 517 | mutex_lock(&ops_mutex); | 513 | mutex_lock(&ops_mutex); |
| 518 | list_for_each(head, &opslist) { | 514 | list_for_each_entry(ops, &opslist, list) { |
| 519 | struct ops_list *ops = list_entry(head, struct ops_list, list); | ||
| 520 | if (strcmp(ops->id, id) == 0) { | 515 | if (strcmp(ops->id, id) == 0) { |
| 521 | ops->used++; | 516 | ops->used++; |
| 522 | mutex_unlock(&ops_mutex); | 517 | mutex_unlock(&ops_mutex); |
diff --git a/sound/core/seq/seq_ports.c b/sound/core/seq/seq_ports.c index 8c64b58ff77b..d88153438d69 100644 --- a/sound/core/seq/seq_ports.c +++ b/sound/core/seq/seq_ports.c | |||
| @@ -59,14 +59,12 @@ much elements are in array. | |||
| 59 | struct snd_seq_client_port *snd_seq_port_use_ptr(struct snd_seq_client *client, | 59 | struct snd_seq_client_port *snd_seq_port_use_ptr(struct snd_seq_client *client, |
| 60 | int num) | 60 | int num) |
| 61 | { | 61 | { |
| 62 | struct list_head *p; | ||
| 63 | struct snd_seq_client_port *port; | 62 | struct snd_seq_client_port *port; |
| 64 | 63 | ||
| 65 | if (client == NULL) | 64 | if (client == NULL) |
| 66 | return NULL; | 65 | return NULL; |
| 67 | read_lock(&client->ports_lock); | 66 | read_lock(&client->ports_lock); |
| 68 | list_for_each(p, &client->ports_list_head) { | 67 | list_for_each_entry(port, &client->ports_list_head, list) { |
| 69 | port = list_entry(p, struct snd_seq_client_port, list); | ||
| 70 | if (port->addr.port == num) { | 68 | if (port->addr.port == num) { |
| 71 | if (port->closing) | 69 | if (port->closing) |
| 72 | break; /* deleting now */ | 70 | break; /* deleting now */ |
| @@ -85,14 +83,12 @@ struct snd_seq_client_port *snd_seq_port_query_nearest(struct snd_seq_client *cl | |||
| 85 | struct snd_seq_port_info *pinfo) | 83 | struct snd_seq_port_info *pinfo) |
| 86 | { | 84 | { |
| 87 | int num; | 85 | int num; |
| 88 | struct list_head *p; | ||
| 89 | struct snd_seq_client_port *port, *found; | 86 | struct snd_seq_client_port *port, *found; |
| 90 | 87 | ||
| 91 | num = pinfo->addr.port; | 88 | num = pinfo->addr.port; |
| 92 | found = NULL; | 89 | found = NULL; |
| 93 | read_lock(&client->ports_lock); | 90 | read_lock(&client->ports_lock); |
| 94 | list_for_each(p, &client->ports_list_head) { | 91 | list_for_each_entry(port, &client->ports_list_head, list) { |
| 95 | port = list_entry(p, struct snd_seq_client_port, list); | ||
| 96 | if (port->addr.port < num) | 92 | if (port->addr.port < num) |
| 97 | continue; | 93 | continue; |
| 98 | if (port->addr.port == num) { | 94 | if (port->addr.port == num) { |
| @@ -131,8 +127,7 @@ struct snd_seq_client_port *snd_seq_create_port(struct snd_seq_client *client, | |||
| 131 | int port) | 127 | int port) |
| 132 | { | 128 | { |
| 133 | unsigned long flags; | 129 | unsigned long flags; |
| 134 | struct snd_seq_client_port *new_port; | 130 | struct snd_seq_client_port *new_port, *p; |
| 135 | struct list_head *l; | ||
| 136 | int num = -1; | 131 | int num = -1; |
| 137 | 132 | ||
| 138 | /* sanity check */ | 133 | /* sanity check */ |
| @@ -161,15 +156,14 @@ struct snd_seq_client_port *snd_seq_create_port(struct snd_seq_client *client, | |||
| 161 | num = port >= 0 ? port : 0; | 156 | num = port >= 0 ? port : 0; |
| 162 | mutex_lock(&client->ports_mutex); | 157 | mutex_lock(&client->ports_mutex); |
| 163 | write_lock_irqsave(&client->ports_lock, flags); | 158 | write_lock_irqsave(&client->ports_lock, flags); |
| 164 | list_for_each(l, &client->ports_list_head) { | 159 | list_for_each_entry(p, &client->ports_list_head, list) { |
| 165 | struct snd_seq_client_port *p = list_entry(l, struct snd_seq_client_port, list); | ||
| 166 | if (p->addr.port > num) | 160 | if (p->addr.port > num) |
| 167 | break; | 161 | break; |
| 168 | if (port < 0) /* auto-probe mode */ | 162 | if (port < 0) /* auto-probe mode */ |
| 169 | num = p->addr.port + 1; | 163 | num = p->addr.port + 1; |
| 170 | } | 164 | } |
| 171 | /* insert the new port */ | 165 | /* insert the new port */ |
| 172 | list_add_tail(&new_port->list, l); | 166 | list_add_tail(&new_port->list, &p->list); |
| 173 | client->num_ports++; | 167 | client->num_ports++; |
| 174 | new_port->addr.port = num; /* store the port number in the port */ | 168 | new_port->addr.port = num; /* store the port number in the port */ |
| 175 | write_unlock_irqrestore(&client->ports_lock, flags); | 169 | write_unlock_irqrestore(&client->ports_lock, flags); |
| @@ -287,16 +281,14 @@ static int port_delete(struct snd_seq_client *client, | |||
| 287 | int snd_seq_delete_port(struct snd_seq_client *client, int port) | 281 | int snd_seq_delete_port(struct snd_seq_client *client, int port) |
| 288 | { | 282 | { |
| 289 | unsigned long flags; | 283 | unsigned long flags; |
| 290 | struct list_head *l; | 284 | struct snd_seq_client_port *found = NULL, *p; |
| 291 | struct snd_seq_client_port *found = NULL; | ||
| 292 | 285 | ||
| 293 | mutex_lock(&client->ports_mutex); | 286 | mutex_lock(&client->ports_mutex); |
| 294 | write_lock_irqsave(&client->ports_lock, flags); | 287 | write_lock_irqsave(&client->ports_lock, flags); |
| 295 | list_for_each(l, &client->ports_list_head) { | 288 | list_for_each_entry(p, &client->ports_list_head, list) { |
| 296 | struct snd_seq_client_port *p = list_entry(l, struct snd_seq_client_port, list); | ||
| 297 | if (p->addr.port == port) { | 289 | if (p->addr.port == port) { |
| 298 | /* ok found. delete from the list at first */ | 290 | /* ok found. delete from the list at first */ |
| 299 | list_del(l); | 291 | list_del(&p->list); |
| 300 | client->num_ports--; | 292 | client->num_ports--; |
| 301 | found = p; | 293 | found = p; |
| 302 | break; | 294 | break; |
| @@ -314,7 +306,8 @@ int snd_seq_delete_port(struct snd_seq_client *client, int port) | |||
| 314 | int snd_seq_delete_all_ports(struct snd_seq_client *client) | 306 | int snd_seq_delete_all_ports(struct snd_seq_client *client) |
| 315 | { | 307 | { |
| 316 | unsigned long flags; | 308 | unsigned long flags; |
| 317 | struct list_head deleted_list, *p, *n; | 309 | struct list_head deleted_list; |
| 310 | struct snd_seq_client_port *port, *tmp; | ||
| 318 | 311 | ||
| 319 | /* move the port list to deleted_list, and | 312 | /* move the port list to deleted_list, and |
| 320 | * clear the port list in the client data. | 313 | * clear the port list in the client data. |
| @@ -331,9 +324,8 @@ int snd_seq_delete_all_ports(struct snd_seq_client *client) | |||
| 331 | write_unlock_irqrestore(&client->ports_lock, flags); | 324 | write_unlock_irqrestore(&client->ports_lock, flags); |
| 332 | 325 | ||
| 333 | /* remove each port in deleted_list */ | 326 | /* remove each port in deleted_list */ |
| 334 | list_for_each_safe(p, n, &deleted_list) { | 327 | list_for_each_entry_safe(port, tmp, &deleted_list, list) { |
| 335 | struct snd_seq_client_port *port = list_entry(p, struct snd_seq_client_port, list); | 328 | list_del(&port->list); |
| 336 | list_del(p); | ||
| 337 | snd_seq_system_client_ev_port_exit(port->addr.client, port->addr.port); | 329 | snd_seq_system_client_ev_port_exit(port->addr.client, port->addr.port); |
| 338 | port_delete(client, port); | 330 | port_delete(client, port); |
| 339 | } | 331 | } |
| @@ -500,8 +492,7 @@ int snd_seq_port_connect(struct snd_seq_client *connector, | |||
| 500 | { | 492 | { |
| 501 | struct snd_seq_port_subs_info *src = &src_port->c_src; | 493 | struct snd_seq_port_subs_info *src = &src_port->c_src; |
| 502 | struct snd_seq_port_subs_info *dest = &dest_port->c_dest; | 494 | struct snd_seq_port_subs_info *dest = &dest_port->c_dest; |
| 503 | struct snd_seq_subscribers *subs; | 495 | struct snd_seq_subscribers *subs, *s; |
| 504 | struct list_head *p; | ||
| 505 | int err, src_called = 0; | 496 | int err, src_called = 0; |
| 506 | unsigned long flags; | 497 | unsigned long flags; |
| 507 | int exclusive; | 498 | int exclusive; |
| @@ -525,13 +516,11 @@ int snd_seq_port_connect(struct snd_seq_client *connector, | |||
| 525 | if (src->exclusive || dest->exclusive) | 516 | if (src->exclusive || dest->exclusive) |
| 526 | goto __error; | 517 | goto __error; |
| 527 | /* check whether already exists */ | 518 | /* check whether already exists */ |
| 528 | list_for_each(p, &src->list_head) { | 519 | list_for_each_entry(s, &src->list_head, src_list) { |
| 529 | struct snd_seq_subscribers *s = list_entry(p, struct snd_seq_subscribers, src_list); | ||
| 530 | if (match_subs_info(info, &s->info)) | 520 | if (match_subs_info(info, &s->info)) |
| 531 | goto __error; | 521 | goto __error; |
| 532 | } | 522 | } |
| 533 | list_for_each(p, &dest->list_head) { | 523 | list_for_each_entry(s, &dest->list_head, dest_list) { |
| 534 | struct snd_seq_subscribers *s = list_entry(p, struct snd_seq_subscribers, dest_list); | ||
| 535 | if (match_subs_info(info, &s->info)) | 524 | if (match_subs_info(info, &s->info)) |
| 536 | goto __error; | 525 | goto __error; |
| 537 | } | 526 | } |
| @@ -582,7 +571,6 @@ int snd_seq_port_disconnect(struct snd_seq_client *connector, | |||
| 582 | struct snd_seq_port_subs_info *src = &src_port->c_src; | 571 | struct snd_seq_port_subs_info *src = &src_port->c_src; |
| 583 | struct snd_seq_port_subs_info *dest = &dest_port->c_dest; | 572 | struct snd_seq_port_subs_info *dest = &dest_port->c_dest; |
| 584 | struct snd_seq_subscribers *subs; | 573 | struct snd_seq_subscribers *subs; |
| 585 | struct list_head *p; | ||
| 586 | int err = -ENOENT; | 574 | int err = -ENOENT; |
| 587 | unsigned long flags; | 575 | unsigned long flags; |
| 588 | 576 | ||
| @@ -590,8 +578,7 @@ int snd_seq_port_disconnect(struct snd_seq_client *connector, | |||
| 590 | down_write_nested(&dest->list_mutex, SINGLE_DEPTH_NESTING); | 578 | down_write_nested(&dest->list_mutex, SINGLE_DEPTH_NESTING); |
| 591 | 579 | ||
| 592 | /* look for the connection */ | 580 | /* look for the connection */ |
| 593 | list_for_each(p, &src->list_head) { | 581 | list_for_each_entry(subs, &src->list_head, src_list) { |
| 594 | subs = list_entry(p, struct snd_seq_subscribers, src_list); | ||
| 595 | if (match_subs_info(info, &subs->info)) { | 582 | if (match_subs_info(info, &subs->info)) { |
| 596 | write_lock_irqsave(&src->list_lock, flags); | 583 | write_lock_irqsave(&src->list_lock, flags); |
| 597 | // write_lock(&dest->list_lock); // no lock yet | 584 | // write_lock(&dest->list_lock); // no lock yet |
| @@ -620,12 +607,10 @@ int snd_seq_port_disconnect(struct snd_seq_client *connector, | |||
| 620 | struct snd_seq_subscribers *snd_seq_port_get_subscription(struct snd_seq_port_subs_info *src_grp, | 607 | struct snd_seq_subscribers *snd_seq_port_get_subscription(struct snd_seq_port_subs_info *src_grp, |
| 621 | struct snd_seq_addr *dest_addr) | 608 | struct snd_seq_addr *dest_addr) |
| 622 | { | 609 | { |
| 623 | struct list_head *p; | ||
| 624 | struct snd_seq_subscribers *s, *found = NULL; | 610 | struct snd_seq_subscribers *s, *found = NULL; |
| 625 | 611 | ||
| 626 | down_read(&src_grp->list_mutex); | 612 | down_read(&src_grp->list_mutex); |
| 627 | list_for_each(p, &src_grp->list_head) { | 613 | list_for_each_entry(s, &src_grp->list_head, src_list) { |
| 628 | s = list_entry(p, struct snd_seq_subscribers, src_list); | ||
| 629 | if (addr_match(dest_addr, &s->info.dest)) { | 614 | if (addr_match(dest_addr, &s->info.dest)) { |
| 630 | found = s; | 615 | found = s; |
| 631 | break; | 616 | break; |
diff --git a/sound/core/seq/seq_virmidi.c b/sound/core/seq/seq_virmidi.c index 0cfa06c6b81f..972f93405364 100644 --- a/sound/core/seq/seq_virmidi.c +++ b/sound/core/seq/seq_virmidi.c | |||
| @@ -81,13 +81,11 @@ static int snd_virmidi_dev_receive_event(struct snd_virmidi_dev *rdev, | |||
| 81 | struct snd_seq_event *ev) | 81 | struct snd_seq_event *ev) |
| 82 | { | 82 | { |
| 83 | struct snd_virmidi *vmidi; | 83 | struct snd_virmidi *vmidi; |
| 84 | struct list_head *list; | ||
| 85 | unsigned char msg[4]; | 84 | unsigned char msg[4]; |
| 86 | int len; | 85 | int len; |
| 87 | 86 | ||
| 88 | read_lock(&rdev->filelist_lock); | 87 | read_lock(&rdev->filelist_lock); |
| 89 | list_for_each(list, &rdev->filelist) { | 88 | list_for_each_entry(vmidi, &rdev->filelist, list) { |
| 90 | vmidi = list_entry(list, struct snd_virmidi, list); | ||
| 91 | if (!vmidi->trigger) | 89 | if (!vmidi->trigger) |
| 92 | continue; | 90 | continue; |
| 93 | if (ev->type == SNDRV_SEQ_EVENT_SYSEX) { | 91 | if (ev->type == SNDRV_SEQ_EVENT_SYSEX) { |
diff --git a/sound/core/timer.c b/sound/core/timer.c index 10a79aed33f8..4e79f9ce1a85 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c | |||
| @@ -130,11 +130,8 @@ static struct snd_timer_instance *snd_timer_instance_new(char *owner, | |||
| 130 | static struct snd_timer *snd_timer_find(struct snd_timer_id *tid) | 130 | static struct snd_timer *snd_timer_find(struct snd_timer_id *tid) |
| 131 | { | 131 | { |
| 132 | struct snd_timer *timer = NULL; | 132 | struct snd_timer *timer = NULL; |
| 133 | struct list_head *p; | ||
| 134 | |||
| 135 | list_for_each(p, &snd_timer_list) { | ||
| 136 | timer = list_entry(p, struct snd_timer, device_list); | ||
| 137 | 133 | ||
| 134 | list_for_each_entry(timer, &snd_timer_list, device_list) { | ||
| 138 | if (timer->tmr_class != tid->dev_class) | 135 | if (timer->tmr_class != tid->dev_class) |
| 139 | continue; | 136 | continue; |
| 140 | if ((timer->tmr_class == SNDRV_TIMER_CLASS_CARD || | 137 | if ((timer->tmr_class == SNDRV_TIMER_CLASS_CARD || |
| @@ -184,13 +181,10 @@ static void snd_timer_check_slave(struct snd_timer_instance *slave) | |||
| 184 | { | 181 | { |
| 185 | struct snd_timer *timer; | 182 | struct snd_timer *timer; |
| 186 | struct snd_timer_instance *master; | 183 | struct snd_timer_instance *master; |
| 187 | struct list_head *p, *q; | ||
| 188 | 184 | ||
| 189 | /* FIXME: it's really dumb to look up all entries.. */ | 185 | /* FIXME: it's really dumb to look up all entries.. */ |
| 190 | list_for_each(p, &snd_timer_list) { | 186 | list_for_each_entry(timer, &snd_timer_list, device_list) { |
| 191 | timer = list_entry(p, struct snd_timer, device_list); | 187 | list_for_each_entry(master, &timer->open_list_head, open_list) { |
| 192 | list_for_each(q, &timer->open_list_head) { | ||
| 193 | master = list_entry(q, struct snd_timer_instance, open_list); | ||
| 194 | if (slave->slave_class == master->slave_class && | 188 | if (slave->slave_class == master->slave_class && |
| 195 | slave->slave_id == master->slave_id) { | 189 | slave->slave_id == master->slave_id) { |
| 196 | list_del(&slave->open_list); | 190 | list_del(&slave->open_list); |
| @@ -214,16 +208,13 @@ static void snd_timer_check_slave(struct snd_timer_instance *slave) | |||
| 214 | */ | 208 | */ |
| 215 | static void snd_timer_check_master(struct snd_timer_instance *master) | 209 | static void snd_timer_check_master(struct snd_timer_instance *master) |
| 216 | { | 210 | { |
| 217 | struct snd_timer_instance *slave; | 211 | struct snd_timer_instance *slave, *tmp; |
| 218 | struct list_head *p, *n; | ||
| 219 | 212 | ||
| 220 | /* check all pending slaves */ | 213 | /* check all pending slaves */ |
| 221 | list_for_each_safe(p, n, &snd_timer_slave_list) { | 214 | list_for_each_entry_safe(slave, tmp, &snd_timer_slave_list, open_list) { |
| 222 | slave = list_entry(p, struct snd_timer_instance, open_list); | ||
| 223 | if (slave->slave_class == master->slave_class && | 215 | if (slave->slave_class == master->slave_class && |
| 224 | slave->slave_id == master->slave_id) { | 216 | slave->slave_id == master->slave_id) { |
| 225 | list_del(p); | 217 | list_move_tail(&slave->open_list, &master->slave_list_head); |
| 226 | list_add_tail(p, &master->slave_list_head); | ||
| 227 | spin_lock_irq(&slave_active_lock); | 218 | spin_lock_irq(&slave_active_lock); |
| 228 | slave->master = master; | 219 | slave->master = master; |
| 229 | slave->timer = master->timer; | 220 | slave->timer = master->timer; |
| @@ -317,8 +308,7 @@ static int _snd_timer_stop(struct snd_timer_instance *timeri, | |||
| 317 | int snd_timer_close(struct snd_timer_instance *timeri) | 308 | int snd_timer_close(struct snd_timer_instance *timeri) |
| 318 | { | 309 | { |
| 319 | struct snd_timer *timer = NULL; | 310 | struct snd_timer *timer = NULL; |
| 320 | struct list_head *p, *n; | 311 | struct snd_timer_instance *slave, *tmp; |
| 321 | struct snd_timer_instance *slave; | ||
| 322 | 312 | ||
| 323 | snd_assert(timeri != NULL, return -ENXIO); | 313 | snd_assert(timeri != NULL, return -ENXIO); |
| 324 | 314 | ||
| @@ -353,12 +343,11 @@ int snd_timer_close(struct snd_timer_instance *timeri) | |||
| 353 | timer->hw.close) | 343 | timer->hw.close) |
| 354 | timer->hw.close(timer); | 344 | timer->hw.close(timer); |
| 355 | /* remove slave links */ | 345 | /* remove slave links */ |
| 356 | list_for_each_safe(p, n, &timeri->slave_list_head) { | 346 | list_for_each_entry_safe(slave, tmp, &timeri->slave_list_head, |
| 357 | slave = list_entry(p, struct snd_timer_instance, open_list); | 347 | open_list) { |
| 358 | spin_lock_irq(&slave_active_lock); | 348 | spin_lock_irq(&slave_active_lock); |
| 359 | _snd_timer_stop(slave, 1, SNDRV_TIMER_EVENT_RESOLUTION); | 349 | _snd_timer_stop(slave, 1, SNDRV_TIMER_EVENT_RESOLUTION); |
| 360 | list_del(p); | 350 | list_move_tail(&slave->open_list, &snd_timer_slave_list); |
| 361 | list_add_tail(p, &snd_timer_slave_list); | ||
| 362 | slave->master = NULL; | 351 | slave->master = NULL; |
| 363 | slave->timer = NULL; | 352 | slave->timer = NULL; |
| 364 | spin_unlock_irq(&slave_active_lock); | 353 | spin_unlock_irq(&slave_active_lock); |
| @@ -394,7 +383,6 @@ static void snd_timer_notify1(struct snd_timer_instance *ti, int event) | |||
| 394 | unsigned long flags; | 383 | unsigned long flags; |
| 395 | unsigned long resolution = 0; | 384 | unsigned long resolution = 0; |
| 396 | struct snd_timer_instance *ts; | 385 | struct snd_timer_instance *ts; |
| 397 | struct list_head *n; | ||
| 398 | struct timespec tstamp; | 386 | struct timespec tstamp; |
| 399 | 387 | ||
| 400 | getnstimeofday(&tstamp); | 388 | getnstimeofday(&tstamp); |
| @@ -413,11 +401,9 @@ static void snd_timer_notify1(struct snd_timer_instance *ti, int event) | |||
| 413 | if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE) | 401 | if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE) |
| 414 | return; | 402 | return; |
| 415 | spin_lock_irqsave(&timer->lock, flags); | 403 | spin_lock_irqsave(&timer->lock, flags); |
| 416 | list_for_each(n, &ti->slave_active_head) { | 404 | list_for_each_entry(ts, &ti->slave_active_head, active_list) |
| 417 | ts = list_entry(n, struct snd_timer_instance, active_list); | ||
| 418 | if (ts->ccallback) | 405 | if (ts->ccallback) |
| 419 | ts->ccallback(ti, event + 100, &tstamp, resolution); | 406 | ts->ccallback(ti, event + 100, &tstamp, resolution); |
| 420 | } | ||
| 421 | spin_unlock_irqrestore(&timer->lock, flags); | 407 | spin_unlock_irqrestore(&timer->lock, flags); |
| 422 | } | 408 | } |
| 423 | 409 | ||
| @@ -593,10 +579,8 @@ static void snd_timer_reschedule(struct snd_timer * timer, unsigned long ticks_l | |||
| 593 | { | 579 | { |
| 594 | struct snd_timer_instance *ti; | 580 | struct snd_timer_instance *ti; |
| 595 | unsigned long ticks = ~0UL; | 581 | unsigned long ticks = ~0UL; |
| 596 | struct list_head *p; | ||
| 597 | 582 | ||
| 598 | list_for_each(p, &timer->active_list_head) { | 583 | list_for_each_entry(ti, &timer->active_list_head, active_list) { |
| 599 | ti = list_entry(p, struct snd_timer_instance, active_list); | ||
| 600 | if (ti->flags & SNDRV_TIMER_IFLG_START) { | 584 | if (ti->flags & SNDRV_TIMER_IFLG_START) { |
| 601 | ti->flags &= ~SNDRV_TIMER_IFLG_START; | 585 | ti->flags &= ~SNDRV_TIMER_IFLG_START; |
| 602 | ti->flags |= SNDRV_TIMER_IFLG_RUNNING; | 586 | ti->flags |= SNDRV_TIMER_IFLG_RUNNING; |
| @@ -661,9 +645,9 @@ static void snd_timer_tasklet(unsigned long arg) | |||
| 661 | */ | 645 | */ |
| 662 | void snd_timer_interrupt(struct snd_timer * timer, unsigned long ticks_left) | 646 | void snd_timer_interrupt(struct snd_timer * timer, unsigned long ticks_left) |
| 663 | { | 647 | { |
| 664 | struct snd_timer_instance *ti, *ts; | 648 | struct snd_timer_instance *ti, *ts, *tmp; |
| 665 | unsigned long resolution, ticks; | 649 | unsigned long resolution, ticks; |
| 666 | struct list_head *p, *q, *n, *ack_list_head; | 650 | struct list_head *p, *ack_list_head; |
| 667 | unsigned long flags; | 651 | unsigned long flags; |
| 668 | int use_tasklet = 0; | 652 | int use_tasklet = 0; |
| 669 | 653 | ||
| @@ -679,12 +663,12 @@ void snd_timer_interrupt(struct snd_timer * timer, unsigned long ticks_left) | |||
| 679 | resolution = timer->hw.resolution; | 663 | resolution = timer->hw.resolution; |
| 680 | 664 | ||
| 681 | /* loop for all active instances | 665 | /* loop for all active instances |
| 682 | * Here we cannot use list_for_each because the active_list of a | 666 | * Here we cannot use list_for_each_entry because the active_list of a |
| 683 | * processed instance is relinked to done_list_head before the callback | 667 | * processed instance is relinked to done_list_head before the callback |
| 684 | * is called. | 668 | * is called. |
| 685 | */ | 669 | */ |
| 686 | list_for_each_safe(p, n, &timer->active_list_head) { | 670 | list_for_each_entry_safe(ti, tmp, &timer->active_list_head, |
| 687 | ti = list_entry(p, struct snd_timer_instance, active_list); | 671 | active_list) { |
| 688 | if (!(ti->flags & SNDRV_TIMER_IFLG_RUNNING)) | 672 | if (!(ti->flags & SNDRV_TIMER_IFLG_RUNNING)) |
| 689 | continue; | 673 | continue; |
| 690 | ti->pticks += ticks_left; | 674 | ti->pticks += ticks_left; |
| @@ -700,7 +684,7 @@ void snd_timer_interrupt(struct snd_timer * timer, unsigned long ticks_left) | |||
| 700 | } else { | 684 | } else { |
| 701 | ti->flags &= ~SNDRV_TIMER_IFLG_RUNNING; | 685 | ti->flags &= ~SNDRV_TIMER_IFLG_RUNNING; |
| 702 | if (--timer->running) | 686 | if (--timer->running) |
| 703 | list_del(p); | 687 | list_del(&ti->active_list); |
| 704 | } | 688 | } |
| 705 | if ((timer->hw.flags & SNDRV_TIMER_HW_TASKLET) || | 689 | if ((timer->hw.flags & SNDRV_TIMER_HW_TASKLET) || |
| 706 | (ti->flags & SNDRV_TIMER_IFLG_FAST)) | 690 | (ti->flags & SNDRV_TIMER_IFLG_FAST)) |
| @@ -709,8 +693,7 @@ void snd_timer_interrupt(struct snd_timer * timer, unsigned long ticks_left) | |||
| 709 | ack_list_head = &timer->sack_list_head; | 693 | ack_list_head = &timer->sack_list_head; |
| 710 | if (list_empty(&ti->ack_list)) | 694 | if (list_empty(&ti->ack_list)) |
| 711 | list_add_tail(&ti->ack_list, ack_list_head); | 695 | list_add_tail(&ti->ack_list, ack_list_head); |
| 712 | list_for_each(q, &ti->slave_active_head) { | 696 | list_for_each_entry(ts, &ti->slave_active_head, active_list) { |
| 713 | ts = list_entry(q, struct snd_timer_instance, active_list); | ||
| 714 | ts->pticks = ti->pticks; | 697 | ts->pticks = ti->pticks; |
| 715 | ts->resolution = resolution; | 698 | ts->resolution = resolution; |
| 716 | if (list_empty(&ts->ack_list)) | 699 | if (list_empty(&ts->ack_list)) |
| @@ -844,7 +827,6 @@ static int snd_timer_dev_register(struct snd_device *dev) | |||
| 844 | { | 827 | { |
| 845 | struct snd_timer *timer = dev->device_data; | 828 | struct snd_timer *timer = dev->device_data; |
| 846 | struct snd_timer *timer1; | 829 | struct snd_timer *timer1; |
| 847 | struct list_head *p; | ||
| 848 | 830 | ||
| 849 | snd_assert(timer != NULL && timer->hw.start != NULL && | 831 | snd_assert(timer != NULL && timer->hw.start != NULL && |
| 850 | timer->hw.stop != NULL, return -ENXIO); | 832 | timer->hw.stop != NULL, return -ENXIO); |
| @@ -853,8 +835,7 @@ static int snd_timer_dev_register(struct snd_device *dev) | |||
| 853 | return -EINVAL; | 835 | return -EINVAL; |
| 854 | 836 | ||
| 855 | mutex_lock(®ister_mutex); | 837 | mutex_lock(®ister_mutex); |
| 856 | list_for_each(p, &snd_timer_list) { | 838 | list_for_each_entry(timer1, &snd_timer_list, device_list) { |
| 857 | timer1 = list_entry(p, struct snd_timer, device_list); | ||
| 858 | if (timer1->tmr_class > timer->tmr_class) | 839 | if (timer1->tmr_class > timer->tmr_class) |
| 859 | break; | 840 | break; |
| 860 | if (timer1->tmr_class < timer->tmr_class) | 841 | if (timer1->tmr_class < timer->tmr_class) |
| @@ -877,7 +858,7 @@ static int snd_timer_dev_register(struct snd_device *dev) | |||
| 877 | mutex_unlock(®ister_mutex); | 858 | mutex_unlock(®ister_mutex); |
| 878 | return -EBUSY; | 859 | return -EBUSY; |
| 879 | } | 860 | } |
| 880 | list_add_tail(&timer->device_list, p); | 861 | list_add_tail(&timer->device_list, &timer1->device_list); |
| 881 | mutex_unlock(®ister_mutex); | 862 | mutex_unlock(®ister_mutex); |
| 882 | return 0; | 863 | return 0; |
| 883 | } | 864 | } |
| @@ -896,7 +877,6 @@ void snd_timer_notify(struct snd_timer *timer, int event, struct timespec *tstam | |||
| 896 | unsigned long flags; | 877 | unsigned long flags; |
| 897 | unsigned long resolution = 0; | 878 | unsigned long resolution = 0; |
| 898 | struct snd_timer_instance *ti, *ts; | 879 | struct snd_timer_instance *ti, *ts; |
| 899 | struct list_head *p, *n; | ||
| 900 | 880 | ||
| 901 | if (! (timer->hw.flags & SNDRV_TIMER_HW_SLAVE)) | 881 | if (! (timer->hw.flags & SNDRV_TIMER_HW_SLAVE)) |
| 902 | return; | 882 | return; |
| @@ -911,15 +891,12 @@ void snd_timer_notify(struct snd_timer *timer, int event, struct timespec *tstam | |||
| 911 | else | 891 | else |
| 912 | resolution = timer->hw.resolution; | 892 | resolution = timer->hw.resolution; |
| 913 | } | 893 | } |
| 914 | list_for_each(p, &timer->active_list_head) { | 894 | list_for_each_entry(ti, &timer->active_list_head, active_list) { |
| 915 | ti = list_entry(p, struct snd_timer_instance, active_list); | ||
| 916 | if (ti->ccallback) | 895 | if (ti->ccallback) |
| 917 | ti->ccallback(ti, event, tstamp, resolution); | 896 | ti->ccallback(ti, event, tstamp, resolution); |
| 918 | list_for_each(n, &ti->slave_active_head) { | 897 | list_for_each_entry(ts, &ti->slave_active_head, active_list) |
| 919 | ts = list_entry(n, struct snd_timer_instance, active_list); | ||
| 920 | if (ts->ccallback) | 898 | if (ts->ccallback) |
| 921 | ts->ccallback(ts, event, tstamp, resolution); | 899 | ts->ccallback(ts, event, tstamp, resolution); |
| 922 | } | ||
| 923 | } | 900 | } |
| 924 | spin_unlock_irqrestore(&timer->lock, flags); | 901 | spin_unlock_irqrestore(&timer->lock, flags); |
| 925 | } | 902 | } |
| @@ -1057,11 +1034,9 @@ static void snd_timer_proc_read(struct snd_info_entry *entry, | |||
| 1057 | { | 1034 | { |
| 1058 | struct snd_timer *timer; | 1035 | struct snd_timer *timer; |
| 1059 | struct snd_timer_instance *ti; | 1036 | struct snd_timer_instance *ti; |
| 1060 | struct list_head *p, *q; | ||
| 1061 | 1037 | ||
| 1062 | mutex_lock(®ister_mutex); | 1038 | mutex_lock(®ister_mutex); |
| 1063 | list_for_each(p, &snd_timer_list) { | 1039 | list_for_each_entry(timer, &snd_timer_list, device_list) { |
| 1064 | timer = list_entry(p, struct snd_timer, device_list); | ||
| 1065 | switch (timer->tmr_class) { | 1040 | switch (timer->tmr_class) { |
| 1066 | case SNDRV_TIMER_CLASS_GLOBAL: | 1041 | case SNDRV_TIMER_CLASS_GLOBAL: |
| 1067 | snd_iprintf(buffer, "G%i: ", timer->tmr_device); | 1042 | snd_iprintf(buffer, "G%i: ", timer->tmr_device); |
| @@ -1088,14 +1063,12 @@ static void snd_timer_proc_read(struct snd_info_entry *entry, | |||
| 1088 | if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE) | 1063 | if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE) |
| 1089 | snd_iprintf(buffer, " SLAVE"); | 1064 | snd_iprintf(buffer, " SLAVE"); |
| 1090 | snd_iprintf(buffer, "\n"); | 1065 | snd_iprintf(buffer, "\n"); |
| 1091 | list_for_each(q, &timer->open_list_head) { | 1066 | list_for_each_entry(ti, &timer->open_list_head, open_list) |
| 1092 | ti = list_entry(q, struct snd_timer_instance, open_list); | ||
| 1093 | snd_iprintf(buffer, " Client %s : %s\n", | 1067 | snd_iprintf(buffer, " Client %s : %s\n", |
| 1094 | ti->owner ? ti->owner : "unknown", | 1068 | ti->owner ? ti->owner : "unknown", |
| 1095 | ti->flags & (SNDRV_TIMER_IFLG_START | | 1069 | ti->flags & (SNDRV_TIMER_IFLG_START | |
| 1096 | SNDRV_TIMER_IFLG_RUNNING) | 1070 | SNDRV_TIMER_IFLG_RUNNING) |
| 1097 | ? "running" : "stopped"); | 1071 | ? "running" : "stopped"); |
| 1098 | } | ||
| 1099 | } | 1072 | } |
| 1100 | mutex_unlock(®ister_mutex); | 1073 | mutex_unlock(®ister_mutex); |
| 1101 | } | 1074 | } |
