--- /dev/null
+From 44fef22416886a04d432043f741a6faf2c6ffefd Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs@redhat.com>
+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 <bskeggs@redhat.com>
+
+commit 44fef22416886a04d432043f741a6faf2c6ffefd upstream.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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;
--- /dev/null
+From 338e2b1d571e4873908b199c90d6a31f65137fe3 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexdeucher@gmail.com>
+Date: Wed, 3 Mar 2010 13:39:13 -0500
+Subject: drm/radeon: add new RS880 pci id
+
+From: Alex Deucher <alexdeucher@gmail.com>
+
+commit 338e2b1d571e4873908b199c90d6a31f65137fe3 upstream.
+
+This should go to 2.6.33 stable as well.
+
+Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 \
--- /dev/null
+From 97f23b3d85a4d734a8584dade3a34579931c8f8d Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+Date: Fri, 19 Mar 2010 10:33:44 +1000
+Subject: drm/radeon/kms: don't print error on -ERESTARTSYS.
+
+From: Dave Airlie <airlied@redhat.com>
+
+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 <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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;
--- /dev/null
+From 15f7207761cfcf8f53fb6e5cacffe060478782c3 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexdeucher@gmail.com>
+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 <alexdeucher@gmail.com>
+
+commit 15f7207761cfcf8f53fb6e5cacffe060478782c3 upstream.
+
+Based on ddx patch by Andrzej Hajda.
+
+Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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;
+ }
+ }
+
--- /dev/null
+From 725398322d05486109375fbb85c3404108881e17 Mon Sep 17 00:00:00 2001
+From: Zhao Yakui <yakui.zhao@intel.com>
+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 <yakui.zhao@intel.com>
+
+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 <yakui.zhao@intel.com>
+Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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;
+ }
+
--- /dev/null
+From da58405860b992d2bb21ebae5d685fe3204dd3f0 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Thu, 18 Mar 2010 11:56:54 +0000
+Subject: drm: Return ENODEV if the inode mapping changes
+
+From: Chris Wilson <chris@chris-wilson.co.uk>
+
+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:[<c11c70e3>] 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] [<c11c6c04>] ? drm_stub_open+0x8a/0xb8
+[ 644.292000] [<c1080ac5>] ? chrdev_open+0xef/0x106
+[ 644.292008] [<c107d1e6>] ? __dentry_open+0xd4/0x1a6
+[ 644.292015] [<c107d35b>] ? nameidata_to_filp+0x31/0x45
+[ 644.292022] [<c10809d6>] ? chrdev_open+0x0/0x106
+[ 644.292030] [<c10864e2>] ? do_last+0x346/0x423
+[ 644.292037] [<c108789f>] ? do_filp_open+0x190/0x415
+[ 644.292046] [<c1071eb5>] ? handle_mm_fault+0x214/0x710
+[ 644.292053] [<c107d008>] ? do_sys_open+0x4d/0xe9
+[ 644.292061] [<c1016462>] ? do_page_fault+0x211/0x23f
+[ 644.292068] [<c107d0f0>] ? sys_open+0x23/0x2b
+[ 644.292075] [<c1002650>] ? 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: [<c11c70e3>] drm_open+0x4b1/0x4e2 SS:ESP 0068:f647adfc
+[ 644.292175] ---[ end trace 2ddd476af89a60fa ]---
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+--- 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;
+ }
--- /dev/null
+From 30d1872d9eb3663b4cf7bdebcbf5cd465674cced Mon Sep 17 00:00:00 2001
+From: Nikolaus Schulz <microschulz@web.de>
+Date: Thu, 1 Apr 2010 02:21:10 +0900
+Subject: fat: fix buffer overflow in vfat_create_shortname()
+
+From: Nikolaus Schulz <microschulz@web.de>
+
+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 <microschulz@web.de>
+Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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;
--- /dev/null
+From b95c35e76b29ba812e5dabdd91592e25ec640e93 Mon Sep 17 00:00:00 2001
+From: Oleg Nesterov <oleg@redhat.com>
+Date: Thu, 1 Apr 2010 15:13:57 +0200
+Subject: oom: fix the unsafe usage of badness() in proc_oom_score()
+
+From: Oleg Nesterov <oleg@redhat.com>
+
+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 <oleg@redhat.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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);
+ }
--- /dev/null
+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