From: Greg Kroah-Hartman Date: Fri, 2 Apr 2010 18:01:42 +0000 (-0700) Subject: .32 patches X-Git-Tag: v2.6.32.12~61 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d63d177818f7f37563696e6f4f5534a7071b7d86;p=thirdparty%2Fkernel%2Fstable-queue.git .32 patches --- diff --git a/queue-2.6.32/drm-edid-allow-certain-bogus-edids-to-hit-a-fixup-path-rather-than-fail.patch b/queue-2.6.32/drm-edid-allow-certain-bogus-edids-to-hit-a-fixup-path-rather-than-fail.patch new file mode 100644 index 00000000000..ee28c069945 --- /dev/null +++ b/queue-2.6.32/drm-edid-allow-certain-bogus-edids-to-hit-a-fixup-path-rather-than-fail.patch @@ -0,0 +1,35 @@ +From 44fef22416886a04d432043f741a6faf2c6ffefd Mon Sep 17 00:00:00 2001 +From: Ben Skeggs +Date: Thu, 18 Feb 2010 09:12:09 +1000 +Subject: drm/edid: allow certain bogus edids to hit a fixup path rather than fail + +From: Ben Skeggs + +commit 44fef22416886a04d432043f741a6faf2c6ffefd upstream. + +Signed-off-by: Ben Skeggs +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/drm_edid.c | 9 --------- + 1 file changed, 9 deletions(-) + +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -653,15 +653,6 @@ static struct drm_display_mode *drm_mode + mode->vsync_end = mode->vsync_start + vsync_pulse_width; + mode->vtotal = mode->vdisplay + vblank; + +- /* perform the basic check for the detailed timing */ +- if (mode->hsync_end > mode->htotal || +- mode->vsync_end > mode->vtotal) { +- drm_mode_destroy(dev, mode); +- DRM_DEBUG_KMS("Incorrect detailed timing. " +- "Sync is beyond the blank.\n"); +- return NULL; +- } +- + /* Some EDIDs have bogus h/vtotal values */ + if (mode->hsync_end > mode->htotal) + mode->htotal = mode->hsync_end + 1; diff --git a/queue-2.6.32/drm-radeon-add-new-rs880-pci-id.patch b/queue-2.6.32/drm-radeon-add-new-rs880-pci-id.patch new file mode 100644 index 00000000000..453f139bc3d --- /dev/null +++ b/queue-2.6.32/drm-radeon-add-new-rs880-pci-id.patch @@ -0,0 +1,29 @@ +From 338e2b1d571e4873908b199c90d6a31f65137fe3 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Wed, 3 Mar 2010 13:39:13 -0500 +Subject: drm/radeon: add new RS880 pci id + +From: Alex Deucher + +commit 338e2b1d571e4873908b199c90d6a31f65137fe3 upstream. + +This should go to 2.6.33 stable as well. + +Signed-off-by: Alex Deucher +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + include/drm/drm_pciids.h | 1 + + 1 file changed, 1 insertion(+) + +--- a/include/drm/drm_pciids.h ++++ b/include/drm/drm_pciids.h +@@ -375,6 +375,7 @@ + {0x1002, 0x9712, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x9713, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x9714, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ ++ {0x1002, 0x9715, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS880|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0, 0, 0} + + #define r128_PCI_IDS \ diff --git a/queue-2.6.32/drm-radeon-kms-don-t-print-error-on-erestartsys.patch b/queue-2.6.32/drm-radeon-kms-don-t-print-error-on-erestartsys.patch new file mode 100644 index 00000000000..15e0637e14e --- /dev/null +++ b/queue-2.6.32/drm-radeon-kms-don-t-print-error-on-erestartsys.patch @@ -0,0 +1,31 @@ +From 97f23b3d85a4d734a8584dade3a34579931c8f8d Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Fri, 19 Mar 2010 10:33:44 +1000 +Subject: drm/radeon/kms: don't print error on -ERESTARTSYS. + +From: Dave Airlie + +commit 97f23b3d85a4d734a8584dade3a34579931c8f8d upstream. + +We can get this if the user moves the mouse when we are waiting to move +some stuff around in the validate. Don't fail. + +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_cs.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/gpu/drm/radeon/radeon_cs.c ++++ b/drivers/gpu/drm/radeon/radeon_cs.c +@@ -247,7 +247,8 @@ int radeon_cs_ioctl(struct drm_device *d + } + r = radeon_cs_parser_relocs(&parser); + if (r) { +- DRM_ERROR("Failed to parse relocation !\n"); ++ if (r != -ERESTARTSYS) ++ DRM_ERROR("Failed to parse relocation %d!\n", r); + radeon_cs_parser_fini(&parser, r); + mutex_unlock(&rdev->cs_mutex); + return r; diff --git a/queue-2.6.32/drm-radeon-kms-fix-pal-tv-out-support-on-legacy-igp-chips.patch b/queue-2.6.32/drm-radeon-kms-fix-pal-tv-out-support-on-legacy-igp-chips.patch new file mode 100644 index 00000000000..200bfb8a51b --- /dev/null +++ b/queue-2.6.32/drm-radeon-kms-fix-pal-tv-out-support-on-legacy-igp-chips.patch @@ -0,0 +1,80 @@ +From 15f7207761cfcf8f53fb6e5cacffe060478782c3 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Wed, 10 Mar 2010 18:33:03 -0500 +Subject: drm/radeon/kms: fix pal tv-out support on legacy IGP chips + +From: Alex Deucher + +commit 15f7207761cfcf8f53fb6e5cacffe060478782c3 upstream. + +Based on ddx patch by Andrzej Hajda. + +Signed-off-by: Alex Deucher +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_legacy_tv.c | 29 ++++++++++++++++++++++++----- + 1 file changed, 24 insertions(+), 5 deletions(-) + +--- a/drivers/gpu/drm/radeon/radeon_legacy_tv.c ++++ b/drivers/gpu/drm/radeon/radeon_legacy_tv.c +@@ -57,6 +57,10 @@ + #define NTSC_TV_PLL_N_14 693 + #define NTSC_TV_PLL_P_14 7 + ++#define PAL_TV_PLL_M_14 19 ++#define PAL_TV_PLL_N_14 353 ++#define PAL_TV_PLL_P_14 5 ++ + #define VERT_LEAD_IN_LINES 2 + #define FRAC_BITS 0xe + #define FRAC_MASK 0x3fff +@@ -205,9 +209,24 @@ static const struct radeon_tv_mode_const + 630627, /* defRestart */ + 347, /* crtcPLL_N */ + 14, /* crtcPLL_M */ +- 8, /* crtcPLL_postDiv */ ++ 8, /* crtcPLL_postDiv */ + 1022, /* pixToTV */ + }, ++ { /* PAL timing for 14 Mhz ref clk */ ++ 800, /* horResolution */ ++ 600, /* verResolution */ ++ TV_STD_PAL, /* standard */ ++ 1131, /* horTotal */ ++ 742, /* verTotal */ ++ 813, /* horStart */ ++ 840, /* horSyncStart */ ++ 633, /* verSyncStart */ ++ 708369, /* defRestart */ ++ 211, /* crtcPLL_N */ ++ 9, /* crtcPLL_M */ ++ 8, /* crtcPLL_postDiv */ ++ 759, /* pixToTV */ ++ }, + }; + + #define N_AVAILABLE_MODES ARRAY_SIZE(available_tv_modes) +@@ -242,7 +261,7 @@ static const struct radeon_tv_mode_const + if (pll->reference_freq == 2700) + const_ptr = &available_tv_modes[1]; + else +- const_ptr = &available_tv_modes[1]; /* FIX ME */ ++ const_ptr = &available_tv_modes[3]; + } + return const_ptr; + } +@@ -685,9 +704,9 @@ void radeon_legacy_tv_mode_set(struct dr + n = PAL_TV_PLL_N_27; + p = PAL_TV_PLL_P_27; + } else { +- m = PAL_TV_PLL_M_27; +- n = PAL_TV_PLL_N_27; +- p = PAL_TV_PLL_P_27; ++ m = PAL_TV_PLL_M_14; ++ n = PAL_TV_PLL_N_14; ++ p = PAL_TV_PLL_P_14; + } + } + diff --git a/queue-2.6.32/drm-remove-the-edid-blob-stored-in-the-edid-property-when-it-is-disconnected.patch b/queue-2.6.32/drm-remove-the-edid-blob-stored-in-the-edid-property-when-it-is-disconnected.patch new file mode 100644 index 00000000000..b70af67d914 --- /dev/null +++ b/queue-2.6.32/drm-remove-the-edid-blob-stored-in-the-edid-property-when-it-is-disconnected.patch @@ -0,0 +1,36 @@ +From 725398322d05486109375fbb85c3404108881e17 Mon Sep 17 00:00:00 2001 +From: Zhao Yakui +Date: Thu, 4 Mar 2010 08:25:55 +0000 +Subject: drm: remove the EDID blob stored in the EDID property when it is disconnected + +From: Zhao Yakui + +commit 725398322d05486109375fbb85c3404108881e17 upstream. + +Now the EDID property will be updated when the corresponding EDID can be +obtained from the external display device. But after the external device +is plugged-out, the EDID property is not updated. In such case we still +get the corresponding EDID property although it is already detected as +disconnected. + +https://bugs.freedesktop.org/show_bug.cgi?id=26743 + +Signed-off-by: Zhao Yakui +Signed-off-by: Zhenyu Wang +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/drm_crtc_helper.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/gpu/drm/drm_crtc_helper.c ++++ b/drivers/gpu/drm/drm_crtc_helper.c +@@ -104,6 +104,7 @@ int drm_helper_probe_single_connector_mo + if (connector->status == connector_status_disconnected) { + DRM_DEBUG_KMS("%s is disconnected\n", + drm_get_connector_name(connector)); ++ drm_mode_connector_update_edid_property(connector, NULL); + goto prune; + } + diff --git a/queue-2.6.32/drm-return-enodev-if-the-inode-mapping-changes.patch b/queue-2.6.32/drm-return-enodev-if-the-inode-mapping-changes.patch new file mode 100644 index 00000000000..8faeed17f7f --- /dev/null +++ b/queue-2.6.32/drm-return-enodev-if-the-inode-mapping-changes.patch @@ -0,0 +1,75 @@ +From da58405860b992d2bb21ebae5d685fe3204dd3f0 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Thu, 18 Mar 2010 11:56:54 +0000 +Subject: drm: Return ENODEV if the inode mapping changes + +From: Chris Wilson + +commit da58405860b992d2bb21ebae5d685fe3204dd3f0 upstream. + +Replace a BUG_ON with an error code in the event that the inode mapping +changes between calls to drm_open. This may happen for instance if udev +is loaded subsequent to the original opening of the device: + +[ 644.291870] kernel BUG at drivers/gpu/drm/drm_fops.c:146! +[ 644.291876] invalid opcode: 0000 [#1] SMP +[ 644.291882] last sysfs file: /sys/kernel/uevent_seqnum +[ 644.291888] +[ 644.291895] Pid: 7276, comm: lt-cairo-test-s Not tainted 2.6.34-rc1 #2 N150/N210/N220 /N150/N210/N220 +[ 644.291903] EIP: 0060:[] EFLAGS: 00210283 CPU: 0 +[ 644.291912] EIP is at drm_open+0x4b1/0x4e2 +[ 644.291918] EAX: f72d8d18 EBX: f790a400 ECX: f73176b8 EDX: 00000000 +[ 644.291923] ESI: f790a414 EDI: f790a414 EBP: f647ae20 ESP: f647adfc +[ 644.291929] DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 +[ 644.291937] Process lt-cairo-test-s (pid: 7276, ti=f647a000 task=f73f5c80 task.ti=f647a000) +[ 644.291941] Stack: +[ 644.291945] 00000000 f7bb7400 00000080 f6451100 f73176b8 f6479214 f6451100 f73176b8 +[ 644.291957] <0> c1297ce0 f647ae34 c11c6c04 f73176b8 f7949800 00000000 f647ae54 c1080ac5 +[ 644.291969] <0> f7949800 f6451100 00000000 f6451100 f73176b8 f6452780 f647ae70 c107d1e6 +[ 644.291982] Call Trace: +[ 644.291991] [] ? drm_stub_open+0x8a/0xb8 +[ 644.292000] [] ? chrdev_open+0xef/0x106 +[ 644.292008] [] ? __dentry_open+0xd4/0x1a6 +[ 644.292015] [] ? nameidata_to_filp+0x31/0x45 +[ 644.292022] [] ? chrdev_open+0x0/0x106 +[ 644.292030] [] ? do_last+0x346/0x423 +[ 644.292037] [] ? do_filp_open+0x190/0x415 +[ 644.292046] [] ? handle_mm_fault+0x214/0x710 +[ 644.292053] [] ? do_sys_open+0x4d/0xe9 +[ 644.292061] [] ? do_page_fault+0x211/0x23f +[ 644.292068] [] ? sys_open+0x23/0x2b +[ 644.292075] [] ? sysenter_do_call+0x12/0x26 +[ 644.292079] Code: 89 f0 89 55 dc e8 8d 96 0a 00 8b 45 e0 8b 55 dc 83 78 04 01 75 28 8b 83 18 02 00 00 85 c0 74 0f 8b 4d ec 3b 81 ac 00 00 00 74 13 <0f> 0b eb fe 8b 4d ec 8b 81 ac 00 00 00 89 83 18 02 00 00 89 f0 +[ 644.292143] EIP: [] drm_open+0x4b1/0x4e2 SS:ESP 0068:f647adfc +[ 644.292175] ---[ end trace 2ddd476af89a60fa ]--- + +Signed-off-by: Chris Wilson +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- a/drivers/gpu/drm/drm_fops.c ++++ b/drivers/gpu/drm/drm_fops.c +@@ -140,14 +140,16 @@ int drm_open(struct inode *inode, struct file *filp) + spin_unlock(&dev->count_lock); + } + out: +- mutex_lock(&dev->struct_mutex); +- if (minor->type == DRM_MINOR_LEGACY) { +- BUG_ON((dev->dev_mapping != NULL) && +- (dev->dev_mapping != inode->i_mapping)); +- if (dev->dev_mapping == NULL) +- dev->dev_mapping = inode->i_mapping; ++ if (!retcode) { ++ mutex_lock(&dev->struct_mutex); ++ if (minor->type == DRM_MINOR_LEGACY) { ++ if (dev->dev_mapping == NULL) ++ dev->dev_mapping = inode->i_mapping; ++ else if (dev->dev_mapping != inode->i_mapping) ++ retcode = -ENODEV; ++ } ++ mutex_unlock(&dev->struct_mutex); + } +- mutex_unlock(&dev->struct_mutex); + + return retcode; + } diff --git a/queue-2.6.32/fat-fix-buffer-overflow-in-vfat_create_shortname.patch b/queue-2.6.32/fat-fix-buffer-overflow-in-vfat_create_shortname.patch new file mode 100644 index 00000000000..bbf63dcb405 --- /dev/null +++ b/queue-2.6.32/fat-fix-buffer-overflow-in-vfat_create_shortname.patch @@ -0,0 +1,56 @@ +From 30d1872d9eb3663b4cf7bdebcbf5cd465674cced Mon Sep 17 00:00:00 2001 +From: Nikolaus Schulz +Date: Thu, 1 Apr 2010 02:21:10 +0900 +Subject: fat: fix buffer overflow in vfat_create_shortname() + +From: Nikolaus Schulz + +commit 30d1872d9eb3663b4cf7bdebcbf5cd465674cced upstream. + +When using the string representation of a random counter as part of the base +name, ensure that it is no longer than 4 bytes. + +Since we are repeatedly decrementing the counter in a loop until we have found a +unique base name, the counter may wrap around zero; therefore, it is not enough +to mask its higher bits before entering the loop, this must be done inside the +loop. + +[hirofumi@mail.parknet.co.jp: use snprintf()] +Signed-off-by: Nikolaus Schulz +Signed-off-by: OGAWA Hirofumi +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + fs/fat/namei_vfat.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/fs/fat/namei_vfat.c ++++ b/fs/fat/namei_vfat.c +@@ -309,7 +309,7 @@ static int vfat_create_shortname(struct + { + struct fat_mount_options *opts = &MSDOS_SB(dir->i_sb)->options; + wchar_t *ip, *ext_start, *end, *name_start; +- unsigned char base[9], ext[4], buf[8], *p; ++ unsigned char base[9], ext[4], buf[5], *p; + unsigned char charbuf[NLS_MAX_CHARSET_SIZE]; + int chl, chi; + int sz = 0, extlen, baselen, i, numtail_baselen, numtail2_baselen; +@@ -467,7 +467,7 @@ static int vfat_create_shortname(struct + return 0; + } + +- i = jiffies & 0xffff; ++ i = jiffies; + sz = (jiffies >> 16) & 0x7; + if (baselen > 2) { + baselen = numtail2_baselen; +@@ -476,7 +476,7 @@ static int vfat_create_shortname(struct + name_res[baselen + 4] = '~'; + name_res[baselen + 5] = '1' + sz; + while (1) { +- sprintf(buf, "%04X", i); ++ snprintf(buf, sizeof(buf), "%04X", i & 0xffff); + memcpy(&name_res[baselen], buf, 4); + if (vfat_find_form(dir, name_res) < 0) + break; diff --git a/queue-2.6.32/oom-fix-the-unsafe-usage-of-badness-in-proc_oom_score.patch b/queue-2.6.32/oom-fix-the-unsafe-usage-of-badness-in-proc_oom_score.patch new file mode 100644 index 00000000000..8d4f247fed2 --- /dev/null +++ b/queue-2.6.32/oom-fix-the-unsafe-usage-of-badness-in-proc_oom_score.patch @@ -0,0 +1,52 @@ +From b95c35e76b29ba812e5dabdd91592e25ec640e93 Mon Sep 17 00:00:00 2001 +From: Oleg Nesterov +Date: Thu, 1 Apr 2010 15:13:57 +0200 +Subject: oom: fix the unsafe usage of badness() in proc_oom_score() + +From: Oleg Nesterov + +commit b95c35e76b29ba812e5dabdd91592e25ec640e93 upstream. + +proc_oom_score(task) has a reference to task_struct, but that is all. +If this task was already released before we take tasklist_lock + + - we can't use task->group_leader, it points to nowhere + + - it is not safe to call badness() even if this task is + ->group_leader, has_intersects_mems_allowed() assumes + it is safe to iterate over ->thread_group list. + + - even worse, badness() can hit ->signal == NULL + +Add the pid_alive() check to ensure __unhash_process() was not called. + +Also, use "task" instead of task->group_leader. badness() should return +the same result for any sub-thread. Currently this is not true, but +this should be changed anyway. + +Signed-off-by: Oleg Nesterov +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + fs/proc/base.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/fs/proc/base.c ++++ b/fs/proc/base.c +@@ -442,12 +442,13 @@ static const struct file_operations proc + unsigned long badness(struct task_struct *p, unsigned long uptime); + static int proc_oom_score(struct task_struct *task, char *buffer) + { +- unsigned long points; ++ unsigned long points = 0; + struct timespec uptime; + + do_posix_clock_monotonic_gettime(&uptime); + read_lock(&tasklist_lock); +- points = badness(task->group_leader, uptime.tv_sec); ++ if (pid_alive(task)) ++ points = badness(task, uptime.tv_sec); + read_unlock(&tasklist_lock); + return sprintf(buffer, "%lu\n", points); + } diff --git a/queue-2.6.32/series b/queue-2.6.32/series new file mode 100644 index 00000000000..8e4a7266c65 --- /dev/null +++ b/queue-2.6.32/series @@ -0,0 +1,8 @@ +drm-edid-allow-certain-bogus-edids-to-hit-a-fixup-path-rather-than-fail.patch +drm-radeon-add-new-rs880-pci-id.patch +drm-remove-the-edid-blob-stored-in-the-edid-property-when-it-is-disconnected.patch +fat-fix-buffer-overflow-in-vfat_create_shortname.patch +oom-fix-the-unsafe-usage-of-badness-in-proc_oom_score.patch +drm-radeon-kms-don-t-print-error-on-erestartsys.patch +drm-radeon-kms-fix-pal-tv-out-support-on-legacy-igp-chips.patch +drm-return-enodev-if-the-inode-mapping-changes.patch