rpms/kernel/F-7 kernel-2.6.spec, 1.3209, 1.3210 linux-2.6-singlethread-freezable-workqueues.patch, 1.1, 1.2
Dave Jones (davej)
fedora-extras-commits at redhat.com
Thu May 31 21:30:37 UTC 2007
Author: davej
Update of /cvs/pkgs/rpms/kernel/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv18017
Modified Files:
kernel-2.6.spec
linux-2.6-singlethread-freezable-workqueues.patch
Log Message:
* Thu May 31 2007 Dave Jones <davej at redhat.com>
- Fix up a USB suspend/resume regression.
Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/kernel-2.6.spec,v
retrieving revision 1.3209
retrieving revision 1.3210
diff -u -r1.3209 -r1.3210
--- kernel-2.6.spec 29 May 2007 20:02:28 -0000 1.3209
+++ kernel-2.6.spec 31 May 2007 21:30:02 -0000 1.3210
@@ -2428,6 +2428,9 @@
%endif
%changelog
+* Thu May 31 2007 Dave Jones <davej at redhat.com>
+- Fix up a USB suspend/resume regression.
+
* Tue May 29 2007 Dave Jones <davej at redhat.com>
- Reenable non-x86 architectures..
linux-2.6-singlethread-freezable-workqueues.patch:
Index: linux-2.6-singlethread-freezable-workqueues.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-singlethread-freezable-workqueues.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-singlethread-freezable-workqueues.patch 22 May 2007 04:00:25 -0000 1.1
+++ linux-2.6-singlethread-freezable-workqueues.patch 31 May 2007 21:30:02 -0000 1.2
@@ -264,3 +264,198 @@
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
+From davej Tue May 29 14:49:43 2007
+Return-path: <linux-kernel-owner+davej=40kernelslacker.org-S1762748AbXE2SnY at vger.kernel.org>
+X-Spam-Checker-Version: SpamAssassin 3.1.8 (2007-02-13) on
+ gelk.kernelslacker.org
+X-Spam-Level:
+X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham
+ version=3.1.8
+Envelope-to: davej at kernelslacker.org
+Delivery-date: Tue, 29 May 2007 19:44:00 +0100
+Received: from testure.choralone.org [194.9.77.134]
+ by gelk.kernelslacker.org with IMAP (fetchmail-6.3.6)
+ for <davej at localhost> (single-drop); Tue, 29 May 2007 14:49:43 -0400 (EDT)
+Received: from vger.kernel.org ([209.132.176.167])
+ by testure.choralone.org with esmtp (Exim 4.63)
+ (envelope-from <linux-kernel-owner+davej=40kernelslacker.org-S1762748AbXE2SnY at vger.kernel.org>)
+ id 1Ht6fo-000807-4J
+ for davej at kernelslacker.org; Tue, 29 May 2007 19:44:00 +0100
+Received: (majordomo at vger.kernel.org) by vger.kernel.org via listexpand
+ id S1762748AbXE2SnY (ORCPT <rfc822;davej at kernelslacker.org>);
+ Tue, 29 May 2007 14:43:24 -0400
+Received: (majordomo at vger.kernel.org) by vger.kernel.org id S1765048AbXE2Sle
+ (ORCPT <rfc822;linux-kernel-outgoing>);
+ Tue, 29 May 2007 14:41:34 -0400
+Received: from iolanthe.rowland.org ([192.131.102.54]:54130 "HELO
+ iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
+ with SMTP id S1765028AbXE2Slc (ORCPT
+ <rfc822;linux-kernel at vger.kernel.org>);
+ Tue, 29 May 2007 14:41:32 -0400
+Received: (qmail 17114 invoked by uid 2102); 29 May 2007 14:41:28 -0400
+Received: from localhost (sendmail-bs at 127.0.0.1)
+ by localhost with SMTP; 29 May 2007 14:41:28 -0400
+Date: Tue, 29 May 2007 14:41:28 -0400 (EDT)
+From: Alan Stern <stern at rowland.harvard.edu>
+X-X-Sender: stern at iolanthe.rowland.org
+To: Mark Lord <lkml at rtr.ca>
+cc: Linus Torvalds <torvalds at linux-foundation.org>,
+ Linux Kernel <linux-kernel at vger.kernel.org>,
+ Greg KH <gregkh at suse.de>,
+ Andrew Morton <akpm at linux-foundation.org>
+Subject: Re: Regression: USB is nfg after suspend/resume(RAM) cycle on Intel
+ chipset
+In-Reply-To: <465C64D1.3030604 at rtr.ca>
+Message-ID: <Pine.LNX.4.44L0.0705291428230.3340-100000 at iolanthe.rowland.org>
+MIME-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+Sender: linux-kernel-owner at vger.kernel.org
+Precedence: bulk
+X-Mailing-List: linux-kernel at vger.kernel.org
+Status: RO
+Content-Length: 4862
+Lines: 142
+
+On Tue, 29 May 2007, Mark Lord wrote:
+
+> Mark Lord wrote:
+> >..
+> > 7ed92f1a149dddc3cb537ccd7441e98adac12c3e USB: make the autosuspend
+> > workqueue thread freezable
+> > ef7f6c7084b333c7524dcd297e0578d43733a2a2 USB: more autosuspend timer stuff
+> >
+> > I yanked them both, as they appeared to be releated based on the titles.
+> > Reverting this pair of commits fixes the USB suspend/resume regression.
+>
+> Okay, just to make it trivial,
+> I've narrowed it down to only this commit from Alan Stern:
+>
+> 7ed92f1a149dddc3cb537ccd7441e98adac12c3e USB: make the autosuspend workqueue thread freezable
+
+I'm a little surprised; I would have expected the other patch to be the
+one responsible. Are you sure you got the right one?
+
+Your symptoms suggest that the ksuspend_usbd and khubd kernel threads
+are in deadlock. You could verify this by getting an Alt-SysRq-T stack
+trace of the two threads after resuming. Andrew Morton saw this
+happen, under slightly different circumstances, on his system.
+
+If this is indeed the case, the patch below ought to fix your problem.
+Essentially it replaces calls to flush_workqueue() with
+cancel_sync_work(). I sent it to Andrew last week, but his problem
+occurs only sporadically so it's hard to test.
+
+
+On Tue, 29 May 2007, Linus Torvalds wrote:
+
+> Heh. Have I mentioned how much I *hate* those kernel threads being frozen?
+>
+> Just for fun, could you try if the patch that just rips out the freezer
+> calls from the STR code just fixes the problem too (instead of reverting
+> that commit?)
+
+We'll know for certain after Mark tries this patch. However at the
+moment I doubt that freezing the kernel threads has anything to do with
+the problem.
+
+BTW, you mentioned in an earlier email that for suspend-to-RAM, instead
+of freezing tasks we should freeze I/O. It's a good idea, but have you
+considered how much overhead it would add? Even if the necessary
+changes are confined to the subsystem level, just think about what
+would happen for example with char device drivers.
+
+The only common subsystem they share is VFS. Every entry point into
+VFS would therefore need to test whether a suspend-to-RAM was in
+progress, and if it was, block until the suspend was over. Each of
+these tests would be on a hot path -- not something we really want to
+do if it is at all avoidable.
+
+Alan Stern
+
+
+
+Index: 2.6.22-rc3/drivers/usb/core/hub.c
+===================================================================
+--- 2.6.22-rc3.orig/drivers/usb/core/hub.c
++++ 2.6.22-rc3/drivers/usb/core/hub.c
+@@ -1158,6 +1158,30 @@ static void release_address(struct usb_d
+ }
+ }
+
++#ifdef CONFIG_USB_SUSPEND
++
++static void usb_stop_pm(struct usb_device *udev)
++{
++ /* Synchronize with the ksuspend thread to prevent any more
++ * autosuspend requests from being submitted, and decrement
++ * the parent's count of unsuspended children.
++ */
++ usb_pm_lock(udev);
++ if (udev->parent && !udev->discon_suspended)
++ usb_autosuspend_device(udev->parent);
++ usb_pm_unlock(udev);
++
++ /* Stop any autosuspend requests already submitted */
++ cancel_rearming_delayed_work(&udev->autosuspend);
++}
++
++#else
++
++static inline void usb_stop_pm(struct usb_device *udev)
++{ }
++
++#endif
++
+ /**
+ * usb_disconnect - disconnect a device (usbcore-internal)
+ * @pdev: pointer to device being disconnected
+@@ -1224,13 +1248,7 @@ void usb_disconnect(struct usb_device **
+ *pdev = NULL;
+ spin_unlock_irq(&device_state_lock);
+
+- /* Decrement the parent's count of unsuspended children */
+- if (udev->parent) {
+- usb_pm_lock(udev);
+- if (!udev->discon_suspended)
+- usb_autosuspend_device(udev->parent);
+- usb_pm_unlock(udev);
+- }
++ usb_stop_pm(udev);
+
+ put_device(&udev->dev);
+ }
+Index: 2.6.22-rc3/drivers/usb/core/usb.c
+===================================================================
+--- 2.6.22-rc3.orig/drivers/usb/core/usb.c
++++ 2.6.22-rc3/drivers/usb/core/usb.c
+@@ -184,10 +184,6 @@ static void usb_release_dev(struct devic
+
+ udev = to_usb_device(dev);
+
+-#ifdef CONFIG_USB_SUSPEND
+- cancel_delayed_work(&udev->autosuspend);
+- flush_workqueue(ksuspend_usb_wq);
+-#endif
+ usb_destroy_configuration(udev);
+ usb_put_hcd(bus_to_hcd(udev->bus));
+ kfree(udev->product);
+Index: 2.6.22-rc3/drivers/usb/core/hcd.c
+===================================================================
+--- 2.6.22-rc3.orig/drivers/usb/core/hcd.c
++++ 2.6.22-rc3/drivers/usb/core/hcd.c
+@@ -1681,7 +1681,7 @@ void usb_remove_hcd(struct usb_hcd *hcd)
+ spin_unlock_irq (&hcd_root_hub_lock);
+
+ #ifdef CONFIG_PM
+- flush_workqueue(ksuspend_usb_wq);
++ cancel_work_sync(&hcd->wakeup_work);
+ #endif
+
+ mutex_lock(&usb_bus_list_lock);
+
+-
+To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
+the body of a message to majordomo at vger.kernel.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html
+Please read the FAQ at http://www.tux.org/lkml/
+
More information about the fedora-extras-commits
mailing list