summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Young <m.a.young@durham.ac.uk>2010-09-03 22:04:30 +0100
committerMichael Young <m.a.young@durham.ac.uk>2010-09-03 22:04:30 +0100
commit11574d71a51fbd19255e2d5798dbf52284a1a29c (patch)
tree673cab071c28b9712b2f0037d719f8f6ca6776e3
parentc037070edb1f5a0c34505d879b65f0ad96dbd231 (diff)
parentb9204c294cb0512e7ec4c1480276126d8a40d6c3 (diff)
downloaddom0-kernel-11574d71a51fbd19255e2d5798dbf52284a1a29c.tar.gz
dom0-kernel-11574d71a51fbd19255e2d5798dbf52284a1a29c.tar.xz
dom0-kernel-11574d71a51fbd19255e2d5798dbf52284a1a29c.zip
Merge branch 'f12/master' into f12/user/myoung/xendom0
Conflicts: kernel.spec
-rw-r--r--cifs-fix-dns-resolver.patch47
-rw-r--r--config-generic4
-rw-r--r--crypto-testmgr-add-null-test-for-aesni.patch138
-rw-r--r--drm-i915-add-reclaimable-to-page-allocations.patch48
-rw-r--r--drm-i915-fix-hibernate-memory-corruption.patch41
-rw-r--r--drm-nouveau-nva3-noaccel.patch105
-rw-r--r--drm-upgrayed-fixes.patch1092
-rw-r--r--drm-upgrayedd.patch10
-rw-r--r--ext4-make-sure-the-move_ext-ioctl-can-t-overwrite-append-only-files.patch34
-rw-r--r--irda-correctly-clean-up-self-ias_obj-on-irda_bind-failure.patch35
-rw-r--r--kernel.spec103
-rw-r--r--linux-2.6-btrfs-fix-acl.patch25
-rw-r--r--linux-2.6-execshield.patch11
-rw-r--r--linux-2.6-upstream-reverts.patch39
-rw-r--r--linux-2.6-usb-wwan-update.patch9
-rw-r--r--sources3
-rw-r--r--ssb_check_for_sprom.patch185
-rw-r--r--xfs-prevent-swapext-from-operating-on-write-only-files.patch42
18 files changed, 1365 insertions, 606 deletions
diff --git a/cifs-fix-dns-resolver.patch b/cifs-fix-dns-resolver.patch
deleted file mode 100644
index 6a74fba..0000000
--- a/cifs-fix-dns-resolver.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From: Chuck Ebbert <cebbert@redhat.com>
-
-CIFS: Fix DNS resolver build
-
-In file included from fs/cifs/dns_resolve.c:29:
-fs/cifs/dns_resolve.h:27: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'cifs_init_dns_resolver'
-
-Just remove the __init and __exit attributes from the init and exit
-functions. __exit was removed upstream in 51c20fcced5badee0e2021c6c89f44aa3cbd72aa
-anyway, and there's no point trying to save every byte by fixing
-this properly.
-
-Signed-Off-By: Chuck Ebbert <cebbert@redhat.com>
-
---- a/fs/cifs/dns_resolve.c
-+++ b/fs/cifs/dns_resolve.c
-@@ -176,7 +176,7 @@ out:
- return rc;
- }
-
--int __init cifs_init_dns_resolver(void)
-+int cifs_init_dns_resolver(void)
- {
- struct cred *cred;
- struct key *keyring;
-@@ -226,7 +226,7 @@ failed_put_cred:
- return ret;
- }
-
--void __exit cifs_exit_dns_resolver(void)
-+void cifs_exit_dns_resolver(void)
- {
- key_revoke(dns_resolver_cache->thread_keyring);
- unregister_key_type(&key_type_dns_resolver);
---- a/fs/cifs/dns_resolve.h
-+++ b/fs/cifs/dns_resolve.h
-@@ -24,8 +24,8 @@
- #define _DNS_RESOLVE_H
-
- #ifdef __KERNEL__
--extern int __init cifs_init_dns_resolver(void);
--extern void __exit cifs_exit_dns_resolver(void);
-+extern int cifs_init_dns_resolver(void);
-+extern void cifs_exit_dns_resolver(void);
- extern int dns_resolve_server_name_to_ip(const char *unc, char **ip_addr);
- #endif /* KERNEL */
-
diff --git a/config-generic b/config-generic
index fe84fdd..3669497 100644
--- a/config-generic
+++ b/config-generic
@@ -3781,8 +3781,8 @@ CONFIG_AUXDISPLAY=y
CONFIG_UIO=m
CONFIG_UIO_CIF=m
CONFIG_UIO_SMX=m
-CONFIG_UIO_PDRV=m
-CONFIG_UIO_PDRV_GENIRQ=m
+# CONFIG_UIO_PDRV is not set
+# CONFIG_UIO_PDRV_GENIRQ is not set
CONFIG_UIO_AEC=m
CONFIG_UIO_SERCOS3=m
CONFIG_UIO_PCI_GENERIC=m
diff --git a/crypto-testmgr-add-null-test-for-aesni.patch b/crypto-testmgr-add-null-test-for-aesni.patch
deleted file mode 100644
index b38a6f9..0000000
--- a/crypto-testmgr-add-null-test-for-aesni.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-From: Youquan, Song <youquan.song@intel.com>
-Date: Wed, 23 Dec 2009 11:45:20 +0000 (+0800)
-Subject: crypto: testmgr - Fix complain about lack test for internal used algorithm
-X-Git-Tag: v2.6.34-rc1~286^2~28
-X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=863b557a88f8c033f7419fabafef4712a5055f85
-
-crypto: testmgr - Fix complain about lack test for internal used algorithm
-
-When load aesni-intel and ghash_clmulni-intel driver,kernel will complain no
- test for some internal used algorithm.
-The strange information as following:
-
-alg: No test for __aes-aesni (__driver-aes-aesni)
-alg: No test for __ecb-aes-aesni (__driver-ecb-aes-aesni)
-alg: No test for __cbc-aes-aesni (__driver-cbc-aes-aesni)
-alg: No test for __ecb-aes-aesni (cryptd(__driver-ecb-aes-aesni)
-alg: No test for __ghash (__ghash-pclmulqdqni)
-alg: No test for __ghash (cryptd(__ghash-pclmulqdqni))
-
-This patch add NULL test entries for these algorithm and driver.
-
-Signed-off-by: Youquan, Song <youquan.song@intel.com>
-Signed-off-by: Ying, Huang <ying.huang@intel.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
-
-diff --git a/crypto/testmgr.c b/crypto/testmgr.c
-index 7620bfc..c494d76 100644
---- a/crypto/testmgr.c
-+++ b/crypto/testmgr.c
-@@ -1477,9 +1477,54 @@ static int alg_test_cprng(const struct alg_test_desc *desc, const char *driver,
- return err;
- }
-
-+static int alg_test_null(const struct alg_test_desc *desc,
-+ const char *driver, u32 type, u32 mask)
-+{
-+ return 0;
-+}
-+
- /* Please keep this list sorted by algorithm name. */
- static const struct alg_test_desc alg_test_descs[] = {
- {
-+ .alg = "__driver-cbc-aes-aesni",
-+ .test = alg_test_null,
-+ .suite = {
-+ .cipher = {
-+ .enc = {
-+ .vecs = NULL,
-+ .count = 0
-+ },
-+ .dec = {
-+ .vecs = NULL,
-+ .count = 0
-+ }
-+ }
-+ }
-+ }, {
-+ .alg = "__driver-ecb-aes-aesni",
-+ .test = alg_test_null,
-+ .suite = {
-+ .cipher = {
-+ .enc = {
-+ .vecs = NULL,
-+ .count = 0
-+ },
-+ .dec = {
-+ .vecs = NULL,
-+ .count = 0
-+ }
-+ }
-+ }
-+ }, {
-+ .alg = "__ghash-pclmulqdqni",
-+ .test = alg_test_null,
-+ .suite = {
-+ .hash = {
-+ .vecs = NULL,
-+ .count = 0
-+ }
-+ }
-+ }, {
- .alg = "ansi_cprng",
- .test = alg_test_cprng,
- .fips_allowed = 1,
-@@ -1623,6 +1668,30 @@ static const struct alg_test_desc alg_test_descs[] = {
- }
- }
- }, {
-+ .alg = "cryptd(__driver-ecb-aes-aesni)",
-+ .test = alg_test_null,
-+ .suite = {
-+ .cipher = {
-+ .enc = {
-+ .vecs = NULL,
-+ .count = 0
-+ },
-+ .dec = {
-+ .vecs = NULL,
-+ .count = 0
-+ }
-+ }
-+ }
-+ }, {
-+ .alg = "cryptd(__ghash-pclmulqdqni)",
-+ .test = alg_test_null,
-+ .suite = {
-+ .hash = {
-+ .vecs = NULL,
-+ .count = 0
-+ }
-+ }
-+ }, {
- .alg = "ctr(aes)",
- .test = alg_test_skcipher,
- .fips_allowed = 1,
-@@ -1669,6 +1738,21 @@ static const struct alg_test_desc alg_test_descs[] = {
- }
- }
- }, {
-+ .alg = "ecb(__aes-aesni)",
-+ .test = alg_test_null,
-+ .suite = {
-+ .cipher = {
-+ .enc = {
-+ .vecs = NULL,
-+ .count = 0
-+ },
-+ .dec = {
-+ .vecs = NULL,
-+ .count = 0
-+ }
-+ }
-+ }
-+ }, {
- .alg = "ecb(aes)",
- .test = alg_test_skcipher,
- .fips_allowed = 1,
diff --git a/drm-i915-add-reclaimable-to-page-allocations.patch b/drm-i915-add-reclaimable-to-page-allocations.patch
deleted file mode 100644
index 6014f2c..0000000
--- a/drm-i915-add-reclaimable-to-page-allocations.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From: Linus Torvalds <torvalds@linux-foundation.org>
-Date: Sun, 18 Jul 2010 16:44:37 +0000 (-0700)
-Subject: drm/i915: add 'reclaimable' to i915 self-reclaimable page allocations
-X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=cd9f040df6ce46573760a507cb88192d05d27d86
-
-drm/i915: add 'reclaimable' to i915 self-reclaimable page allocations
-
-The hibernate issues that got fixed in commit 985b823b9192 ("drm/i915:
-fix hibernation since i915 self-reclaim fixes") turn out to have been
-incomplete. Vefa Bicakci tested lots of hibernate cycles, and without
-the __GFP_RECLAIMABLE flag the system eventually fails to resume.
-
-With the flag added, Vefa can apparently hibernate forever (or until he
-gets bored running his automated scripts, whichever comes first).
-
-The reclaimable flag was there originally, and was one of the flags that
-were dropped (unintentionally) by commit 4bdadb978569 ("drm/i915:
-Selectively enable self-reclaim") that introduced all these problems,
-but I didn't want to just blindly add back all the flags in commit
-985b823b9192, and it looked like __GFP_RECLAIM wasn't necessary. It
-clearly was.
-
-I still suspect that there is some subtle reason we're missing that
-causes the problems, but __GFP_RECLAIMABLE is certainly not wrong to use
-in this context, and is what the code historically used. And we have no
-idea what the causes the corruption without it.
-
-Reported-and-tested-by: M. Vefa Bicakci <bicave@superonline.com>
-Cc: Dave Airlie <airlied@gmail.com>
-Cc: Chris Wilson <chris@chris-wilson.co.uk>
-Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
-Cc: Hugh Dickins <hugh.dickins@tiscali.co.uk>
-Cc: stable@kernel.org
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
-
-diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
-index 0743858..8757ecf 100644
---- a/drivers/gpu/drm/i915/i915_gem.c
-+++ b/drivers/gpu/drm/i915/i915_gem.c
-@@ -2241,6 +2241,7 @@ i915_gem_object_get_pages(struct drm_gem_object *obj,
- page = read_cache_page_gfp(mapping, i,
- GFP_HIGHUSER |
- __GFP_COLD |
-+ __GFP_RECLAIMABLE |
- gfpmask);
- if (IS_ERR(page))
- goto err_pages;
diff --git a/drm-i915-fix-hibernate-memory-corruption.patch b/drm-i915-fix-hibernate-memory-corruption.patch
deleted file mode 100644
index a9c2c18..0000000
--- a/drm-i915-fix-hibernate-memory-corruption.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From: Linus Torvalds <torvalds@linux-foundation.org>
-Date: Fri, 2 Jul 2010 00:04:42 +0000 (+1000)
-Subject: drm/i915: fix hibernation since i915 self-reclaim fixes
-X-Git-Tag: v2.6.35-rc4~13
-X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=985b823b919273fe1327d56d2196b4f92e5d0fae
-
-drm/i915: fix hibernation since i915 self-reclaim fixes
-
-Since commit 4bdadb9785696439c6e2b3efe34aa76df1149c83 ("drm/i915:
-Selectively enable self-reclaim"), we've been passing GFP_MOVABLE to the
-i915 page allocator where we weren't before due to some over-eager
-removal of the page mapping gfp_flags games the code used to play.
-
-This caused hibernate on Intel hardware to result in a lot of memory
-corruptions on resume. See for example
-
- http://bugzilla.kernel.org/show_bug.cgi?id=13811
-
-Reported-by: Evengi Golov (in bugzilla)
-Signed-off-by: Dave Airlie <airlied@redhat.com>
-Tested-by: M. Vefa Bicakci <bicave@superonline.com>
-Cc: stable@kernel.org
-Cc: Chris Wilson <chris@chris-wilson.co.uk>
-Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
-Cc: Hugh Dickins <hugh.dickins@tiscali.co.uk>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
-
-diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
-index 9ded3da..0743858 100644
---- a/drivers/gpu/drm/i915/i915_gem.c
-+++ b/drivers/gpu/drm/i915/i915_gem.c
-@@ -2239,7 +2239,7 @@ i915_gem_object_get_pages(struct drm_gem_object *obj,
- mapping = inode->i_mapping;
- for (i = 0; i < page_count; i++) {
- page = read_cache_page_gfp(mapping, i,
-- mapping_gfp_mask (mapping) |
-+ GFP_HIGHUSER |
- __GFP_COLD |
- gfpmask);
- if (IS_ERR(page))
diff --git a/drm-nouveau-nva3-noaccel.patch b/drm-nouveau-nva3-noaccel.patch
new file mode 100644
index 0000000..505c724
--- /dev/null
+++ b/drm-nouveau-nva3-noaccel.patch
@@ -0,0 +1,105 @@
+From 030e105efc9a29c7d34fb59fb0e0a40e54178299 Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs@redhat.com>
+Date: Wed, 30 Jun 2010 13:34:05 +1000
+Subject: [PATCH] drm/nouveau: disable acceleration on NVA3/NVA5/NVA8 by default
+
+There's an GPU lockup problem for which the cause is currently unknown
+on these chipsets.
+
+Until it's resolved, it's better to leave the user with a working system
+without acceleration than to have random lockups.
+
+With this patch, acceleration will be off by default if a known problem
+chipset is detected, but can be re-enabled with nouveau.noaccel=0 on
+the kernel commandline.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+
+[ cebbert@redhat.com : Backport to F12 and fix some module parameter descriptions. ]
+---
+
+--- a/drivers/gpu/drm/nouveau/nouveau_drv.c
++++ b/drivers/gpu/drm/nouveau/nouveau_drv.c
+@@ -75,11 +75,11 @@ int nouveau_ignorelid = 0;
+ int nouveau_ignorelid = 0;
+ module_param_named(ignorelid, nouveau_ignorelid, int, 0400);
+
+-MODULE_PARM_DESC(noagp, "Disable all acceleration");
++MODULE_PARM_DESC(noaccel, "Disable all acceleration");
+-int nouveau_noaccel = 0;
++int nouveau_noaccel = -1;
+ module_param_named(noaccel, nouveau_noaccel, int, 0400);
+
+-MODULE_PARM_DESC(noagp, "Disable fbcon acceleration");
++MODULE_PARM_DESC(nofbaccel, "Disable fbcon acceleration");
+ int nouveau_nofbaccel = 0;
+ module_param_named(nofbaccel, nouveau_nofbaccel, int, 0400);
+
+--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
++++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
+@@ -493,6 +493,7 @@ enum nouveau_card_type {
+
+ struct drm_nouveau_private {
+ struct drm_device *dev;
++ bool noaccel;
+ enum {
+ NOUVEAU_CARD_INIT_DOWN,
+ NOUVEAU_CARD_INIT_DONE,
+--- a/drivers/gpu/drm/nouveau/nouveau_state.c
++++ b/drivers/gpu/drm/nouveau/nouveau_state.c
+@@ -435,7 +435,7 @@ nouveau_card_init(struct drm_device *dev)
+ if (ret)
+ goto out_timer;
+
+- if (nouveau_noaccel)
++ if (dev_priv->noaccel)
+ engine->graph.accel_blocked = true;
+ else {
+ /* PGRAPH */
+@@ -491,10 +491,10 @@ out_display:
+ out_irq:
+ drm_irq_uninstall(dev);
+ out_fifo:
+- if (!nouveau_noaccel)
++ if (!dev_priv->noaccel)
+ engine->fifo.takedown(dev);
+ out_graph:
+- if (!nouveau_noaccel)
++ if (!dev_priv->noaccel)
+ engine->graph.takedown(dev);
+ out_fb:
+ engine->fb.takedown(dev);
+@@ -532,7 +532,7 @@ static void nouveau_card_takedown(struct drm_device *dev)
+ dev_priv->channel = NULL;
+ }
+
+- if (!nouveau_noaccel) {
++ if (!dev_priv->noaccel) {
+ engine->fifo.takedown(dev);
+ engine->graph.takedown(dev);
+ }
+@@ -691,6 +691,21 @@ int nouveau_load(struct drm_device *dev, unsigned long flags)
+ NV_INFO(dev, "Detected an NV%2x generation card (0x%08x)\n",
+ dev_priv->card_type, reg0);
+
++ if (nouveau_noaccel == -1) {
++ switch (dev_priv->chipset) {
++ case 0xa3:
++ case 0xa5:
++ case 0xa8:
++ dev_priv->noaccel = true;
++ break;
++ default:
++ dev_priv->noaccel = false;
++ break;
++ }
++ } else {
++ dev_priv->noaccel = (nouveau_noaccel != 0);
++ }
++
+ /* map larger RAMIN aperture on NV40 cards */
+ dev_priv->ramin = NULL;
+ if (dev_priv->card_type >= NV_40) {
+--
+1.7.2
+
diff --git a/drm-upgrayed-fixes.patch b/drm-upgrayed-fixes.patch
new file mode 100644
index 0000000..e437dc2
--- /dev/null
+++ b/drm-upgrayed-fixes.patch
@@ -0,0 +1,1092 @@
+commit 9b86cec953ee8ae21be2183f34b8c8d2fcf14ecb
+Author: Alex Deucher <alexdeucher@gmail.com>
+Date: Thu Feb 11 10:47:52 2010 -0500
+
+ drm/radeon/kms: remove HDP flushes from fence emit (v2)
+
+ r600_ioctl_wait_idle() now handles this.
+
+ v2: update blit fence counts
+
+ Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 817dbb17e5e8fcdfb7bb3d18f3ceb15078dd6050
+Author: Dave Airlie <airlied@redhat.com>
+Date: Wed Mar 3 13:22:20 2010 +1000
+
+ drm/radeon: Add asic hook for dma copy to r200 cards.
+
+ r200 cards have dma engine which can be used to tranfer data
+ between vram and system memory.
+
+ r300 dma engine registers match r200 dma engine. Enabling
+ dma copy for r200 is simple as hooking r200 asic to already
+ existing function r300_copy_dma.
+
+ Rename r300_dma_copy to r200_dma_copyto reflect that supports
+ starts from r200 cards.
+
+ v2: Created a new asic object for r200 cards.
+
+ Signed-off-by: Pauli Nieminen <suokkos@gmail.com>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+ Conflicts:
+
+ drivers/gpu/drm/radeon/r300.c
+ drivers/gpu/drm/radeon/radeon_asic.h
+
+commit 30988e41d355e2011d1a340d6b889deeceeb447d
+Author: Pauli Nieminen <suokkos@gmail.com>
+Date: Thu Feb 11 17:55:35 2010 +0000
+
+ drm/radeon/kms: Create asic structure for r300 pcie cards.
+
+ Setting global asic structure to point to different function
+ would cause problem in system where is multiple r300 cards
+ with different bus type.
+
+ r300_asic_pcie is just copy from r300_asic with gart tlb
+ functions replaced with pcie versions.
+
+ Signed-off-by: Pauli Nieminen <suokkos@gmail.com>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 0faed138b285ef54c27a6c17016d8ff718c40113
+Author: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Fri Feb 12 09:30:00 2010 -0800
+
+ drm/i915: give up on 8xx lid status
+
+ These old machines more often than not lie about their lid state. So
+ don't use it to detect LVDS presence, but leave the event handler to
+ deal with lid open/close, when we might need to reset the mode.
+
+ Fixes kernel bug #15248
+
+ Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+ Cc: stable@kernel.org
+ Signed-off-by: Eric Anholt <eric@anholt.net>
+
+commit 19d2051901dc28cf96d2b29e5f5c5f6725e90105
+Author: Jerome Glisse <jglisse@redhat.com>
+Date: Fri Feb 26 19:14:12 2010 +0000
+
+ drm/radeon/kms: initialize set_surface_reg reg for rs600 asic
+
+ rs600 asic was missing set_surface_reg callback leading to
+ oops.
+
+ Signed-off-by: Jerome Glisse <jglisse@redhat.com>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 884d6cda747259e5ba56c00cdc8a5406a45209c9
+Author: Dave Airlie <airlied@redhat.com>
+Date: Thu Feb 11 14:28:58 2010 +1000
+
+ drm/kms: fix fb_changed = true else statement
+
+ a patch from Roel was wrong, fix this properly, really
+ if the fb ptrs are different fb changed shuold be true.
+
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit b6428034e4bc7c9d57d1a7394a4d77fc80737cf4
+Author: Alex Deucher <alexdeucher@gmail.com>
+Date: Tue Feb 23 21:56:12 2010 -0500
+
+ drm/radeon/kms/atom: fix shr/shl ops
+
+ The whole attribute table is valid for
+ shr/shl ops.
+
+ Fixes fdo bug 26668
+
+ Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
+ Cc: stable@kernel.org
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 93e49a04b1118c8036ccba855c1b8b095fd6b51b
+Author: Maarten Maathuis <madman2003@gmail.com>
+Date: Sat Feb 20 03:22:21 2010 +0100
+
+ drm/ttm: handle OOM in ttm_tt_swapout
+
+ - Without this change I get a general protection fault.
+ - Also use PTR_ERR where applicable.
+
+ Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
+ Reviewed-by: Dave Airlie <airlied@redhat.com>
+ Acked-by: Thomas Hellstrom <thellstrom@vmware.com>
+ Cc: stable@kernel.org
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 36e437d37c849da2ad35d4ba3c0662d8a06f9f9f
+Author: Zhang Rui <rui.zhang@intel.com>
+Date: Tue Feb 16 04:16:55 2010 -0500
+
+ ACPI, i915: blacklist Clevo M5x0N bad_lid state
+
+ Wrong Lid state reported.
+ Need to blacklist this machine for LVDS detection.
+
+ Signed-off-by: Zhang Rui <rui.zhang@intel.com>
+ Signed-off-by: Len Brown <len.brown@intel.com>
+
+commit 5bf1252153707877ae62bef73fe00731972ef18b
+Author: Adam Jackson <ajax@redhat.com>
+Date: Mon Feb 15 22:15:39 2010 +0000
+
+ drm/edid: Fix interlaced detailed timings to be frame size, not field.
+
+ cf. https://bugzilla.redhat.com/show_bug.cgi?id=533561
+
+ Signed-off-by: Adam Jackson <ajax@redhat.com>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 268d51cd56bcf861bd668163c1b618c96d8b3701
+Author: Rafael J. Wysocki <rjw@sisk.pl>
+Date: Thu Feb 18 23:06:27 2010 +0100
+
+ i915 / PM: Fix hibernate regression caused by suspend/resume splitting
+
+ Commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
+ while aborting hibernation) attempted to fix a regression introduced
+ by commit cbda12d77ea590082edb6d30bd342a67ebc459e0 (drm/i915:
+ implement new pm ops for i915), but it went too far trying to split
+ the freeze/suspend and resume/thaw parts of the code. As a result,
+ it introduced another regression, which only is visible on some systems.
+
+ Fix the problem by merging i915_drm_suspend() with
+ i915_drm_freeze() and moving some code from i915_resume()
+ into i915_drm_thaw(), so that intel_opregion_free() and
+ intel_opregion_init() are also executed in the freeze and thaw code
+ paths, respectively.
+
+ Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+ Reported-and-tested-by: Pedro Ribeiro <pedrib@gmail.com>
+ Tested-by: Tino Keitel <tino.keitel@tikei.de>
+ Acked-by: Eric Anholt <eric@anholt.net>
+ Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+
+commit 8d205562d42d397086d829ba4b8f3911c3dca682
+Author: Francisco Jerez <currojerez@riseup.net>
+Date: Sat Feb 20 07:30:15 2010 +1000
+
+ drm/ttm: fix caching problem on non-PAT systems.
+
+ http://bugzilla.kernel.org/show_bug.cgi?id=15328
+
+ This fixes a serious regression on AGP/non-PAT systems, where
+ pages were ending up in the wrong state and slowing down the
+ whole system.
+
+ [airlied: taken this from the bug as the other option is to revert
+ the change which caused it].
+
+ Tested-by: John W. Linville (in bug).
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 7a2bb26f41ceb9b17805dcae93311004e03bd1d0
+Author: Dave Airlie <airlied@redhat.com>
+Date: Sat Feb 20 09:17:18 2010 +1000
+
+ drm/radeon: bump the UMS driver version number to indicate rv740 fix
+
+ This lets UMS userspace know the rv740 fix is in. For KMS we can
+ consider the kernel release to be the v2.0.0 release so we don't need the
+ bump there.
+
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 211dc7044003e3ed8c7a2e2b646bf6937b921960
+Author: Jerome Glisse <jglisse@redhat.com>
+Date: Thu Feb 18 13:13:29 2010 +0000
+
+ drm/radeon/kms: free fence IB if it wasn't emited at IB free time
+
+ If at IB free time fence wasn't emited that means the IB wasn't
+ scheduled because an error occured somewhere, thus we can free
+ then fence and mark the IB as free.
+
+ Signed-off-by: Jerome Glisse <jglisse@redhat.com>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit b2449d6d4de19459d616011fbed87aaa485f5e71
+Author: Alex Deucher <alexdeucher@gmail.com>
+Date: Fri Feb 19 16:07:02 2010 -0500
+
+ drm/radeon/rv740: fix backend setup
+
+ This patch fixes occlusion queries and rendering errors
+ on rv740 boards. Hardcoding the backend map is not an optimal
+ solution, but a better fix is being worked on.
+
+ Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 79b5531abdad5c266e87a5c35975e5a92f4aba20
+Author: Alex Deucher <alexdeucher@gmail.com>
+Date: Fri Feb 19 02:13:56 2010 -0500
+
+ drm/radeon/kms: fix shared ddc detection
+
+ Just compare the i2c id since the i2c structs
+ may be slighly different.
+
+ Fixes fdo bug 26616.
+
+ Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit d2ffb93351a506acdfede450778964eb862e63b7
+Author: Alex Deucher <alexdeucher@gmail.com>
+Date: Thu Feb 18 14:14:58 2010 -0500
+
+ drm/radeon/kms/rs600: add connector quirk
+
+ rs600 board lists DVI port as HDMI.
+
+ Fixes fdo bug 26605
+
+ Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
+index 7d0f00a..f2aaf39 100644
+--- a/drivers/gpu/drm/drm_crtc_helper.c
++++ b/drivers/gpu/drm/drm_crtc_helper.c
+@@ -836,11 +836,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+ mode_changed = true;
+ } else if (set->fb == NULL) {
+ mode_changed = true;
+- } else if ((set->fb->bits_per_pixel !=
+- set->crtc->fb->bits_per_pixel) ||
+- set->fb->depth != set->crtc->fb->depth)
+- fb_changed = true;
+- else
++ } else
+ fb_changed = true;
+ }
+
+diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
+index f41e91c..f97e7c4 100644
+--- a/drivers/gpu/drm/drm_edid.c
++++ b/drivers/gpu/drm/drm_edid.c
+@@ -598,6 +598,50 @@ struct drm_display_mode *drm_mode_std(struct drm_device *dev,
+ return mode;
+ }
+
++/*
++ * EDID is delightfully ambiguous about how interlaced modes are to be
++ * encoded. Our internal representation is of frame height, but some
++ * HDTV detailed timings are encoded as field height.
++ *
++ * The format list here is from CEA, in frame size. Technically we
++ * should be checking refresh rate too. Whatever.
++ */
++static void
++drm_mode_do_interlace_quirk(struct drm_display_mode *mode,
++ struct detailed_pixel_timing *pt)
++{
++ int i;
++ static const struct {
++ int w, h;
++ } cea_interlaced[] = {
++ { 1920, 1080 },
++ { 720, 480 },
++ { 1440, 480 },
++ { 2880, 480 },
++ { 720, 576 },
++ { 1440, 576 },
++ { 2880, 576 },
++ };
++ static const int n_sizes =
++ sizeof(cea_interlaced)/sizeof(cea_interlaced[0]);
++
++ if (!(pt->misc & DRM_EDID_PT_INTERLACED))
++ return;
++
++ for (i = 0; i < n_sizes; i++) {
++ if ((mode->hdisplay == cea_interlaced[i].w) &&
++ (mode->vdisplay == cea_interlaced[i].h / 2)) {
++ mode->vdisplay *= 2;
++ mode->vsync_start *= 2;
++ mode->vsync_end *= 2;
++ mode->vtotal *= 2;
++ mode->vtotal |= 1;
++ }
++ }
++
++ mode->flags |= DRM_MODE_FLAG_INTERLACE;
++}
++
+ /**
+ * drm_mode_detailed - create a new mode from an EDID detailed timing section
+ * @dev: DRM device (needed to create new mode)
+@@ -680,8 +724,7 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
+
+ drm_mode_set_name(mode);
+
+- if (pt->misc & DRM_EDID_PT_INTERLACED)
+- mode->flags |= DRM_MODE_FLAG_INTERLACE;
++ drm_mode_do_interlace_quirk(mode, pt);
+
+ if (quirks & EDID_QUIRK_DETAILED_SYNC_PP) {
+ pt->misc |= DRM_EDID_PT_HSYNC_POSITIVE | DRM_EDID_PT_VSYNC_POSITIVE;
+diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
+index 79beffc..cf4cb3e 100644
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -176,6 +176,8 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
+
+ static int i915_drm_freeze(struct drm_device *dev)
+ {
++ struct drm_i915_private *dev_priv = dev->dev_private;
++
+ pci_save_state(dev->pdev);
+
+ /* If KMS is active, we do the leavevt stuff here */
+@@ -191,17 +193,12 @@ static int i915_drm_freeze(struct drm_device *dev)
+
+ i915_save_state(dev);
+
+- return 0;
+-}
+-
+-static void i915_drm_suspend(struct drm_device *dev)
+-{
+- struct drm_i915_private *dev_priv = dev->dev_private;
+-
+ intel_opregion_free(dev, 1);
+
+ /* Modeset on resume, not lid events */
+ dev_priv->modeset_on_lid = 0;
++
++ return 0;
+ }
+
+ static int i915_suspend(struct drm_device *dev, pm_message_t state)
+@@ -221,8 +218,6 @@ static int i915_suspend(struct drm_device *dev, pm_message_t state)
+ if (error)
+ return error;
+
+- i915_drm_suspend(dev);
+-
+ if (state.event == PM_EVENT_SUSPEND) {
+ /* Shut down the device */
+ pci_disable_device(dev->pdev);
+@@ -237,6 +232,10 @@ static int i915_drm_thaw(struct drm_device *dev)
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int error = 0;
+
++ i915_restore_state(dev);
++
++ intel_opregion_init(dev, 1);
++
+ /* KMS EnterVT equivalent */
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+ mutex_lock(&dev->struct_mutex);
+@@ -263,10 +262,6 @@ static int i915_resume(struct drm_device *dev)
+
+ pci_set_master(dev->pdev);
+
+- i915_restore_state(dev);
+-
+- intel_opregion_init(dev, 1);
+-
+ return i915_drm_thaw(dev);
+ }
+
+@@ -423,8 +418,6 @@ static int i915_pm_suspend(struct device *dev)
+ if (error)
+ return error;
+
+- i915_drm_suspend(drm_dev);
+-
+ pci_disable_device(pdev);
+ pci_set_power_state(pdev, PCI_D3hot);
+
+@@ -464,13 +457,8 @@ static int i915_pm_poweroff(struct device *dev)
+ {
+ struct pci_dev *pdev = to_pci_dev(dev);
+ struct drm_device *drm_dev = pci_get_drvdata(pdev);
+- int error;
+-
+- error = i915_drm_freeze(drm_dev);
+- if (!error)
+- i915_drm_suspend(drm_dev);
+
+- return error;
++ return i915_drm_freeze(drm_dev);
+ }
+
+ const struct dev_pm_ops i915_pm_ops = {
+diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
+index b1d0acb..93031a7 100644
+--- a/drivers/gpu/drm/i915/intel_lvds.c
++++ b/drivers/gpu/drm/i915/intel_lvds.c
+@@ -636,6 +636,13 @@ static const struct dmi_system_id bad_lid_status[] = {
+ DMI_MATCH(DMI_PRODUCT_NAME, "PC-81005"),
+ },
+ },
++ {
++ .ident = "Clevo M5x0N",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "CLEVO Co."),
++ DMI_MATCH(DMI_BOARD_NAME, "M5x0N"),
++ },
++ },
+ { }
+ };
+
+@@ -648,8 +655,15 @@ static const struct dmi_system_id bad_lid_status[] = {
+ */
+ static enum drm_connector_status intel_lvds_detect(struct drm_connector *connector)
+ {
++ struct drm_device *dev = connector->dev;
+ enum drm_connector_status status = connector_status_connected;
+
++ /* ACPI lid methods were generally unreliable in this generation, so
++ * don't even bother.
++ */
++ if (IS_I8XX(dev))
++ return connector_status_connected;
++
+ if (!dmi_check_system(bad_lid_status) && !acpi_lid_open())
+ status = connector_status_disconnected;
+
+diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
+index 592ce91..4362f82 100644
+--- a/drivers/gpu/drm/radeon/atom.c
++++ b/drivers/gpu/drm/radeon/atom.c
+@@ -882,8 +882,6 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
+ uint8_t attr = U8((*ptr)++), shift;
+ uint32_t saved, dst;
+ int dptr = *ptr;
+- attr &= 0x38;
+- attr |= atom_def_dst[attr >> 3] << 6;
+ SDEBUG(" dst: ");
+ dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
+ shift = atom_get_src(ctx, attr, ptr);
+@@ -898,8 +896,6 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
+ uint8_t attr = U8((*ptr)++), shift;
+ uint32_t saved, dst;
+ int dptr = *ptr;
+- attr &= 0x38;
+- attr |= atom_def_dst[attr >> 3] << 6;
+ SDEBUG(" dst: ");
+ dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
+ shift = atom_get_src(ctx, attr, ptr);
+diff --git a/drivers/gpu/drm/radeon/r200.c b/drivers/gpu/drm/radeon/r200.c
+index ff1e0cd..1146c99 100644
+--- a/drivers/gpu/drm/radeon/r200.c
++++ b/drivers/gpu/drm/radeon/r200.c
+@@ -31,6 +31,7 @@
+ #include "radeon_reg.h"
+ #include "radeon.h"
+
++#include "r100d.h"
+ #include "r200_reg_safe.h"
+
+ #include "r100_track.h"
+@@ -79,6 +80,51 @@ static int r200_get_vtx_size_0(uint32_t vtx_fmt_0)
+ return vtx_size;
+ }
+
++int r200_copy_dma(struct radeon_device *rdev,
++ uint64_t src_offset,
++ uint64_t dst_offset,
++ unsigned num_pages,
++ struct radeon_fence *fence)
++{
++ uint32_t size;
++ uint32_t cur_size;
++ int i, num_loops;
++ int r = 0;
++
++ /* radeon pitch is /64 */
++ size = num_pages << PAGE_SHIFT;
++ num_loops = DIV_ROUND_UP(size, 0x1FFFFF);
++ r = radeon_ring_lock(rdev, num_loops * 4 + 64);
++ if (r) {
++ DRM_ERROR("radeon: moving bo (%d).\n", r);
++ return r;
++ }
++ /* Must wait for 2D idle & clean before DMA or hangs might happen */
++ radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0));
++ radeon_ring_write(rdev, (1 << 16));
++ for (i = 0; i < num_loops; i++) {
++ cur_size = size;
++ if (cur_size > 0x1FFFFF) {
++ cur_size = 0x1FFFFF;
++ }
++ size -= cur_size;
++ radeon_ring_write(rdev, PACKET0(0x720, 2));
++ radeon_ring_write(rdev, src_offset);
++ radeon_ring_write(rdev, dst_offset);
++ radeon_ring_write(rdev, cur_size | (1 << 31) | (1 << 30));
++ src_offset += cur_size;
++ dst_offset += cur_size;
++ }
++ radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0));
++ radeon_ring_write(rdev, RADEON_WAIT_DMA_GUI_IDLE);
++ if (fence) {
++ r = radeon_fence_emit(rdev, fence);
++ }
++ radeon_ring_unlock_commit(rdev);
++ return r;
++}
++
++
+ static int r200_get_vtx_size_1(uint32_t vtx_fmt_1)
+ {
+ int vtx_size, i, tex_size;
+diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
+index 43b55a0..6516cd6 100644
+--- a/drivers/gpu/drm/radeon/r300.c
++++ b/drivers/gpu/drm/radeon/r300.c
+@@ -198,50 +198,6 @@ void r300_fence_ring_emit(struct radeon_device *rdev,
+ radeon_ring_write(rdev, RADEON_SW_INT_FIRE);
+ }
+
+-int r300_copy_dma(struct radeon_device *rdev,
+- uint64_t src_offset,
+- uint64_t dst_offset,
+- unsigned num_pages,
+- struct radeon_fence *fence)
+-{
+- uint32_t size;
+- uint32_t cur_size;
+- int i, num_loops;
+- int r = 0;
+-
+- /* radeon pitch is /64 */
+- size = num_pages << PAGE_SHIFT;
+- num_loops = DIV_ROUND_UP(size, 0x1FFFFF);
+- r = radeon_ring_lock(rdev, num_loops * 4 + 64);
+- if (r) {
+- DRM_ERROR("radeon: moving bo (%d).\n", r);
+- return r;
+- }
+- /* Must wait for 2D idle & clean before DMA or hangs might happen */
+- radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0 ));
+- radeon_ring_write(rdev, (1 << 16));
+- for (i = 0; i < num_loops; i++) {
+- cur_size = size;
+- if (cur_size > 0x1FFFFF) {
+- cur_size = 0x1FFFFF;
+- }
+- size -= cur_size;
+- radeon_ring_write(rdev, PACKET0(0x720, 2));
+- radeon_ring_write(rdev, src_offset);
+- radeon_ring_write(rdev, dst_offset);
+- radeon_ring_write(rdev, cur_size | (1 << 31) | (1 << 30));
+- src_offset += cur_size;
+- dst_offset += cur_size;
+- }
+- radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0));
+- radeon_ring_write(rdev, RADEON_WAIT_DMA_GUI_IDLE);
+- if (fence) {
+- r = radeon_fence_emit(rdev, fence);
+- }
+- radeon_ring_unlock_commit(rdev);
+- return r;
+-}
+-
+ void r300_ring_start(struct radeon_device *rdev)
+ {
+ unsigned gb_tile_config;
+diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
+index 91f5af9..526b3ec 100644
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -1797,8 +1797,6 @@ void r600_fence_ring_emit(struct radeon_device *rdev,
+ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1));
+ radeon_ring_write(rdev, ((rdev->fence_drv.scratch_reg - PACKET3_SET_CONFIG_REG_OFFSET) >> 2));
+ radeon_ring_write(rdev, fence->seq);
+- radeon_ring_write(rdev, PACKET0(R_005480_HDP_MEM_COHERENCY_FLUSH_CNTL, 0));
+- radeon_ring_write(rdev, 1);
+ /* CP_INTERRUPT packet 3 no longer exists, use packet 0 */
+ radeon_ring_write(rdev, PACKET0(CP_INT_STATUS, 0));
+ radeon_ring_write(rdev, RB_INT_STAT);
+diff --git a/drivers/gpu/drm/radeon/r600_blit_kms.c b/drivers/gpu/drm/radeon/r600_blit_kms.c
+index ec49dad..de8bbbc 100644
+--- a/drivers/gpu/drm/radeon/r600_blit_kms.c
++++ b/drivers/gpu/drm/radeon/r600_blit_kms.c
+@@ -576,9 +576,9 @@ int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes)
+ ring_size = num_loops * dwords_per_loop;
+ /* set default + shaders */
+ ring_size += 40; /* shaders + def state */
+- ring_size += 12; /* fence emit for VB IB */
++ ring_size += 10; /* fence emit for VB IB */
+ ring_size += 5; /* done copy */
+- ring_size += 12; /* fence emit for done copy */
++ ring_size += 10; /* fence emit for done copy */
+ r = radeon_ring_lock(rdev, ring_size);
+ if (r)
+ return r;
+diff --git a/drivers/gpu/drm/radeon/r600_cp.c b/drivers/gpu/drm/radeon/r600_cp.c
+index 6d5a711..75bcf35 100644
+--- a/drivers/gpu/drm/radeon/r600_cp.c
++++ b/drivers/gpu/drm/radeon/r600_cp.c
+@@ -1428,9 +1428,12 @@ static void r700_gfx_init(struct drm_device *dev,
+
+ gb_tiling_config |= R600_BANK_SWAPS(1);
+
+- backend_map = r700_get_tile_pipe_to_backend_map(dev_priv->r600_max_tile_pipes,
+- dev_priv->r600_max_backends,
+- (0xff << dev_priv->r600_max_backends) & 0xff);
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV740)
++ backend_map = 0x28;
++ else
++ backend_map = r700_get_tile_pipe_to_backend_map(dev_priv->r600_max_tile_pipes,
++ dev_priv->r600_max_backends,
++ (0xff << dev_priv->r600_max_backends) & 0xff);
+ gb_tiling_config |= R600_BACKEND_MAP(backend_map);
+
+ cc_gc_shader_pipe_config =
+diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
+index 05ee1ae..afb3ddb 100644
+--- a/drivers/gpu/drm/radeon/radeon_asic.h
++++ b/drivers/gpu/drm/radeon/radeon_asic.h
+@@ -43,7 +43,7 @@ void radeon_atom_set_memory_clock(struct radeon_device *rdev, uint32_t mem_clock
+ void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable);
+
+ /*
+- * r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280
++ * r100,rv100,rs100,rv200,rs200
+ */
+ extern int r100_init(struct radeon_device *rdev);
+ extern void r100_fini(struct radeon_device *rdev);
+@@ -120,6 +120,51 @@ static struct radeon_asic r100_asic = {
+ .ioctl_wait_idle = NULL,
+ };
+
++/*
++ * r200,rv250,rs300,rv280
++ */
++extern int r200_copy_dma(struct radeon_device *rdev,
++ uint64_t src_offset,
++ uint64_t dst_offset,
++ unsigned num_pages,
++ struct radeon_fence *fence);
++static struct radeon_asic r200_asic = {
++ .init = &r100_init,
++ .fini = &r100_fini,
++ .suspend = &r100_suspend,
++ .resume = &r100_resume,
++ .vga_set_state = &r100_vga_set_state,
++ .gpu_reset = &r100_gpu_reset,
++ .gart_tlb_flush = &r100_pci_gart_tlb_flush,
++ .gart_set_page = &r100_pci_gart_set_page,
++ .cp_commit = &r100_cp_commit,
++ .ring_start = &r100_ring_start,
++ .ring_test = &r100_ring_test,
++ .ring_ib_execute = &r100_ring_ib_execute,
++ .irq_set = &r100_irq_set,
++ .irq_process = &r100_irq_process,
++ .get_vblank_counter = &r100_get_vblank_counter,
++ .fence_ring_emit = &r100_fence_ring_emit,
++ .cs_parse = &r100_cs_parse,
++ .copy_blit = &r100_copy_blit,
++ .copy_dma = &r200_copy_dma,
++ .copy = &r100_copy_blit,
++ .get_engine_clock = &radeon_legacy_get_engine_clock,
++ .set_engine_clock = &radeon_legacy_set_engine_clock,
++ .get_memory_clock = &radeon_legacy_get_memory_clock,
++ .set_memory_clock = NULL,
++ .set_pcie_lanes = NULL,
++ .set_clock_gating = &radeon_legacy_set_clock_gating,
++ .set_surface_reg = r100_set_surface_reg,
++ .clear_surface_reg = r100_clear_surface_reg,
++ .bandwidth_update = &r100_bandwidth_update,
++ .hpd_init = &r100_hpd_init,
++ .hpd_fini = &r100_hpd_fini,
++ .hpd_sense = &r100_hpd_sense,
++ .hpd_set_polarity = &r100_hpd_set_polarity,
++ .ioctl_wait_idle = NULL,
++};
++
+
+ /*
+ * r300,r350,rv350,rv380
+@@ -138,11 +183,6 @@ extern int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t
+ extern uint32_t rv370_pcie_rreg(struct radeon_device *rdev, uint32_t reg);
+ extern void rv370_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
+ extern void rv370_set_pcie_lanes(struct radeon_device *rdev, int lanes);
+-extern int r300_copy_dma(struct radeon_device *rdev,
+- uint64_t src_offset,
+- uint64_t dst_offset,
+- unsigned num_pages,
+- struct radeon_fence *fence);
+ static struct radeon_asic r300_asic = {
+ .init = &r300_init,
+ .fini = &r300_fini,
+@@ -162,7 +202,45 @@ static struct radeon_asic r300_asic = {
+ .fence_ring_emit = &r300_fence_ring_emit,
+ .cs_parse = &r300_cs_parse,
+ .copy_blit = &r100_copy_blit,
+- .copy_dma = &r300_copy_dma,
++ .copy_dma = &r200_copy_dma,
++ .copy = &r100_copy_blit,
++ .get_engine_clock = &radeon_legacy_get_engine_clock,
++ .set_engine_clock = &radeon_legacy_set_engine_clock,
++ .get_memory_clock = &radeon_legacy_get_memory_clock,
++ .set_memory_clock = NULL,
++ .set_pcie_lanes = &rv370_set_pcie_lanes,
++ .set_clock_gating = &radeon_legacy_set_clock_gating,
++ .set_surface_reg = r100_set_surface_reg,
++ .clear_surface_reg = r100_clear_surface_reg,
++ .bandwidth_update = &r100_bandwidth_update,
++ .hpd_init = &r100_hpd_init,
++ .hpd_fini = &r100_hpd_fini,
++ .hpd_sense = &r100_hpd_sense,
++ .hpd_set_polarity = &r100_hpd_set_polarity,
++ .ioctl_wait_idle = NULL,
++};
++
++
++static struct radeon_asic r300_asic_pcie = {
++ .init = &r300_init,
++ .fini = &r300_fini,
++ .suspend = &r300_suspend,
++ .resume = &r300_resume,
++ .vga_set_state = &r100_vga_set_state,
++ .gpu_reset = &r300_gpu_reset,
++ .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
++ .gart_set_page = &rv370_pcie_gart_set_page,
++ .cp_commit = &r100_cp_commit,
++ .ring_start = &r300_ring_start,
++ .ring_test = &r100_ring_test,
++ .ring_ib_execute = &r100_ring_ib_execute,
++ .irq_set = &r100_irq_set,
++ .irq_process = &r100_irq_process,
++ .get_vblank_counter = &r100_get_vblank_counter,
++ .fence_ring_emit = &r300_fence_ring_emit,
++ .cs_parse = &r300_cs_parse,
++ .copy_blit = &r100_copy_blit,
++ .copy_dma = &r200_copy_dma,
+ .copy = &r100_copy_blit,
+ .get_engine_clock = &radeon_legacy_get_engine_clock,
+ .set_engine_clock = &radeon_legacy_set_engine_clock,
+@@ -206,7 +284,7 @@ static struct radeon_asic r420_asic = {
+ .fence_ring_emit = &r300_fence_ring_emit,
+ .cs_parse = &r300_cs_parse,
+ .copy_blit = &r100_copy_blit,
+- .copy_dma = &r300_copy_dma,
++ .copy_dma = &r200_copy_dma,
+ .copy = &r100_copy_blit,
+ .get_engine_clock = &radeon_atom_get_engine_clock,
+ .set_engine_clock = &radeon_atom_set_engine_clock,
+@@ -255,7 +333,7 @@ static struct radeon_asic rs400_asic = {
+ .fence_ring_emit = &r300_fence_ring_emit,
+ .cs_parse = &r300_cs_parse,
+ .copy_blit = &r100_copy_blit,
+- .copy_dma = &r300_copy_dma,
++ .copy_dma = &r200_copy_dma,
+ .copy = &r100_copy_blit,
+ .get_engine_clock = &radeon_legacy_get_engine_clock,
+ .set_engine_clock = &radeon_legacy_set_engine_clock,
+@@ -314,7 +392,7 @@ static struct radeon_asic rs600_asic = {
+ .fence_ring_emit = &r300_fence_ring_emit,
+ .cs_parse = &r300_cs_parse,
+ .copy_blit = &r100_copy_blit,
+- .copy_dma = &r300_copy_dma,
++ .copy_dma = &r200_copy_dma,
+ .copy = &r100_copy_blit,
+ .get_engine_clock = &radeon_atom_get_engine_clock,
+ .set_engine_clock = &radeon_atom_set_engine_clock,
+@@ -322,6 +400,8 @@ static struct radeon_asic rs600_asic = {
+ .set_memory_clock = &radeon_atom_set_memory_clock,
+ .set_pcie_lanes = NULL,
+ .set_clock_gating = &radeon_atom_set_clock_gating,
++ .set_surface_reg = r100_set_surface_reg,
++ .clear_surface_reg = r100_clear_surface_reg,
+ .bandwidth_update = &rs600_bandwidth_update,
+ .hpd_init = &rs600_hpd_init,
+ .hpd_fini = &rs600_hpd_fini,
+@@ -360,8 +440,8 @@ static struct radeon_asic rs690_asic = {
+ .fence_ring_emit = &r300_fence_ring_emit,
+ .cs_parse = &r300_cs_parse,
+ .copy_blit = &r100_copy_blit,
+- .copy_dma = &r300_copy_dma,
+- .copy = &r300_copy_dma,
++ .copy_dma = &r200_copy_dma,
++ .copy = &r200_copy_dma,
+ .get_engine_clock = &radeon_atom_get_engine_clock,
+ .set_engine_clock = &radeon_atom_set_engine_clock,
+ .get_memory_clock = &radeon_atom_get_memory_clock,
+@@ -412,7 +492,7 @@ static struct radeon_asic rv515_asic = {
+ .fence_ring_emit = &r300_fence_ring_emit,
+ .cs_parse = &r300_cs_parse,
+ .copy_blit = &r100_copy_blit,
+- .copy_dma = &r300_copy_dma,
++ .copy_dma = &r200_copy_dma,
+ .copy = &r100_copy_blit,
+ .get_engine_clock = &radeon_atom_get_engine_clock,
+ .set_engine_clock = &radeon_atom_set_engine_clock,
+@@ -455,7 +535,7 @@ static struct radeon_asic r520_asic = {
+ .fence_ring_emit = &r300_fence_ring_emit,
+ .cs_parse = &r300_cs_parse,
+ .copy_blit = &r100_copy_blit,
+- .copy_dma = &r300_copy_dma,
++ .copy_dma = &r200_copy_dma,
+ .copy = &r100_copy_blit,
+ .get_engine_clock = &radeon_atom_get_engine_clock,
+ .set_engine_clock = &radeon_atom_set_engine_clock,
+diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
+index 2dcda61..4d88315 100644
+--- a/drivers/gpu/drm/radeon/radeon_atombios.c
++++ b/drivers/gpu/drm/radeon/radeon_atombios.c
+@@ -206,6 +206,15 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
+ *connector_type = DRM_MODE_CONNECTOR_DVID;
+ }
+
++ /* Asrock RS600 board lists the DVI port as HDMI */
++ if ((dev->pdev->device == 0x7941) &&
++ (dev->pdev->subsystem_vendor == 0x1849) &&
++ (dev->pdev->subsystem_device == 0x7941)) {
++ if ((*connector_type == DRM_MODE_CONNECTOR_HDMIA) &&
++ (supported_device == ATOM_DEVICE_DFP3_SUPPORT))
++ *connector_type = DRM_MODE_CONNECTOR_DVID;
++ }
++
+ /* a-bit f-i90hd - ciaranm on #radeonhd - this board has no DVI */
+ if ((dev->pdev->device == 0x7941) &&
+ (dev->pdev->subsystem_vendor == 0x147b) &&
+diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
+index 2381885..65f8194 100644
+--- a/drivers/gpu/drm/radeon/radeon_connectors.c
++++ b/drivers/gpu/drm/radeon/radeon_connectors.c
+@@ -780,7 +780,7 @@ static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connect
+ * connected and the DVI port disconnected. If the edid doesn't
+ * say HDMI, vice versa.
+ */
+- if (radeon_connector->shared_ddc && connector_status_connected) {
++ if (radeon_connector->shared_ddc && (ret == connector_status_connected)) {
+ struct drm_device *dev = connector->dev;
+ struct drm_connector *list_connector;
+ struct radeon_connector *list_radeon_connector;
+@@ -1060,8 +1060,7 @@ radeon_add_atom_connector(struct drm_device *dev,
+ return;
+ }
+ if (radeon_connector->ddc_bus && i2c_bus->valid) {
+- if (memcmp(&radeon_connector->ddc_bus->rec, i2c_bus,
+- sizeof(struct radeon_i2c_bus_rec)) == 0) {
++ if (radeon_connector->ddc_bus->rec.i2c_id == i2c_bus->i2c_id) {
+ radeon_connector->shared_ddc = true;
+ shared_ddc = true;
+ }
+diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
+index 768b150..767aed8 100644
+--- a/drivers/gpu/drm/radeon/radeon_device.c
++++ b/drivers/gpu/drm/radeon/radeon_device.c
+@@ -329,21 +329,22 @@ int radeon_asic_init(struct radeon_device *rdev)
+ case CHIP_RS100:
+ case CHIP_RV200:
+ case CHIP_RS200:
++ rdev->asic = &r100_asic;
++ break;
+ case CHIP_R200:
+ case CHIP_RV250:
+ case CHIP_RS300:
+ case CHIP_RV280:
+- rdev->asic = &r100_asic;
++ rdev->asic = &r200_asic;
+ break;
+ case CHIP_R300:
+ case CHIP_R350:
+ case CHIP_RV350:
+ case CHIP_RV380:
+- rdev->asic = &r300_asic;
+- if (rdev->flags & RADEON_IS_PCIE) {
+- rdev->asic->gart_tlb_flush = &rv370_pcie_gart_tlb_flush;
+- rdev->asic->gart_set_page = &rv370_pcie_gart_set_page;
+- }
++ if (rdev->flags & RADEON_IS_PCIE)
++ rdev->asic = &r300_asic_pcie;
++ else
++ rdev->asic = &r300_asic;
+ break;
+ case CHIP_R420:
+ case CHIP_R423:
+diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h
+index e137852..c57ad60 100644
+--- a/drivers/gpu/drm/radeon/radeon_drv.h
++++ b/drivers/gpu/drm/radeon/radeon_drv.h
+@@ -106,9 +106,10 @@
+ * 1.29- R500 3D cmd buffer support
+ * 1.30- Add support for occlusion queries
+ * 1.31- Add support for num Z pipes from GET_PARAM
++ * 1.32- fixes for rv740 setup
+ */
+ #define DRIVER_MAJOR 1
+-#define DRIVER_MINOR 31
++#define DRIVER_MINOR 32
+ #define DRIVER_PATCHLEVEL 0
+
+ enum radeon_cp_microcode_version {
+diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
+index 694799f..6579eb4 100644
+--- a/drivers/gpu/drm/radeon/radeon_ring.c
++++ b/drivers/gpu/drm/radeon/radeon_ring.c
+@@ -100,6 +100,8 @@ void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib)
+ if (tmp == NULL) {
+ return;
+ }
++ if (!tmp->fence->emited)
++ radeon_fence_unref(&tmp->fence);
+ mutex_lock(&rdev->ib_pool.mutex);
+ tmp->free = true;
+ mutex_unlock(&rdev->ib_pool.mutex);
+diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
+index 5943d56..0302167 100644
+--- a/drivers/gpu/drm/radeon/rv770.c
++++ b/drivers/gpu/drm/radeon/rv770.c
+@@ -549,9 +549,12 @@ static void rv770_gpu_init(struct radeon_device *rdev)
+
+ gb_tiling_config |= BANK_SWAPS(1);
+
+- backend_map = r700_get_tile_pipe_to_backend_map(rdev->config.rv770.max_tile_pipes,
+- rdev->config.rv770.max_backends,
+- (0xff << rdev->config.rv770.max_backends) & 0xff);
++ if (rdev->family == CHIP_RV740)
++ backend_map = 0x28;
++ else
++ backend_map = r700_get_tile_pipe_to_backend_map(rdev->config.rv770.max_tile_pipes,
++ rdev->config.rv770.max_backends,
++ (0xff << rdev->config.rv770.max_backends) & 0xff);
+ gb_tiling_config |= BACKEND_MAP(backend_map);
+
+ cc_gc_shader_pipe_config =
+diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
+index e2123af..a759170 100644
+--- a/drivers/gpu/drm/ttm/ttm_tt.c
++++ b/drivers/gpu/drm/ttm/ttm_tt.c
+@@ -196,14 +196,15 @@ EXPORT_SYMBOL(ttm_tt_populate);
+
+ #ifdef CONFIG_X86
+ static inline int ttm_tt_set_page_caching(struct page *p,
+- enum ttm_caching_state c_state)
++ enum ttm_caching_state c_old,
++ enum ttm_caching_state c_new)
+ {
+ int ret = 0;
+
+ if (PageHighMem(p))
+ return 0;
+
+- if (get_page_memtype(p) != -1) {
++ if (c_old != tt_cached) {
+ /* p isn't in the default caching state, set it to
+ * writeback first to free its current memtype. */
+
+@@ -212,16 +213,17 @@ static inline int ttm_tt_set_page_caching(struct page *p,
+ return ret;
+ }
+
+- if (c_state == tt_wc)
++ if (c_new == tt_wc)
+ ret = set_memory_wc((unsigned long) page_address(p), 1);
+- else if (c_state == tt_uncached)
++ else if (c_new == tt_uncached)
+ ret = set_pages_uc(p, 1);
+
+ return ret;
+ }
+ #else /* CONFIG_X86 */
+ static inline int ttm_tt_set_page_caching(struct page *p,
+- enum ttm_caching_state c_state)
++ enum ttm_caching_state c_old,
++ enum ttm_caching_state c_new)
+ {
+ return 0;
+ }
+@@ -254,7 +256,9 @@ static int ttm_tt_set_caching(struct ttm_tt *ttm,
+ for (i = 0; i < ttm->num_pages; ++i) {
+ cur_page = ttm->pages[i];
+ if (likely(cur_page != NULL)) {
+- ret = ttm_tt_set_page_caching(cur_page, c_state);
++ ret = ttm_tt_set_page_caching(cur_page,
++ ttm->caching_state,
++ c_state);
+ if (unlikely(ret != 0))
+ goto out_err;
+ }
+@@ -268,7 +272,7 @@ out_err:
+ for (j = 0; j < i; ++j) {
+ cur_page = ttm->pages[j];
+ if (likely(cur_page != NULL)) {
+- (void)ttm_tt_set_page_caching(cur_page,
++ (void)ttm_tt_set_page_caching(cur_page, c_state,
+ ttm->caching_state);
+ }
+ }
+@@ -476,7 +480,7 @@ static int ttm_tt_swapin(struct ttm_tt *ttm)
+ void *from_virtual;
+ void *to_virtual;
+ int i;
+- int ret;
++ int ret = -ENOMEM;
+
+ if (ttm->page_flags & TTM_PAGE_FLAG_USER) {
+ ret = ttm_tt_set_user(ttm, ttm->tsk, ttm->start,
+@@ -495,8 +499,10 @@ static int ttm_tt_swapin(struct ttm_tt *ttm)
+
+ for (i = 0; i < ttm->num_pages; ++i) {
+ from_page = read_mapping_page(swap_space, i, NULL);
+- if (IS_ERR(from_page))
++ if (IS_ERR(from_page)) {
++ ret = PTR_ERR(from_page);
+ goto out_err;
++ }
+ to_page = __ttm_tt_get_page(ttm, i);
+ if (unlikely(to_page == NULL))
+ goto out_err;
+@@ -519,7 +525,7 @@ static int ttm_tt_swapin(struct ttm_tt *ttm)
+ return 0;
+ out_err:
+ ttm_tt_free_alloced_pages(ttm);
+- return -ENOMEM;
++ return ret;
+ }
+
+ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage)
+@@ -531,6 +537,7 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage)
+ void *from_virtual;
+ void *to_virtual;
+ int i;
++ int ret = -ENOMEM;
+
+ BUG_ON(ttm->state != tt_unbound && ttm->state != tt_unpopulated);
+ BUG_ON(ttm->caching_state != tt_cached);
+@@ -553,7 +560,7 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage)
+ 0);
+ if (unlikely(IS_ERR(swap_storage))) {
+ printk(KERN_ERR "Failed allocating swap storage.\n");
+- return -ENOMEM;
++ return PTR_ERR(swap_storage);
+ }
+ } else
+ swap_storage = persistant_swap_storage;
+@@ -565,9 +572,10 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage)
+ if (unlikely(from_page == NULL))
+ continue;
+ to_page = read_mapping_page(swap_space, i, NULL);
+- if (unlikely(to_page == NULL))
++ if (unlikely(IS_ERR(to_page))) {
++ ret = PTR_ERR(to_page);
+ goto out_err;
+-
++ }
+ preempt_disable();
+ from_virtual = kmap_atomic(from_page, KM_USER0);
+ to_virtual = kmap_atomic(to_page, KM_USER1);
+@@ -591,5 +599,5 @@ out_err:
+ if (!persistant_swap_storage)
+ fput(swap_storage);
+
+- return -ENOMEM;
++ return ret;
+ }
diff --git a/drm-upgrayedd.patch b/drm-upgrayedd.patch
index b6bb414..08f039b 100644
--- a/drm-upgrayedd.patch
+++ b/drm-upgrayedd.patch
@@ -817,9 +817,9 @@ index a75ca63..766c468 100644
atomic_inc(&dev->counts[_DRM_STAT_IOCTLS]);
++file_priv->ioctl_count;
@@ -471,7 +502,13 @@ int drm_ioctl(struct inode *inode, struct file *filp,
- goto err_i1;
- }
- }
+ } else
+ memset(kdata, 0, _IOC_SIZE(cmd));
+
- retcode = func(dev, kdata, file_priv);
+ if (ioctl->flags & DRM_UNLOCKED)
+ retcode = func(dev, kdata, file_priv);
@@ -11499,8 +11499,8 @@ index 0e0e4b4..b1d0acb 100644
};
@@ -622,7 +650,7 @@ static enum drm_connector_status intel_lvds_detect(struct drm_connector *connect
- if (IS_I8XX(dev))
- return connector_status_connected;
+ {
+ enum drm_connector_status status = connector_status_connected;
- if (!acpi_lid_open() && !dmi_check_system(bad_lid_status))
+ if (!dmi_check_system(bad_lid_status) && !acpi_lid_open())
diff --git a/ext4-make-sure-the-move_ext-ioctl-can-t-overwrite-append-only-files.patch b/ext4-make-sure-the-move_ext-ioctl-can-t-overwrite-append-only-files.patch
deleted file mode 100644
index 14407a5..0000000
--- a/ext4-make-sure-the-move_ext-ioctl-can-t-overwrite-append-only-files.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 1f5a81e41f8b1a782c68d3843e9ec1bfaadf7d72 Mon Sep 17 00:00:00 2001
-From: Theodore Ts'o <tytso@mit.edu>
-Date: Wed, 2 Jun 2010 22:04:39 -0400
-Subject: ext4: Make sure the MOVE_EXT ioctl can't overwrite append-only files
-
-From: Theodore Ts'o <tytso@mit.edu>
-
-commit 1f5a81e41f8b1a782c68d3843e9ec1bfaadf7d72 upstream.
-
-Dan Roseberg has reported a problem with the MOVE_EXT ioctl. If the
-donor file is an append-only file, we should not allow the operation
-to proceed, lest we end up overwriting the contents of an append-only
-file.
-
-Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-Cc: Dan Rosenberg <dan.j.rosenberg@gmail.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- fs/ext4/move_extent.c | 3 +++
- 1 file changed, 3 insertions(+)
-
---- a/fs/ext4/move_extent.c
-+++ b/fs/ext4/move_extent.c
-@@ -959,6 +959,9 @@ mext_check_arguments(struct inode *orig_
- return -EINVAL;
- }
-
-+ if (IS_IMMUTABLE(donor_inode) || IS_APPEND(donor_inode))
-+ return -EPERM;
-+
- /* Ext4 move extent does not support swapfile */
- if (IS_SWAPFILE(orig_inode) || IS_SWAPFILE(donor_inode)) {
- ext4_debug("ext4 move extent: The argument files should "
diff --git a/irda-correctly-clean-up-self-ias_obj-on-irda_bind-failure.patch b/irda-correctly-clean-up-self-ias_obj-on-irda_bind-failure.patch
new file mode 100644
index 0000000..a36f8af
--- /dev/null
+++ b/irda-correctly-clean-up-self-ias_obj-on-irda_bind-failure.patch
@@ -0,0 +1,35 @@
+From: David S. Miller <davem@davemloft.net>
+Date: Tue, 31 Aug 2010 01:35:24 +0000 (-0700)
+Subject: irda: Correctly clean up self->ias_obj on irda_bind() failure.
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fdavem%2Fnet-2.6.git;a=commitdiff_plain;h=628e300cccaa628d8fb92aa28cb7530a3d5f2257
+
+irda: Correctly clean up self->ias_obj on irda_bind() failure.
+
+If irda_open_tsap() fails, the irda_bind() code tries to destroy
+the ->ias_obj object by hand, but does so wrongly.
+
+In particular, it fails to a) release the hashbin attached to the
+object and b) reset the self->ias_obj pointer to NULL.
+
+Fix both problems by using irias_delete_object() and explicitly
+setting self->ias_obj to NULL, just as irda_release() does.
+
+Reported-by: Tavis Ormandy <taviso@cmpxchg8b.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+
+diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c
+index 79986a6..fd55b51 100644
+--- a/net/irda/af_irda.c
++++ b/net/irda/af_irda.c
+@@ -824,8 +824,8 @@ static int irda_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
+
+ err = irda_open_tsap(self, addr->sir_lsap_sel, addr->sir_name);
+ if (err < 0) {
+- kfree(self->ias_obj->name);
+- kfree(self->ias_obj);
++ irias_delete_object(self->ias_obj);
++ self->ias_obj = NULL;
+ return err;
+ }
+
diff --git a/kernel.spec b/kernel.spec
index 3816cbb..6f54300 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -48,7 +48,7 @@ Summary: The Linux kernel
# reset this by hand to 1 (or to 0 and then use rpmdev-bumpspec).
# scripts/rebase.sh should be made to do that for you, actually.
#
-%global baserelease 158
+%global baserelease 167
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
@@ -60,9 +60,9 @@ Summary: The Linux kernel
%if 0%{?released_kernel}
# Do we have a -stable update to apply?
-%define stable_update 18
+%define stable_update 21
# Is it a -stable RC?
-%define stable_rc 1
+%define stable_rc 0
# Set rpm version accordingly
%if 0%{?stable_update}
%define stablerev .%{stable_update}
@@ -718,13 +718,12 @@ Patch1700: linux-2.6-x86-64-fbdev-primary.patch
# nouveau + drm fixes
Patch1810: drm-upgrayedd.patch
+Patch1811: drm-upgrayed-fixes.patch
Patch1813: drm-radeon-pm.patch
#Patch1814: drm-nouveau.patch
Patch1818: drm-i915-resume-force-mode.patch
Patch1819: drm-intel-big-hammer.patch
Patch1820: drm-intel-no-tv-hotplug.patch
-Patch1821: drm-i915-fix-hibernate-memory-corruption.patch
-Patch1822: drm-i915-add-reclaimable-to-page-allocations.patch
Patch1823: drm-intel-945gm-stability-fixes.patch
# intel drm is all merged upstream
Patch1824: drm-intel-next.patch
@@ -738,6 +737,7 @@ Patch1844: drm-nouveau-kconfig.patch
Patch1845: drm-nouveau-mutex.patch
Patch1846: drm-nouveau-update.patch
Patch1847: drm-nouveau-d620.patch
+Patch1848: drm-nouveau-nva3-noaccel.patch
# kludge to make ich9 e1000 work
Patch2000: linux-2.6-e1000-ich9.patch
@@ -769,7 +769,6 @@ Patch3050: linux-2.6-nfsd4-proots.patch
Patch3051: linux-2.6-nfs4-callback-hidden.patch
# btrfs
-Patch3100: linux-2.6-btrfs-fix-acl.patch
Patch3101: btrfs-prohibit-a-operation-of-changing-acls-mask-when-noacl-mount-option-is-used.patch
# XFS
@@ -800,9 +799,6 @@ Patch12340: ice1712-fix-revo71-mixer-names.patch
# rhbz#572653
Patch12370: linux-2.6-b43_-Rewrite-DMA-Tx-status-handling-sanity-checks.patch
-# rhbz#533746
-Patch12380: ssb_check_for_sprom.patch
-
# backport iwlwifi fixes (thanks, sgruszka!) -- drop when stable catches-up
Patch12391: iwlwifi-reset-card-during-probe.patch
@@ -836,19 +832,16 @@ Patch13030: l2tp-fix-oops-in-pppol2tp_xmit.patch
Patch14020: inotify-fix-inotify-oneshot-support.patch
Patch14030: inotify-send-IN_UNMOUNT-events.patch
-Patch14040: crypto-testmgr-add-null-test-for-aesni.patch
Patch14050: crypto-add-async-hash-testing.patch
-Patch14110: ext4-make-sure-the-move_ext-ioctl-can-t-overwrite-append-only-files.patch
-Patch14115: xfs-prevent-swapext-from-operating-on-write-only-files.patch
-Patch14120: cifs-fix-dns-resolver.patch
-
# Red Hat Bugzilla #610911
Patch14130: kvm-mmu-fix-conflict-access-permissions-in-direct-sp.patch
Patch14140: hid-01-usbhid-initialize-interface-pointers-early-enough.patch
Patch14141: hid-02-fix-suspend-crash-by-moving-initializations-earlier.patch
+Patch14150: irda-correctly-clean-up-self-ias_obj-on-irda_bind-failure.patch
+
Patch19997: xen.pvops.pre.patch
Patch19998: xen.pvops.patch
Patch19999: xen.pvops.post.patch
@@ -1332,7 +1325,6 @@ ApplyPatch linux-2.6-execshield.patch
# xfs
# btrfs
-ApplyPatch linux-2.6-btrfs-fix-acl.patch
ApplyPatch btrfs-prohibit-a-operation-of-changing-acls-mask-when-noacl-mount-option-is-used.patch
# eCryptfs
@@ -1467,6 +1459,7 @@ ApplyPatch linux-2.6-phylib-autoload.patch
ApplyPatch linux-2.6-x86-64-fbdev-primary.patch
# Nouveau DRM + drm fixes
ApplyPatch drm-upgrayedd.patch
+ApplyPatch drm-upgrayed-fixes.patch
#ApplyPatch drm-intel-big-hammer.patch
#ApplyPatch drm-intel-no-tv-hotplug.patch
ApplyOptionalPatch drm-intel-next.patch
@@ -1474,9 +1467,6 @@ ApplyPatch drm-intel-acpi-populate-didl.patch
ApplyPatch drm-intel-make-lvds-work.patch
# gm45 stability fixes
ApplyPatch drm-intel-945gm-stability-fixes.patch
-# hibernation memory corruption fixes
-ApplyPatch drm-i915-fix-hibernate-memory-corruption.patch
-ApplyPatch drm-i915-add-reclaimable-to-page-allocations.patch
ApplyPatch drm-nouveau-g80-ctxprog.patch
ApplyPatch drm-nouveau-tvout-disable.patch
@@ -1484,6 +1474,7 @@ ApplyPatch drm-nouveau-safetile-getparam.patch
ApplyPatch drm-nouveau-kconfig.patch
ApplyPatch drm-nouveau-update.patch
ApplyPatch drm-nouveau-d620.patch
+ApplyPatch drm-nouveau-nva3-noaccel.patch
# linux1394 git patches
#ApplyPatch linux-2.6-firewire-git-update.patch
@@ -1518,9 +1509,6 @@ ApplyPatch ice1712-fix-revo71-mixer-names.patch
# rhbz#572653
ApplyPatch linux-2.6-b43_-Rewrite-DMA-Tx-status-handling-sanity-checks.patch
-# rhbz#533746
-#ApplyPatch ssb_check_for_sprom.patch
-
# backport iwlwifi fixes (thanks, sgruszka!) -- drop when stable catches-up
ApplyPatch iwlwifi-reset-card-during-probe.patch
@@ -1556,25 +1544,18 @@ ApplyPatch l2tp-fix-oops-in-pppol2tp_xmit.patch
ApplyPatch inotify-fix-inotify-oneshot-support.patch
ApplyPatch inotify-send-IN_UNMOUNT-events.patch
-# add tests for aesni module (#571577)
-ApplyPatch crypto-testmgr-add-null-test-for-aesni.patch
# add tests for crypto async hashing (#571577)
ApplyPatch crypto-add-async-hash-testing.patch
-# CVE-2010-2066
-ApplyPatch ext4-make-sure-the-move_ext-ioctl-can-t-overwrite-append-only-files.patch
-# CVE-2010-2266
-#ApplyPatch xfs-prevent-swapext-from-operating-on-write-only-files.patch
-
-# fix DNS resolver build, broken in 2.6.32.17
-#ApplyPatch cifs-fix-dns-resolver.patch
-
ApplyPatch kvm-mmu-fix-conflict-access-permissions-in-direct-sp.patch
# RHBZ #592785
ApplyPatch hid-01-usbhid-initialize-interface-pointers-early-enough.patch
ApplyPatch hid-02-fix-suspend-crash-by-moving-initializations-earlier.patch
+# CVE-2010-2954
+ApplyPatch irda-correctly-clean-up-self-ias_obj-on-irda_bind-failure.patch
+
ApplyPatch xen.pvops.pre.patch
ApplyPatch xen.pvops.patch
ApplyPatch xen.pvops.post.patch
@@ -1586,6 +1567,8 @@ ApplyPatch xen.pvops.post.patch
chmod +x scripts/checkpatch.pl
+touch .scmversion
+
# only deal with configs if we are going to build for the arch
%ifnarch %nobuildarches
@@ -2229,6 +2212,64 @@ fi
%kernel_variant_files -k vmlinux %{with_kdump} kdump
%changelog
+* Thu Sep 02 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.21-167
+- irda-correctly-clean-up-self-ias_obj-on-irda_bind-failure.patch (CVE-2010-2954)
+
+* Fri Aug 27 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.21-166
+- Linux 2.6.32.21
+
+* Wed Aug 25 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.21-165.rc1
+- Linux 2.6.32.21-rc1
+- Drop merged patches:
+ drm-i915-add-reclaimable-to-page-allocations.patch
+ drm-i915-fix-hibernate-memory-corruption.patch
+- Fix up execshield and DRM upgrade patches to apply after 2.6.32.21
+
+* Sat Aug 21 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.20-164
+- Linux 2.6.32.20
+- Drop merged patches:
+ mm-fix-page-table-unmap-for-stack-guard-page-properly.patch
+ mm-fix-up-some-user-visible-effects-of-the-stack-guard-page.patch
+
+* Wed Aug 18 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.19-163
+- Bump version.
+
+* Tue Aug 17 2010 Kyle McMartin <kyle@redhat.com>
+- Touch .scmversion in the kernel top level to prevent scripts/setlocalversion
+ from recursing into our fedpkg git tree and trying to decide whether the
+ kernel git is modified (obviously not, since it's a tarball.) Fixes make
+ local.
+
+* Tue Aug 17 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.19-162
+- Fix fallout from the stack guard page fixes.
+ (mm-fix-page-table-unmap-for-stack-guard-page-properly.patch,
+ mm-fix-up-some-user-visible-effects-of-the-stack-guard-page.patch)
+
+* Sat Aug 14 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.19-161
+- Linux 2.6.32.19
+
+* Fri Aug 13 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.19-160.rc1
+- Linux 2.6.32.19-rc1
+- Comment out patches merged upstream:
+ linux-2.6-btrfs-fix-acl.patch
+ crypto-testmgr-add-null-test-for-aesni.patch
+ ext4-make-sure-the-move_ext-ioctl-can-t-overwrite-append-only-files.patch
+ ext4-fix-freeze-deadlock-under-io.patch
+- Fix linux-2.6-usb-wwan-update.patch to apply after 2.6.32.19
+
+* Tue Aug 10 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.18-159
+- Linux 2.6.32.18
+- Backport nouveau noaccel fix for nva3+ cards from f13.
+- ext4-fix-freeze-deadlock-under-io.patch:
+ Fix deadlock caused by patch in 2.6.32.17
+ (0036-ext4-don-t-return-to-userspace-after-freezing-the-fs.patch)
+
+* Tue Aug 10 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.32.18-158.rc1
+- Bring back drm-upgrayed-fixes.patch, dropped in the
+ 2.6.32.16 update. (#620955)
+- Revert upstream DRM stable fix we already have:
+ drm-i915-give-up-on-8xx-lid-status.patch
+
* Sat Aug 07 2010 Chuck Ebbert <cebbert@redhat.com>
- Linux 2.6.32.18-rc1
- Revert DRM patches from -stable we already have:
diff --git a/linux-2.6-btrfs-fix-acl.patch b/linux-2.6-btrfs-fix-acl.patch
deleted file mode 100644
index 3e015da..0000000
--- a/linux-2.6-btrfs-fix-acl.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -up linux-2.6.32.noarch/fs/btrfs/acl.c.orig linux-2.6.32.noarch/fs/btrfs/acl.c
---- linux-2.6.32.noarch/fs/btrfs/acl.c.orig 2009-12-02 22:51:21.000000000 -0500
-+++ linux-2.6.32.noarch/fs/btrfs/acl.c 2010-01-14 15:36:25.926371944 -0500
-@@ -110,13 +110,15 @@ static int btrfs_set_acl(struct inode *i
-
- switch (type) {
- case ACL_TYPE_ACCESS:
-- mode = inode->i_mode;
-- ret = posix_acl_equiv_mode(acl, &mode);
-- if (ret < 0)
-- return ret;
-- ret = 0;
-- inode->i_mode = mode;
- name = POSIX_ACL_XATTR_ACCESS;
-+ if (acl) {
-+ mode = inode->i_mode;
-+ ret = posix_acl_equiv_mode(acl, &mode);
-+ if (ret < 0)
-+ return ret;
-+ ret = 0;
-+ inode->i_mode = mode;
-+ }
- break;
- case ACL_TYPE_DEFAULT:
- if (!S_ISDIR(inode->i_mode))
diff --git a/linux-2.6-execshield.patch b/linux-2.6-execshield.patch
index 61e444f..8f0edb2 100644
--- a/linux-2.6-execshield.patch
+++ b/linux-2.6-execshield.patch
@@ -737,15 +737,16 @@ index 73f5e4b..814b95f 100644
static void unmap_region(struct mm_struct *mm,
struct vm_area_struct *vma, struct vm_area_struct *prev,
unsigned long start, unsigned long end);
-@@ -389,6 +402,8 @@ static inline void
- __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma,
- struct vm_area_struct *prev, struct rb_node *rb_parent)
+@@ -389,6 +402,9 @@ static inline void
{
+ struct vm_area_struct *next;
+
+ if (vma->vm_flags & VM_EXEC)
+ arch_add_exec_range(mm, vma->vm_end);
++
+ vma->vm_prev = prev;
if (prev) {
- vma->vm_next = prev->vm_next;
- prev->vm_next = vma;
+ next = prev->vm_next;
@@ -491,6 +506,8 @@ __vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma,
rb_erase(&vma->vm_rb, &mm->mm_rb);
if (mm->mmap_cache == vma)
diff --git a/linux-2.6-upstream-reverts.patch b/linux-2.6-upstream-reverts.patch
index 83d0418..81f7983 100644
--- a/linux-2.6-upstream-reverts.patch
+++ b/linux-2.6-upstream-reverts.patch
@@ -1,3 +1,42 @@
+From 7b9c5abee98c54f85bcc04bd4d7ec8d5094c73f4 Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Fri, 12 Feb 2010 09:30:00 -0800
+Subject: drm/i915: give up on 8xx lid status
+
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+
+commit 7b9c5abee98c54f85bcc04bd4d7ec8d5094c73f4 upstream.
+
+These old machines more often than not lie about their lid state. So
+don't use it to detect LVDS presence, but leave the event handler to
+deal with lid open/close, when we might need to reset the mode.
+
+Fixes kernel bug #15248
+
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Cc: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/i915/intel_lvds.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/gpu/drm/i915/intel_lvds.c
++++ b/drivers/gpu/drm/i915/intel_lvds.c
+@@ -648,8 +648,12 @@ static const struct dmi_system_id bad_li
+ */
+ static enum drm_connector_status intel_lvds_detect(struct drm_connector *connector)
+ {
++ struct drm_device *dev = connector->dev;
+ enum drm_connector_status status = connector_status_connected;
+
++ if (IS_I8XX(dev))
++ return connector_status_connected;
++
+ if (!acpi_lid_open() && !dmi_check_system(bad_lid_status))
+ status = connector_status_disconnected;
+
From 6363ee6f496eb7e3b3f78dc105e522c7b496089b Mon Sep 17 00:00:00 2001
From: Zhao Yakui <yakui.zhao@intel.com>
Date: Tue, 24 Nov 2009 09:48:44 +0800
diff --git a/linux-2.6-usb-wwan-update.patch b/linux-2.6-usb-wwan-update.patch
index d6ab3d3..1077e5b 100644
--- a/linux-2.6-usb-wwan-update.patch
+++ b/linux-2.6-usb-wwan-update.patch
@@ -116,7 +116,7 @@ diff -up linux-2.6.32.noarch/drivers/usb/serial/option.c.orig linux-2.6.32.noarc
struct option_port_private {
/* Input endpoints and buffer for this port */
struct urb *in_urbs[N_IN_URB];
-@@ -767,216 +740,28 @@ module_exit(option_exit);
+@@ -767,223 +740,35 @@ module_exit(option_exit);
static int option_probe(struct usb_serial *serial,
const struct usb_device_id *id)
{
@@ -135,6 +135,13 @@ diff -up linux-2.6.32.noarch/drivers/usb/serial/option.c.orig linux-2.6.32.noarc
serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff)
return -ENODEV;
+ /* Don't bind network interfaces on Huawei K3765 & K4505 */
+ if (serial->dev->descriptor.idVendor == HUAWEI_VENDOR_ID &&
+ (serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K3765 ||
+ serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K4505) &&
+ serial->interface->cur_altsetting->desc.bInterfaceNumber == 1)
+ return -ENODEV;
+
- data = serial->private = kzalloc(sizeof(struct option_intf_private), GFP_KERNEL);
+ data = serial->private = kzalloc(sizeof(struct usb_wwan_intf_private), GFP_KERNEL);
if (!data)
diff --git a/sources b/sources
index f45649a..aa75510 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,2 @@
260551284ac224c3a43c4adac7df4879 linux-2.6.32.tar.bz2
-ca9a0f5c28803e9231dc9ee5b0faa863 patch-2.6.32.17.bz2
-b77ed133c11b20925bfb231383381840 patch-2.6.32.18-rc1.bz2
+29aa10a231882a6e52908642b572326f patch-2.6.32.21.bz2
diff --git a/ssb_check_for_sprom.patch b/ssb_check_for_sprom.patch
deleted file mode 100644
index 7df784f..0000000
--- a/ssb_check_for_sprom.patch
+++ /dev/null
@@ -1,185 +0,0 @@
-From 380bed7aa858cbe2d4eeb783e2bed7d01828518d Mon Sep 17 00:00:00 2001
-From: John W. Linville <linville@tuxdriver.com>
-Date: Fri, 19 Mar 2010 14:58:01 -0400
-Subject: [PATCH v4] ssb: do not read SPROM if it does not exist
-
-Attempting to read registers that don't exist on the SSB bus can cause
-hangs on some boxes. At least some b43 devices are 'in the wild' that
-don't have SPROMs at all. When the SSB bus support loads, it attempts
-to read these (non-existant) SPROMs and causes hard hangs on the box --
-no console output, etc.
-
-This patch adds some intelligence to determine whether or not the SPROM
-is present before attempting to read it. This avoids those hard hangs
-on those devices with no SPROM attached to their SSB bus. The
-SSB-attached devices (e.g. b43, et al.) won't work, but at least the box
-will survive to test further patches. :-)
-
-Signed-off-by: John W. Linville <linville@tuxdriver.com>
-Cc: Larry Finger <Larry.Finger@lwfinger.net>
-Cc: Michael Buesch <mb@bu3sch.de>
-Cc: stable@kernel.org
----
-Version 4, move read of ChipCommon status register to ssb_chipcommon_init
-Version 3, add missing semi-colon... :-(
-Version 2, check the correct place for ChipCommon core revision... :-)
-
- drivers/ssb/driver_chipcommon.c | 3 +++
- drivers/ssb/pci.c | 3 +++
- drivers/ssb/sprom.c | 22 ++++++++++++++++++++++
- include/linux/ssb/ssb.h | 3 +++
- include/linux/ssb/ssb_driver_chipcommon.h | 15 +++++++++++++++
- 5 files changed, 46 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/ssb/driver_chipcommon.c b/drivers/ssb/driver_chipcommon.c
-index 9681536..6cf288d 100644
---- a/drivers/ssb/driver_chipcommon.c
-+++ b/drivers/ssb/driver_chipcommon.c
-@@ -233,6 +233,9 @@ void ssb_chipcommon_init(struct ssb_chipcommon *cc)
- {
- if (!cc->dev)
- return; /* We don't have a ChipCommon */
-+ if (cc->dev->id.revision >= 11) {
-+ cc->status = chipco_read32(cc, SSB_CHIPCO_CHIPSTAT);
-+ }
- ssb_pmu_init(cc);
- chipco_powercontrol_init(cc);
- ssb_chipco_set_clockmode(cc, SSB_CLKMODE_FAST);
-diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c
-index 9e50896..2f7b16d 100644
---- a/drivers/ssb/pci.c
-+++ b/drivers/ssb/pci.c
-@@ -620,6 +620,9 @@ static int ssb_pci_sprom_get(struct ssb_bus *bus,
- int err = -ENOMEM;
- u16 *buf;
-
-+ if (!ssb_is_sprom_available(bus))
-+ return -ENODEV;
-+
- buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL);
- if (!buf)
- goto out;
-diff --git a/drivers/ssb/sprom.c b/drivers/ssb/sprom.c
-index d0e6762..55eb9b0 100644
---- a/drivers/ssb/sprom.c
-+++ b/drivers/ssb/sprom.c
-@@ -175,3 +175,25 @@ const struct ssb_sprom *ssb_get_fallback_sprom(void)
- {
- return fallback_sprom;
- }
-+
-+bool ssb_is_sprom_available(struct ssb_bus *bus)
-+{
-+ /* status register only exists on chipcomon rev >= 11 */
-+ if (bus->chipco.dev->id.revision < 11)
-+ return true;
-+
-+ switch (bus->chip_id) {
-+ case 0x4312:
-+ return SSB_CHIPCO_CHST_4312_SPROM_PRESENT(bus->chipco.status);
-+ case 0x4322:
-+ return SSB_CHIPCO_CHST_4322_SPROM_PRESENT(bus->chipco.status);
-+ case 0x4325:
-+ return SSB_CHIPCO_CHST_4325_SPROM_PRESENT(bus->chipco.status);
-+ default:
-+ break;
-+ }
-+ if (bus->chipco.dev->id.revision >= 31)
-+ return bus->chipco.capabilities & SSB_CHIPCO_CAP_SPROM;
-+
-+ return true;
-+}
-diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
-index 24f9885..3b4da23 100644
---- a/include/linux/ssb/ssb.h
-+++ b/include/linux/ssb/ssb.h
-@@ -394,6 +394,9 @@ extern int ssb_bus_sdiobus_register(struct ssb_bus *bus,
-
- extern void ssb_bus_unregister(struct ssb_bus *bus);
-
-+/* Does the device have an SPROM? */
-+extern bool ssb_is_sprom_available(struct ssb_bus *bus);
-+
- /* Set a fallback SPROM.
- * See kdoc at the function definition for complete documentation. */
- extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom);
-diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h
-index 4e27acf..2cdf249 100644
---- a/include/linux/ssb/ssb_driver_chipcommon.h
-+++ b/include/linux/ssb/ssb_driver_chipcommon.h
-@@ -53,6 +53,7 @@
- #define SSB_CHIPCO_CAP_64BIT 0x08000000 /* 64-bit Backplane */
- #define SSB_CHIPCO_CAP_PMU 0x10000000 /* PMU available (rev >= 20) */
- #define SSB_CHIPCO_CAP_ECI 0x20000000 /* ECI available (rev >= 20) */
-+#define SSB_CHIPCO_CAP_SPROM 0x40000000 /* SPROM present */
- #define SSB_CHIPCO_CORECTL 0x0008
- #define SSB_CHIPCO_CORECTL_UARTCLK0 0x00000001 /* Drive UART with internal clock */
- #define SSB_CHIPCO_CORECTL_SE 0x00000002 /* sync clk out enable (corerev >= 3) */
-@@ -385,6 +386,7 @@
-
-
- /** Chip specific Chip-Status register contents. */
-+#define SSB_CHIPCO_CHST_4322_SPROM_EXISTS 0x00000040 /* SPROM present */
- #define SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL 0x00000003
- #define SSB_CHIPCO_CHST_4325_DEFCIS_SEL 0 /* OTP is powered up, use def. CIS, no SPROM */
- #define SSB_CHIPCO_CHST_4325_SPROM_SEL 1 /* OTP is powered up, SPROM is present */
-@@ -398,6 +400,18 @@
- #define SSB_CHIPCO_CHST_4325_RCAL_VALUE_SHIFT 4
- #define SSB_CHIPCO_CHST_4325_PMUTOP_2B 0x00000200 /* 1 for 2b, 0 for to 2a */
-
-+/** Macros to determine SPROM presence based on Chip-Status register. */
-+#define SSB_CHIPCO_CHST_4312_SPROM_PRESENT(status) \
-+ ((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \
-+ SSB_CHIPCO_CHST_4325_OTP_SEL)
-+#define SSB_CHIPCO_CHST_4322_SPROM_PRESENT(status) \
-+ (status & SSB_CHIPCO_CHST_4322_SPROM_EXISTS)
-+#define SSB_CHIPCO_CHST_4325_SPROM_PRESENT(status) \
-+ (((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \
-+ SSB_CHIPCO_CHST_4325_DEFCIS_SEL) && \
-+ ((status & SSB_CHIPCO_CHST_4325_SPROM_OTP_SEL) != \
-+ SSB_CHIPCO_CHST_4325_OTP_SEL))
-+
-
-
- /** Clockcontrol masks and values **/
-@@ -564,6 +578,7 @@ struct ssb_chipcommon_pmu {
- struct ssb_chipcommon {
- struct ssb_device *dev;
- u32 capabilities;
-+ u32 status;
- /* Fast Powerup Delay constant */
- u16 fast_pwrup_delay;
- struct ssb_chipcommon_pmu pmu;
---
-1.6.2.5
-
-From ec032742062ad1b01dfe75cfccdbc5b850837c23 Mon Sep 17 00:00:00 2001
-From: John W. Linville <linville@tuxdriver.com>
-Date: Tue, 30 Mar 2010 13:47:39 -0400
-Subject: [PATCH] ssb: avoid null ptr deref in ssb_is_sprom_available
-
-Some older devices don't have chipcommon, but they do have SPROM.
-
-Signed-off-by: John W. Linville <linville@tuxdriver.com>
----
- drivers/ssb/sprom.c | 4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/ssb/sprom.c b/drivers/ssb/sprom.c
-index 55eb9b0..874d8f1 100644
---- a/drivers/ssb/sprom.c
-+++ b/drivers/ssb/sprom.c
-@@ -178,6 +178,10 @@ const struct ssb_sprom *ssb_get_fallback_sprom(void)
-
- bool ssb_is_sprom_available(struct ssb_bus *bus)
- {
-+ /* some older devices don't have chipcommon, but they have sprom */
-+ if (!bus->chipco.dev)
-+ return true;
-+
- /* status register only exists on chipcomon rev >= 11 */
- if (bus->chipco.dev->id.revision < 11)
- return true;
---
-1.6.2.5
-
diff --git a/xfs-prevent-swapext-from-operating-on-write-only-files.patch b/xfs-prevent-swapext-from-operating-on-write-only-files.patch
deleted file mode 100644
index c1e5224..0000000
--- a/xfs-prevent-swapext-from-operating-on-write-only-files.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From: Dan Rosenberg <dan.j.rosenberg@gmail.com>
-Date: Thu, 24 Jun 2010 02:07:47 +0000 (+1000)
-Subject: xfs: prevent swapext from operating on write-only files
-X-Git-Tag: v2.6.35-rc4~4^2~4
-X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=1817176a86352f65210139d4c794ad2d19fc6b63
-
-xfs: prevent swapext from operating on write-only files
-[ cve-2010-2266 ]
-[ cebbert@redhat.com : backport to 2.6.32 ]
-
-This patch prevents user "foo" from using the SWAPEXT ioctl to swap
-a write-only file owned by user "bar" into a file owned by "foo" and
-subsequently reading it. It does so by checking that the file
-descriptors passed to the ioctl are also opened for reading.
-
-Signed-off-by: Dan Rosenberg <dan.j.rosenberg@gmail.com>
-Reviewed-by: Christoph Hellwig <hch@lst.de>
----
-
-diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c
-index 5bba29a..7f159d2 100644
---- a/fs/xfs/xfs_dfrag.c
-+++ b/fs/xfs/xfs_dfrag.c
-@@ -69,7 +69,9 @@ xfs_swapext(
- goto out;
- }
-
-- if (!(file->f_mode & FMODE_WRITE) || (file->f_flags & O_APPEND)) {
-+ if (!(file->f_mode & FMODE_WRITE) ||
-+ !(file->f_mode & FMODE_READ) ||
-+ (file->f_flags & O_APPEND)) {
- error = XFS_ERROR(EBADF);
- goto out_put_file;
- }
-@@ -81,6 +83,7 @@ xfs_swapext(
- }
-
- if (!(target_file->f_mode & FMODE_WRITE) ||
-+ !(target_file->f_mode & FMODE_READ) ||
- (target_file->f_flags & O_APPEND)) {
- error = XFS_ERROR(EBADF);
- goto out_put_target_file;