public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
	akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
	Clemens Ladisch <clemens@ladisch.de>,
	Takashi Iwai <tiwai@suse.de>
Subject: [patch 04/48] sound: pcm_lib: fix unsorted list constraint handling
Date: Fri, 04 Sep 2009 13:07:16 -0700	[thread overview]
Message-ID: <20090904200850.531838310@mini.kroah.org> (raw)
In-Reply-To: <20090904201112.GA8274@kroah.com>

[-- Attachment #1: sound-pcm_lib-fix-unsorted-list-constraint-handling.patch --]
[-- Type: text/plain, Size: 2545 bytes --]

2.6.27-stable review patch.  If anyone has any objections, please let us know.

------------------
From: Clemens Ladisch <clemens@ladisch.de>

commit b1ddaf681e362ed453182ddee1699d7487069a16 upstream.

snd_interval_list() expected a sorted list but did not document this, so
there are drivers that give it an unsorted list.  To fix this, change
the algorithm to work with any list.

This fixes the "Slave PCM not usable" error with USB devices that have
multiple alternate settings with sample rates in decreasing order, such
as the Philips Askey VC010 WebCam.

http://bugzilla.kernel.org/show_bug.cgi?id=14028

Reported-and-tested-by: Andrzej <adkadk@gmail.com>
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 sound/core/pcm_lib.c |   39 ++++++++-------------------------------
 1 file changed, 8 insertions(+), 31 deletions(-)

--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -779,47 +779,24 @@ static int snd_interval_ratden(struct sn
 int snd_interval_list(struct snd_interval *i, unsigned int count, unsigned int *list, unsigned int mask)
 {
         unsigned int k;
-	int changed = 0;
+	struct snd_interval list_range;
 
 	if (!count) {
 		i->empty = 1;
 		return -EINVAL;
 	}
+	snd_interval_any(&list_range);
+	list_range.min = UINT_MAX;
+	list_range.max = 0;
         for (k = 0; k < count; k++) {
 		if (mask && !(mask & (1 << k)))
 			continue;
-                if (i->min == list[k] && !i->openmin)
-                        goto _l1;
-                if (i->min < list[k]) {
-                        i->min = list[k];
-			i->openmin = 0;
-			changed = 1;
-                        goto _l1;
-                }
-        }
-        i->empty = 1;
-        return -EINVAL;
- _l1:
-        for (k = count; k-- > 0;) {
-		if (mask && !(mask & (1 << k)))
+		if (!snd_interval_test(i, list[k]))
 			continue;
-                if (i->max == list[k] && !i->openmax)
-                        goto _l2;
-                if (i->max > list[k]) {
-                        i->max = list[k];
-			i->openmax = 0;
-			changed = 1;
-                        goto _l2;
-                }
+		list_range.min = min(list_range.min, list[k]);
+		list_range.max = max(list_range.max, list[k]);
         }
-        i->empty = 1;
-        return -EINVAL;
- _l2:
-	if (snd_interval_checkempty(i)) {
-		i->empty = 1;
-		return -EINVAL;
-	}
-        return changed;
+	return snd_interval_refine(i, &list_range);
 }
 
 EXPORT_SYMBOL(snd_interval_list);



  parent reply	other threads:[~2009-09-04 20:22 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20090904200712.724048145@mini.kroah.org>
2009-09-04 20:11 ` [patch 00/48] 2.6.27.32-stable review Greg KH
2009-09-04 20:07   ` [patch 01/48] ALSA: hda - Fix MacBookPro 3,1/4,1 quirk with ALC889A Greg KH
2009-09-04 20:07   ` [patch 02/48] clone(): fix race between copy_process() and de_thread() Greg KH
2009-09-04 20:07   ` [patch 03/48] ehea: Fix napi list corruption on ifconfig down Greg KH
2009-09-04 20:07   ` Greg KH [this message]
2009-09-04 20:07   ` [patch 05/48] SUNRPC: Fix rpc_task_force_reencode Greg KH
2009-09-04 20:07   ` [patch 06/48] KVM: VMX: Change cs reset state to be a data segment Greg KH
2009-09-04 20:07   ` [patch 07/48] KVM: VMX: Change segment dpl at reset to 3 Greg KH
2009-09-04 20:07   ` [patch 08/48] KVM: Load real mode segments correctly Greg KH
2009-09-04 20:07   ` [patch 09/48] KVM: Allocate guest memory as MAP_PRIVATE, not MAP_SHARED Greg KH
2009-09-04 20:07   ` [patch 10/48] KVM: Dont call get_user_pages(.force = 1) Greg KH
2009-09-04 20:07   ` [patch 11/48] KVM: MMU: Add locking around kvm_mmu_slot_remove_write_access() Greg KH
2009-09-04 20:07   ` [patch 12/48] KVM: MMU: Flush tlbs after clearing write permission when accessing dirty log Greg KH
2009-09-04 20:07   ` [patch 13/48] KVM: MMU: Fix setting the accessed bit on non-speculative sptes Greg KH
2009-09-04 20:07   ` [patch 14/48] KVM: Reduce kvm stack usage in kvm_arch_vm_ioctl() Greg KH
2009-09-06  5:47     ` Pavel Machek
2009-09-06 13:43       ` Dave Hansen
2009-09-04 20:07   ` [patch 15/48] KVM: Reduce stack usage in kvm_vcpu_ioctl() Greg KH
2009-09-04 20:07   ` [patch 16/48] KVM: Reduce stack usage in kvm_arch_vcpu_ioctl() Greg KH
2009-09-04 20:07   ` [patch 17/48] KVM: Reduce stack usage in kvm_pv_mmu_op() Greg KH
2009-09-04 20:07   ` [patch 18/48] KVM: add MC5_MISC msr read support Greg KH
2009-09-04 20:07   ` [patch 19/48] KVM: set debug registers after "schedulable" section Greg KH
2009-09-04 20:07   ` [patch 20/48] KVM: MMU: increase per-vcpu rmap cache alloc size Greg KH
2009-09-04 20:07   ` [patch 21/48] KVM: VMX: Set IGMT bit in EPT entry Greg KH
2009-09-04 20:07   ` [patch 22/48] KVM: Dont destroy vcpu in case vcpu_setup fails Greg KH
2009-09-04 20:07   ` [patch 23/48] KVM: VMX: Dont allow uninhibited access to EFER on i386 Greg KH
2009-09-04 20:07   ` [patch 24/48] KVM: SVM: Remove port 80 passthrough Greg KH
2009-09-04 20:07   ` [patch 25/48] KVM: Make EFER reads safe when EFER does not exist Greg KH
2009-09-04 20:07   ` [patch 26/48] KVM: VMX: Handle vmx instruction vmexits Greg KH
2009-09-04 20:07   ` [patch 27/48] KVM: Make paravirt tlb flush also reload the PAE PDPTRs Greg KH
2009-09-04 20:07   ` [patch 28/48] KVM: Fix PDPTR reloading on CR4 writes Greg KH
2009-09-04 20:07   ` [patch 29/48] KVM: MMU: do not free active mmu pages in free_mmu_pages() Greg KH
2009-09-04 20:07   ` [patch 30/48] KVM: Fix dirty bit tracking for slots with large pages Greg KH
2009-09-04 20:07   ` [patch 31/48] KVM: x86: check for cr3 validity in mmu_alloc_roots Greg KH
2009-09-04 20:07   ` [patch 32/48] KVM: MMU: protect kvm_mmu_change_mmu_pages with mmu_lock Greg KH
2009-09-04 20:07   ` [patch 33/48] appletalk: fix atalk_getname() leak Greg KH
2009-09-04 20:07   ` [patch 34/48] can: Fix raw_getname() leak Greg KH
2009-09-04 20:07   ` [patch 35/48] do_sigaltstack: avoid copying stack_t as a structure to user space Greg KH
2009-09-04 20:07   ` [patch 36/48] econet: Fix econet_getname() leak Greg KH
2009-09-04 20:07   ` [patch 37/48] irda: Fix irda_getname() leak Greg KH
2009-09-04 20:07   ` [patch 38/48] kthreads: fix kthread_create() vs kthread_stop() race Greg KH
2009-09-04 20:07   ` [patch 39/48] NET: llc, zero sockaddr_llc struct Greg KH
2009-09-04 20:07   ` [patch 40/48] netrom: Fix nr_getname() leak Greg KH
2009-09-04 20:07   ` [patch 41/48] ocfs2: Initialize the cluster were writing to in a non-sparse extend Greg KH
2009-09-04 21:00     ` Joel Becker
2009-09-06  8:32       ` Joel Becker
2009-09-06 18:17         ` Greg KH
2009-09-04 20:07   ` [patch 42/48] rose: Fix rose_getname() leak Greg KH
2009-09-04 20:07   ` [patch 43/48] ALSA: hda - Add missing vmaster initialization for ALC269 Greg KH
2009-09-04 20:07   ` [patch 44/48] parport: quickfix the proc registration bug Greg KH
2009-09-04 20:07   ` [patch 45/48] USB: removal of tty->low_latency hack dating back to the old serial code Greg KH
2009-09-04 20:07   ` [patch 46/48] Remove low_latency flag setting from nozomi and mxser drivers Greg KH
2009-09-04 20:07   ` [patch 47/48] SCSI: sr: report more accurate drive status after closing the tray Greg KH
2009-09-04 20:08   ` [patch 48/48] SUNRPC: Fix tcp reconnection Greg KH
2009-09-06 22:58   ` [patch 00/48] 2.6.27.32-stable review Tilman Schmidt
2009-09-10 22:33     ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090904200850.531838310@mini.kroah.org \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=clemens@ladisch.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable-review@kernel.org \
    --cc=stable@kernel.org \
    --cc=tiwai@suse.de \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox