Update to 2.6.36-rc6
svn path=/dists/trunk/linux-2.6/; revision=16367
This commit is contained in:
parent
769bfb21c3
commit
1c573ade5f
|
@ -1,10 +1,13 @@
|
||||||
linux-2.6 (2.6.36~rc5-1~experimental.2) UNRELEASED; urgency=low
|
linux-2.6 (2.6.36~rc6-1~experimental.1) UNRELEASED; urgency=low
|
||||||
|
|
||||||
|
* New upstream release candidate
|
||||||
|
- drm/i915: Ensure that the crtcinfo is populated during mode_fixup()
|
||||||
|
(Closes: #592415)
|
||||||
|
- USB: fix bug in initialization of interface minor numbers
|
||||||
|
(Closes: #598207)
|
||||||
|
|
||||||
[ Ben Hutchings ]
|
[ Ben Hutchings ]
|
||||||
* linux-base: Remove dependency on libapt-pkg-perl (Closes: #589996, really)
|
* linux-base: Remove dependency on libapt-pkg-perl (Closes: #589996, really)
|
||||||
* drm/i915: Ensure that the crtcinfo is populated during mode_fixup()
|
|
||||||
(Closes: #592415)
|
|
||||||
* USB: fix bug in initialization of interface minor numbers (Closes: #598207)
|
|
||||||
|
|
||||||
-- Ben Hutchings <ben@decadent.org.uk> Sun, 26 Sep 2010 15:34:10 +0100
|
-- Ben Hutchings <ben@decadent.org.uk> Sun, 26 Sep 2010 15:34:10 +0100
|
||||||
|
|
||||||
|
|
|
@ -1,122 +0,0 @@
|
||||||
From: Alan Stern <stern@rowland.harvard.edu>
|
|
||||||
Date: Tue, 21 Sep 2010 15:01:53 -0400
|
|
||||||
Subject: [PATCH] USB: fix bug in initialization of interface minor numbers
|
|
||||||
|
|
||||||
commit 0026e00523a85b90a92a93ddf6660939ecef3e54 upstream.
|
|
||||||
|
|
||||||
Recent changes in the usbhid layer exposed a bug in usbcore. If
|
|
||||||
CONFIG_USB_DYNAMIC_MINORS is enabled then an interface may be assigned
|
|
||||||
a minor number of 0. However interfaces that aren't registered as USB
|
|
||||||
class devices also have their minor number set to 0, during
|
|
||||||
initialization. As a result usb_find_interface() may return the
|
|
||||||
wrong interface, leading to a crash.
|
|
||||||
|
|
||||||
This patch (as1418) fixes the problem by initializing every
|
|
||||||
interface's minor number to -1. It also cleans up the
|
|
||||||
usb_register_dev() function, which besides being somewhat awkwardly
|
|
||||||
written, does not unwind completely on all its error paths.
|
|
||||||
|
|
||||||
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
|
|
||||||
Tested-by: Philip J. Turmel <philip@turmel.org>
|
|
||||||
Tested-by: Gabriel Craciunescu <nix.or.die@googlemail.com>
|
|
||||||
Tested-by: Alex Riesen <raa.lkml@gmail.com>
|
|
||||||
Tested-by: Matthias Bayer <jackdachef@gmail.com>
|
|
||||||
CC: Jiri Kosina <jkosina@suse.cz>
|
|
||||||
Cc: stable <stable@kernel.org>
|
|
||||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
||||||
---
|
|
||||||
drivers/usb/core/file.c | 35 ++++++++++++++++-------------------
|
|
||||||
drivers/usb/core/message.c | 1 +
|
|
||||||
2 files changed, 17 insertions(+), 19 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/usb/core/file.c b/drivers/usb/core/file.c
|
|
||||||
index f06f5db..1e6ccef 100644
|
|
||||||
--- a/drivers/usb/core/file.c
|
|
||||||
+++ b/drivers/usb/core/file.c
|
|
||||||
@@ -159,9 +159,9 @@ void usb_major_cleanup(void)
|
|
||||||
int usb_register_dev(struct usb_interface *intf,
|
|
||||||
struct usb_class_driver *class_driver)
|
|
||||||
{
|
|
||||||
- int retval = -EINVAL;
|
|
||||||
+ int retval;
|
|
||||||
int minor_base = class_driver->minor_base;
|
|
||||||
- int minor = 0;
|
|
||||||
+ int minor;
|
|
||||||
char name[20];
|
|
||||||
char *temp;
|
|
||||||
|
|
||||||
@@ -173,12 +173,17 @@ int usb_register_dev(struct usb_interface *intf,
|
|
||||||
*/
|
|
||||||
minor_base = 0;
|
|
||||||
#endif
|
|
||||||
- intf->minor = -1;
|
|
||||||
-
|
|
||||||
- dbg ("looking for a minor, starting at %d", minor_base);
|
|
||||||
|
|
||||||
if (class_driver->fops == NULL)
|
|
||||||
- goto exit;
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ if (intf->minor >= 0)
|
|
||||||
+ return -EADDRINUSE;
|
|
||||||
+
|
|
||||||
+ retval = init_usb_class();
|
|
||||||
+ if (retval)
|
|
||||||
+ return retval;
|
|
||||||
+
|
|
||||||
+ dev_dbg(&intf->dev, "looking for a minor, starting at %d", minor_base);
|
|
||||||
|
|
||||||
down_write(&minor_rwsem);
|
|
||||||
for (minor = minor_base; minor < MAX_USB_MINORS; ++minor) {
|
|
||||||
@@ -186,20 +191,12 @@ int usb_register_dev(struct usb_interface *intf,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
usb_minors[minor] = class_driver->fops;
|
|
||||||
-
|
|
||||||
- retval = 0;
|
|
||||||
+ intf->minor = minor;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
up_write(&minor_rwsem);
|
|
||||||
-
|
|
||||||
- if (retval)
|
|
||||||
- goto exit;
|
|
||||||
-
|
|
||||||
- retval = init_usb_class();
|
|
||||||
- if (retval)
|
|
||||||
- goto exit;
|
|
||||||
-
|
|
||||||
- intf->minor = minor;
|
|
||||||
+ if (intf->minor < 0)
|
|
||||||
+ return -EXFULL;
|
|
||||||
|
|
||||||
/* create a usb class device for this usb interface */
|
|
||||||
snprintf(name, sizeof(name), class_driver->name, minor - minor_base);
|
|
||||||
@@ -213,11 +210,11 @@ int usb_register_dev(struct usb_interface *intf,
|
|
||||||
"%s", temp);
|
|
||||||
if (IS_ERR(intf->usb_dev)) {
|
|
||||||
down_write(&minor_rwsem);
|
|
||||||
- usb_minors[intf->minor] = NULL;
|
|
||||||
+ usb_minors[minor] = NULL;
|
|
||||||
+ intf->minor = -1;
|
|
||||||
up_write(&minor_rwsem);
|
|
||||||
retval = PTR_ERR(intf->usb_dev);
|
|
||||||
}
|
|
||||||
-exit:
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(usb_register_dev);
|
|
||||||
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
|
|
||||||
index 844683e..9f0ce7d 100644
|
|
||||||
--- a/drivers/usb/core/message.c
|
|
||||||
+++ b/drivers/usb/core/message.c
|
|
||||||
@@ -1802,6 +1802,7 @@ free_interfaces:
|
|
||||||
intf->dev.groups = usb_interface_groups;
|
|
||||||
intf->dev.dma_mask = dev->dev.dma_mask;
|
|
||||||
INIT_WORK(&intf->reset_ws, __usb_queue_reset_device);
|
|
||||||
+ intf->minor = -1;
|
|
||||||
device_initialize(&intf->dev);
|
|
||||||
dev_set_name(&intf->dev, "%d-%s:%d.%d",
|
|
||||||
dev->bus->busnum, dev->devpath,
|
|
||||||
--
|
|
||||||
1.7.1
|
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
From: Chris Wilson <chris@chris-wilson.co.uk>
|
|
||||||
Date: Sun, 12 Sep 2010 18:25:19 +0100
|
|
||||||
Subject: [PATCH] drm/i915: Ensure that the crtcinfo is populated during mode_fixup()
|
|
||||||
|
|
||||||
commit 532db7fe1fd75f20f3abf959419d160fb7850aff upstream.
|
|
||||||
|
|
||||||
This should fix the mysterious mode setting failures reported during
|
|
||||||
boot up and after resume, generally for i8xx class machines.
|
|
||||||
|
|
||||||
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=16478
|
|
||||||
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/i915/intel_display.c | 8 ++++++++
|
|
||||||
1 files changed, 8 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
|
||||||
index 161f6ea..1698c52 100644
|
|
||||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
|
||||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
|
||||||
@@ -2477,11 +2477,19 @@ static bool intel_crtc_mode_fixup(struct drm_crtc *crtc,
|
|
||||||
struct drm_display_mode *adjusted_mode)
|
|
||||||
{
|
|
||||||
struct drm_device *dev = crtc->dev;
|
|
||||||
+
|
|
||||||
if (HAS_PCH_SPLIT(dev)) {
|
|
||||||
/* FDI link clock is fixed at 2.7G */
|
|
||||||
if (mode->clock * 3 > IRONLAKE_FDI_FREQ * 4)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ /* XXX some encoders set the crtcinfo, others don't.
|
|
||||||
+ * Obviously we need some form of conflict resolution here...
|
|
||||||
+ */
|
|
||||||
+ if (adjusted_mode->crtc_htotal == 0)
|
|
||||||
+ drm_mode_set_crtcinfo(adjusted_mode, 0);
|
|
||||||
+
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
1.7.3
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
+ bugfix/x86/drm-i915-Ensure-that-the-crtcinfo-is-populated-during-mode_fixup.patch
|
|
||||||
+ bugfix/all/USB-fix-bug-in-initialization-of-interface-minor-num.patch
|
|
Loading…
Reference in New Issue