mirror of https://lore.kernel.org/lkml/
 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,
	Alan Stern <stern@rowland.harvard.edu>,
	David Brownell <david-b@pacbell.net>
Subject: [patch 60/71] USB: EHCI: fix two new bugs related to Clear-TT-Buffer
Date: Fri, 04 Sep 2009 17:14:35 -0700	[thread overview]
Message-ID: <20090905001456.619370111@mini.kroah.org> (raw)
In-Reply-To: <20090905001824.GA18171@kroah.com>

[-- Attachment #1: usb-ehci-fix-two-new-bugs-related-to-clear-tt-buffer.patch --]
[-- Type: text/plain, Size: 3028 bytes --]

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

------------------
From: Alan Stern <stern@rowland.harvard.edu>

commit 7a0f0d951273eee889c2441846842348ebc00a2a upstream.

This patch (as1273) fixes two(!) bugs introduced by the new
Clear-TT-Buffer implementation in ehci-hcd.

	It is now possible for an idle QH to have some URBs on its
	queue -- this will happen if a Clear-TT-Buffer is pending for
	the QH's endpoint.  Consequently we should not issue a warning
	when someone tries to unlink an URB from an idle QH; instead
	we should process the request immediately.

	The refcounts for QHs could get messed up, because
	submit_async() would increment the refcount when calling
	qh_link_async() and qh_link_async() would then refuse to link
	the QH into the schedule if a Clear-TT-Buffer was pending.
	Instead we should increment the refcount only when the QH
	actually is added to the schedule.  The current code tries to
	be clever by leaving the refcount alone if an unlink is
	immediately followed by a relink; the patch changes this to an
	unconditional decrement and increment (although they occur in
	the opposite order).

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
CC: David Brownell <david-b@pacbell.net>
Tested-by: Manuel Lauss <manuel.lauss@gmail.com>
Tested-by: Matthijs Kooijman <matthijs@stdin.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/usb/host/ehci-hcd.c |    3 ++-
 drivers/usb/host/ehci-q.c   |    6 +++---
 2 files changed, 5 insertions(+), 4 deletions(-)

--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -903,7 +903,8 @@ static int ehci_urb_dequeue(struct usb_h
 			/* already started */
 			break;
 		case QH_STATE_IDLE:
-			WARN_ON(1);
+			/* QH might be waiting for a Clear-TT-Buffer */
+			qh_completions(ehci, qh);
 			break;
 		}
 		break;
--- a/drivers/usb/host/ehci-q.c
+++ b/drivers/usb/host/ehci-q.c
@@ -938,6 +938,7 @@ static void qh_link_async (struct ehci_h
 	head->qh_next.qh = qh;
 	head->hw_next = dma;
 
+	qh_get(qh);
 	qh->xacterrs = QH_XACTERR_MAX;
 	qh->qh_state = QH_STATE_LINKED;
 	/* qtd completions reported later by interrupt */
@@ -1078,7 +1079,7 @@ submit_async (
 	 * the HC and TT handle it when the TT has a buffer ready.
 	 */
 	if (likely (qh->qh_state == QH_STATE_IDLE))
-		qh_link_async (ehci, qh_get (qh));
+		qh_link_async(ehci, qh);
  done:
 	spin_unlock_irqrestore (&ehci->lock, flags);
 	if (unlikely (qh == NULL))
@@ -1113,8 +1114,6 @@ static void end_unlink_async (struct ehc
 			&& HC_IS_RUNNING (ehci_to_hcd(ehci)->state))
 		qh_link_async (ehci, qh);
 	else {
-		qh_put (qh);		// refcount from async list
-
 		/* it's not free to turn the async schedule on/off; leave it
 		 * active but idle for a while once it empties.
 		 */
@@ -1122,6 +1121,7 @@ static void end_unlink_async (struct ehc
 				&& ehci->async->qh_next.qh == NULL)
 			timer_action (ehci, TIMER_ASYNC_OFF);
 	}
+	qh_put(qh);			/* refcount from async list */
 
 	if (next) {
 		ehci->reclaim = NULL;



  parent reply	other threads:[~2009-09-05  0:24 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20090905001335.106974681@mini.kroah.org>
2009-09-05  0:18 ` [patch 00/71] 2.6.30.6-stable review Greg KH
2009-09-05  0:13   ` [patch 01/71] ehea: Fix napi list corruption on ifconfig down Greg KH
2009-09-05  0:13   ` [patch 02/71] poll/select: initialize triggered field of struct poll_wqueues Greg KH
2009-09-05  0:13   ` [patch 03/71] Make bitmask and operators return a result code Greg KH
2009-09-05  0:13   ` [patch 04/71] x86: dont send an IPI to the empty set of CPUs Greg KH
2009-09-05  0:13   ` [patch 05/71] x86: dont call ->send_IPI_mask() with an empty mask Greg KH
2009-09-05  0:13   ` [patch 06/71] mm: build_zonelists(): move clear node_load[] to __build_all_zonelists() Greg KH
2009-09-05  0:13   ` [patch 07/71] rt2x00: fix memory corruption in rf cache, add a sanity check Greg KH
2009-09-05  0:13   ` [patch 08/71] mac80211: fix panic when splicing unprepared TIDs Greg KH
2009-09-05  0:13   ` [patch 09/71] Re-introduce page mapping check in mark_buffer_dirty() Greg KH
2009-09-05  0:13   ` [patch 10/71] mm: fix hugetlb bug due to user_shm_unlock call Greg KH
2009-09-05  0:13   ` [patch 11/71] ima: hashing large files bug fix Greg KH
2009-09-05  0:13   ` [patch 12/71] kernel_read: redefine offset type Greg KH
2009-09-05  0:13   ` [patch 13/71] tracing: Fix too large stack usage in do_one_initcall() Greg KH
2009-09-05  0:13   ` [patch 14/71] sound: pcm_lib: fix unsorted list constraint handling Greg KH
2009-09-05  0:13   ` [patch 15/71] clone(): fix race between copy_process() and de_thread() Greg KH
2009-09-05  0:13   ` [patch 16/71] wmi: fix kernel panic when stack protection enabled Greg KH
2009-09-05  0:13   ` [patch 17/71] SUNRPC: Fix rpc_task_force_reencode Greg KH
2009-09-05  0:13   ` [patch 18/71] ALSA: hda - Fix MacBookPro 3,1/4,1 quirk with ALC889A Greg KH
2009-09-05  0:13   ` [patch 19/71] KVM: take mmu_lock when updating a deleted slot Greg KH
2009-09-05  0:13   ` [patch 20/71] KVM: x86: check for cr3 validity in mmu_alloc_roots Greg KH
2009-09-05  0:13   ` [patch 21/71] KVM: MMU: protect kvm_mmu_change_mmu_pages with mmu_lock Greg KH
2009-09-05  0:13   ` [patch 22/71] KVM: MMU: do not free active mmu pages in free_mmu_pages() Greg KH
2009-09-05  0:13   ` [patch 23/71] KVM: Introduce {set/get}_interrupt_shadow() Greg KH
2009-09-05  0:13   ` [patch 24/71] KVM: Deal with interrupt shadow state for emulated instructions Greg KH
2009-09-05  0:14   ` [patch 25/71] KVM: MMU: Use different shadows when EFER.NXE changes Greg KH
2009-09-05  0:14   ` [patch 26/71] KVM: x86: Ignore reads to EVNTSEL MSRs Greg KH
2009-09-05  0:14   ` [patch 27/71] KVM: Ignore reads to K7 " Greg KH
2009-09-05  0:14   ` [patch 28/71] KVM: Fix cpuid feature misreporting Greg KH
2009-09-05  0:14   ` [patch 29/71] KVM: x86: verify MTRR/PAT validity Greg KH
2009-09-05  0:14   ` [patch 30/71] KVM: SVM: force new asid on vcpu migration Greg KH
2009-09-05  0:14   ` [patch 31/71] KVM: MMU: handle n_free_mmu_pages > n_alloc_mmu_pages in kvm_mmu_change_mmu_pages Greg KH
2009-09-05  0:14   ` [patch 32/71] [stable] [PATCH 14/16] KVM: MMU: limit rmap chain length Greg KH
2009-09-05  0:14   ` [patch 33/71] KVM: fix ack not being delivered when msi present Greg KH
2009-09-05  0:14   ` [patch 34/71] KVM: Fix KVM_GET_MSR_INDEX_LIST Greg KH
2009-09-05  0:14   ` [patch 35/71] iwl3945: fix rfkill switch Greg KH
2009-09-05  0:14   ` [patch 36/71] iwlagn: do not send key clear commands when rfkill enabled Greg KH
2009-09-05  0:14   ` [patch 37/71] libata: OCZ Vertex cant do HPA Greg KH
2009-09-05  0:14   ` [patch 38/71] SCSI: mpt2sas: Introduced check for enclosure_handle to avoid crash Greg KH
2009-09-05  0:14   ` [patch 39/71] SCSI: mpt2sas: Expander fix oops saying "Already part of another port" Greg KH
2009-09-05  0:14   ` [patch 40/71] SCSI: mpt2sas: Raid 10 Value is showing as Raid 1E in /va/log/messages Greg KH
2009-09-05  0:14   ` [patch 41/71] SCSI: mpt2sas: Excessive log info causes sas iounit page time out Greg KH
2009-09-05  0:14   ` [patch 42/71] SCSI: mpt2sas: fix infinite loop inside config request Greg KH
2009-09-05  0:14   ` [patch 43/71] SCSI: mpt2sas: fix crash due to Watchdog is active while OS in standby mode Greg KH
2009-09-05  0:14   ` [patch 44/71] SCSI: mpt2sas: fix oops because drv data points to NULL on resume from hibernate Greg KH
2009-09-05  0:14   ` [patch 45/71] [SCSI] mpt2sas: fix config request and diag reset deadlock Greg KH
2009-09-05  0:14   ` [patch 46/71] do_sigaltstack: avoid copying stack_t as a structure to user space Greg KH
2009-09-05  0:14   ` [patch 47/71] Bug Fix arch/ia64/kernel/pci-dma.c: fix recursive dma_supported() call in iommu_dma_supported() Greg KH
2009-09-05  0:14   ` [patch 48/71] x86, amd: Dont probe for extended APIC ID if APICs are disabled Greg KH
2009-09-05  0:14   ` [patch 49/71] ocfs2: Initialize the cluster were writing to in a non-sparse extend Greg KH
2009-09-05  0:14   ` [patch 50/71] ACPI processor: force throttling state when BIOS returns incorrect value Greg KH
2009-09-05  0:14   ` [patch 51/71] vfs: fix inode_init_always calling convention Greg KH
2009-09-05  0:14   ` [patch 52/71] vfs: add __destroy_inode Greg KH
2009-09-05  0:14   ` [patch 53/71] xfs: fix freeing of inodes not yet added to the inode cache Greg KH
2009-09-05  0:14   ` [patch 54/71] xfs: fix spin_is_locked assert on uni-processor builds Greg KH
2009-09-05  0:14   ` [patch 55/71] gspca - ov534: Fix ov772x Greg KH
2009-09-05  0:14   ` [patch 56/71] kthreads: fix kthread_create() vs kthread_stop() race Greg KH
2009-09-05  0:14   ` [patch 57/71] ipv6: Fix commit 63d9950b08184e6531adceb65f64b429909cc101 (ipv6: Make v4-mapped bindings consistent with IPv4) Greg KH
2009-09-05  0:14   ` [patch 58/71] USB: fix the clear_tt_buffer interface Greg KH
2009-09-05  0:14   ` [patch 59/71] USB: EHCI: use the new " Greg KH
2009-09-05  0:14   ` Greg KH [this message]
2009-09-05  0:14   ` [patch 61/71] powerpc/ps3: Add missing check for PS3 to rtc-ps3 platform device registration Greg KH
2009-09-05  0:14   ` [patch 62/71] ipv4: make ip_append_data() handle NULL routing table Greg KH
2009-09-05  0:14   ` [patch 63/71] ar9170: fix read & write outside array bounds Greg KH
2009-09-05  0:14   ` [patch 64/71] xenfb: connect to backend before registering fb Greg KH
2009-09-05  0:14   ` [patch 65/71] can: Fix raw_getname() leak Greg KH
2009-09-05  0:14   ` [patch 66/71] irda: Fix irda_getname() leak Greg KH
2009-09-05  0:14   ` [patch 67/71] appletalk: fix atalk_getname() leak Greg KH
2009-09-05  0:14   ` [patch 68/71] netrom: Fix nr_getname() leak Greg KH
2009-09-05  0:14   ` [patch 69/71] econet: Fix econet_getname() leak Greg KH
2009-09-05  0:14   ` [patch 70/71] rose: Fix rose_getname() leak Greg KH
2009-09-05  0:14   ` [patch 71/71] NET: llc, zero sockaddr_llc struct Greg KH
2009-09-05  4:54   ` [patch 00/71] 2.6.30.6-stable review Grant Coady
2009-09-05 14:48     ` Greg KH
2009-09-08 19:23   ` [Stable-review] " Luis R. Rodriguez
2009-09-09 22:44     ` Greg KH
2009-09-10  0:21       ` Luis R. Rodriguez
2009-09-10  3:00         ` 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=20090905001456.619370111@mini.kroah.org \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=david-b@pacbell.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable-review@kernel.org \
    --cc=stable@kernel.org \
    --cc=stern@rowland.harvard.edu \
    --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

all inboxes | Powered by JetHome®