diff options
author | Michael Young <m.a.young@durham.ac.uk> | 2010-09-03 22:04:30 +0100 |
---|---|---|
committer | Michael Young <m.a.young@durham.ac.uk> | 2010-09-03 22:04:30 +0100 |
commit | 11574d71a51fbd19255e2d5798dbf52284a1a29c (patch) | |
tree | 673cab071c28b9712b2f0037d719f8f6ca6776e3 | |
parent | c037070edb1f5a0c34505d879b65f0ad96dbd231 (diff) | |
parent | b9204c294cb0512e7ec4c1480276126d8a40d6c3 (diff) | |
download | dom0-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.patch | 47 | ||||
-rw-r--r-- | config-generic | 4 | ||||
-rw-r--r-- | crypto-testmgr-add-null-test-for-aesni.patch | 138 | ||||
-rw-r--r-- | drm-i915-add-reclaimable-to-page-allocations.patch | 48 | ||||
-rw-r--r-- | drm-i915-fix-hibernate-memory-corruption.patch | 41 | ||||
-rw-r--r-- | drm-nouveau-nva3-noaccel.patch | 105 | ||||
-rw-r--r-- | drm-upgrayed-fixes.patch | 1092 | ||||
-rw-r--r-- | drm-upgrayedd.patch | 10 | ||||
-rw-r--r-- | ext4-make-sure-the-move_ext-ioctl-can-t-overwrite-append-only-files.patch | 34 | ||||
-rw-r--r-- | irda-correctly-clean-up-self-ias_obj-on-irda_bind-failure.patch | 35 | ||||
-rw-r--r-- | kernel.spec | 103 | ||||
-rw-r--r-- | linux-2.6-btrfs-fix-acl.patch | 25 | ||||
-rw-r--r-- | linux-2.6-execshield.patch | 11 | ||||
-rw-r--r-- | linux-2.6-upstream-reverts.patch | 39 | ||||
-rw-r--r-- | linux-2.6-usb-wwan-update.patch | 9 | ||||
-rw-r--r-- | sources | 3 | ||||
-rw-r--r-- | ssb_check_for_sprom.patch | 185 | ||||
-rw-r--r-- | xfs-prevent-swapext-from-operating-on-write-only-files.patch | 42 |
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) @@ -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; |