Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'sound-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"Here are some last-minute fixes: two fixes for races in ALSA sequencer
queue spotted by syzkaller, a revert for a regression of LINE6 driver
(since 4.9), and a trivial new codec ID addition for Nvidia HDMI"

* tag 'sound-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: hda - adding a new NV HDMI/DP codec ID in the driver
ALSA: seq: Fix race at creating a queue
Revert "ALSA: line6: Only determine control port properties if needed"
ALSA: seq: Don't handle loop timeout at snd_seq_pool_done()

+24 -22
+1 -8
sound/core/seq/seq_memory.c
··· 419 419 { 420 420 unsigned long flags; 421 421 struct snd_seq_event_cell *ptr; 422 - int max_count = 5 * HZ; 423 422 424 423 if (snd_BUG_ON(!pool)) 425 424 return -EINVAL; ··· 431 432 if (waitqueue_active(&pool->output_sleep)) 432 433 wake_up(&pool->output_sleep); 433 434 434 - while (atomic_read(&pool->counter) > 0) { 435 - if (max_count == 0) { 436 - pr_warn("ALSA: snd_seq_pool_done timeout: %d cells remain\n", atomic_read(&pool->counter)); 437 - break; 438 - } 435 + while (atomic_read(&pool->counter) > 0) 439 436 schedule_timeout_uninterruptible(1); 440 - max_count--; 441 - } 442 437 443 438 /* release all resources */ 444 439 spin_lock_irqsave(&pool->lock, flags);
+20 -13
sound/core/seq/seq_queue.c
··· 181 181 } 182 182 } 183 183 184 + static void queue_use(struct snd_seq_queue *queue, int client, int use); 185 + 184 186 /* allocate a new queue - 185 187 * return queue index value or negative value for error 186 188 */ ··· 194 192 if (q == NULL) 195 193 return -ENOMEM; 196 194 q->info_flags = info_flags; 195 + queue_use(q, client, 1); 197 196 if (queue_list_add(q) < 0) { 198 197 queue_delete(q); 199 198 return -ENOMEM; 200 199 } 201 - snd_seq_queue_use(q->queue, client, 1); /* use this queue */ 202 200 return q->queue; 203 201 } 204 202 ··· 504 502 return result; 505 503 } 506 504 507 - 508 - /* use or unuse this queue - 509 - * if it is the first client, starts the timer. 510 - * if it is not longer used by any clients, stop the timer. 511 - */ 512 - int snd_seq_queue_use(int queueid, int client, int use) 505 + /* use or unuse this queue */ 506 + static void queue_use(struct snd_seq_queue *queue, int client, int use) 513 507 { 514 - struct snd_seq_queue *queue; 515 - 516 - queue = queueptr(queueid); 517 - if (queue == NULL) 518 - return -EINVAL; 519 - mutex_lock(&queue->timer_mutex); 520 508 if (use) { 521 509 if (!test_and_set_bit(client, queue->clients_bitmap)) 522 510 queue->clients++; ··· 521 529 } else { 522 530 snd_seq_timer_close(queue); 523 531 } 532 + } 533 + 534 + /* use or unuse this queue - 535 + * if it is the first client, starts the timer. 536 + * if it is not longer used by any clients, stop the timer. 537 + */ 538 + int snd_seq_queue_use(int queueid, int client, int use) 539 + { 540 + struct snd_seq_queue *queue; 541 + 542 + queue = queueptr(queueid); 543 + if (queue == NULL) 544 + return -EINVAL; 545 + mutex_lock(&queue->timer_mutex); 546 + queue_use(queue, client, use); 524 547 mutex_unlock(&queue->timer_mutex); 525 548 queuefree(queue); 526 549 return 0;
+1
sound/pci/hda/patch_hdmi.c
··· 3639 3639 HDA_CODEC_ENTRY(0x10de0071, "GPU 71 HDMI/DP", patch_nvhdmi), 3640 3640 HDA_CODEC_ENTRY(0x10de0072, "GPU 72 HDMI/DP", patch_nvhdmi), 3641 3641 HDA_CODEC_ENTRY(0x10de007d, "GPU 7d HDMI/DP", patch_nvhdmi), 3642 + HDA_CODEC_ENTRY(0x10de0080, "GPU 80 HDMI/DP", patch_nvhdmi), 3642 3643 HDA_CODEC_ENTRY(0x10de0082, "GPU 82 HDMI/DP", patch_nvhdmi), 3643 3644 HDA_CODEC_ENTRY(0x10de0083, "GPU 83 HDMI/DP", patch_nvhdmi), 3644 3645 HDA_CODEC_ENTRY(0x10de8001, "MCP73 HDMI", patch_nvhdmi_2ch),
+2 -1
sound/usb/line6/driver.c
··· 754 754 goto error; 755 755 } 756 756 757 + line6_get_interval(line6); 758 + 757 759 if (properties->capabilities & LINE6_CAP_CONTROL) { 758 - line6_get_interval(line6); 759 760 ret = line6_init_cap_control(line6); 760 761 if (ret < 0) 761 762 goto error;