From: Greg Kroah-Hartman Date: Wed, 23 Jun 2010 20:38:25 +0000 (-0700) Subject: .34 patches X-Git-Tag: v2.6.31.14~37 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=43b82502b6127a370d2470d58be5ef1b6659a509;p=thirdparty%2Fkernel%2Fstable-queue.git .34 patches --- diff --git a/queue-2.6.34/drm-edid-fix-1024x768-85hz.patch b/queue-2.6.34/drm-edid-fix-1024x768-85hz.patch new file mode 100644 index 00000000000..52a0d1fe737 --- /dev/null +++ b/queue-2.6.34/drm-edid-fix-1024x768-85hz.patch @@ -0,0 +1,32 @@ +From 61dd98fad58f945ed720ba132681acb58fcee015 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Thu, 13 May 2010 14:55:28 -0400 +Subject: drm/edid: Fix 1024x768@85Hz + +From: Adam Jackson + +commit 61dd98fad58f945ed720ba132681acb58fcee015 upstream. + +Having hsync both start and end on pixel 1072 ain't gonna work very +well. Matches the X server's list. + +Signed-off-by: Adam Jackson +Tested-By: Michael Tokarev +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/drm_edid.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -335,7 +335,7 @@ static struct drm_display_mode drm_dmt_m + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1024x768@85Hz */ + { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 94500, 1024, 1072, +- 1072, 1376, 0, 768, 769, 772, 808, 0, ++ 1168, 1376, 0, 768, 769, 772, 808, 0, + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, + /* 1152x864@75Hz */ + { DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216, diff --git a/queue-2.6.34/drm-i915-configure-the-tv-sense-state-correctly-on-gm45-to-make-tv-detection-reliable.patch b/queue-2.6.34/drm-i915-configure-the-tv-sense-state-correctly-on-gm45-to-make-tv-detection-reliable.patch new file mode 100644 index 00000000000..bc414f7925b --- /dev/null +++ b/queue-2.6.34/drm-i915-configure-the-tv-sense-state-correctly-on-gm45-to-make-tv-detection-reliable.patch @@ -0,0 +1,49 @@ +From fb8b5a39b6310379d7b54c0c7113703a8eaf4a57 Mon Sep 17 00:00:00 2001 +From: Zhao Yakui +Date: Wed, 7 Apr 2010 17:11:19 +0800 +Subject: drm/i915: Configure the TV sense state correctly on GM45 to make TV detection reliable + +From: Zhao Yakui + +commit fb8b5a39b6310379d7b54c0c7113703a8eaf4a57 upstream. + +The TV detection logic is not reliable on the Cantiga platform. +Sometimes the TV will be misdetected as the following two cases: +- TV is misdetected on some laptops. e.g. There is no TV connector +port or no TV is attached. But the TV is shown as connected. +- TV connector type is misdetected. e.g. the component TV is +attached, but the TV is shown as S-video type. + +According to the hardware requirement, the TV sense state bits of TV DAC +register should be cleared to zero on Cantiga platfrom. + +https://bugzilla.kernel.org/show_bug.cgi?id=14792 + +Signed-off-by: Zhao Yakui +Tested-by: Santi +Signed-off-by: Zhenyu Wang +Signed-off-by: Eric Anholt +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/intel_tv.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/drivers/gpu/drm/i915/intel_tv.c ++++ b/drivers/gpu/drm/i915/intel_tv.c +@@ -1399,6 +1399,15 @@ intel_tv_detect_type (struct drm_crtc *c + DAC_A_0_7_V | + DAC_B_0_7_V | + DAC_C_0_7_V); ++ ++ /* ++ * The TV sense state should be cleared to zero on cantiga platform. Otherwise ++ * the TV is misdetected. This is hardware requirement. ++ */ ++ if (IS_GM45(dev)) ++ tv_dac &= ~(TVDAC_STATE_CHG_EN | TVDAC_A_SENSE_CTL | ++ TVDAC_B_SENSE_CTL | TVDAC_C_SENSE_CTL); ++ + I915_WRITE(TV_CTL, tv_ctl); + I915_WRITE(TV_DAC, tv_dac); + intel_wait_for_vblank(dev); diff --git a/queue-2.6.34/drm-radeon-kms-atom-fix-typo-in-lvds-panel-info-parsing.patch b/queue-2.6.34/drm-radeon-kms-atom-fix-typo-in-lvds-panel-info-parsing.patch new file mode 100644 index 00000000000..d1d8e8c37a5 --- /dev/null +++ b/queue-2.6.34/drm-radeon-kms-atom-fix-typo-in-lvds-panel-info-parsing.patch @@ -0,0 +1,31 @@ +From 1ff26a3604d0292988d4cade0e49ba9918dbfd46 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Tue, 18 May 2010 00:23:15 -0400 +Subject: drm/radeon/kms/atom: fix typo in LVDS panel info parsing + +From: Alex Deucher + +commit 1ff26a3604d0292988d4cade0e49ba9918dbfd46 upstream. + +Fixes LVDS issues on some laptops; notably laptops with +2048x1536 panels. + +Signed-off-by: Alex Deucher +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_atombios.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/radeon/radeon_atombios.c ++++ b/drivers/gpu/drm/radeon/radeon_atombios.c +@@ -1173,7 +1173,7 @@ struct radeon_encoder_atom_dig *radeon_a + lvds->native_mode.vtotal = lvds->native_mode.vdisplay + + le16_to_cpu(lvds_info->info.sLCDTiming.usVBlanking_Time); + lvds->native_mode.vsync_start = lvds->native_mode.vdisplay + +- le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncWidth); ++ le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncOffset); + lvds->native_mode.vsync_end = lvds->native_mode.vsync_start + + le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncWidth); + lvds->panel_pwr_delay = diff --git a/queue-2.6.34/drm-radeon-kms-don-t-default-display-priority-to-high-on-rs4xx.patch b/queue-2.6.34/drm-radeon-kms-don-t-default-display-priority-to-high-on-rs4xx.patch new file mode 100644 index 00000000000..393b622de32 --- /dev/null +++ b/queue-2.6.34/drm-radeon-kms-don-t-default-display-priority-to-high-on-rs4xx.patch @@ -0,0 +1,36 @@ +From 45737447ed160faaba036c0709226bf9057f7b72 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 20 May 2010 11:26:11 -0400 +Subject: drm/radeon/kms: don't default display priority to high on rs4xx + +From: Alex Deucher + +commit 45737447ed160faaba036c0709226bf9057f7b72 upstream. + +Seems to cause issues with the sound hardware. Fixes kernel +bug 15982: +https://bugzilla.kernel.org/show_bug.cgi?id=15982 + +Signed-off-by: Alex Deucher +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_display.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/gpu/drm/radeon/radeon_display.c ++++ b/drivers/gpu/drm/radeon/radeon_display.c +@@ -978,8 +978,11 @@ void radeon_update_display_priority(stru + /* set display priority to high for r3xx, rv515 chips + * this avoids flickering due to underflow to the + * display controllers during heavy acceleration. ++ * Don't force high on rs4xx igp chips as it seems to ++ * affect the sound card. See kernel bug 15982. + */ +- if (ASIC_IS_R300(rdev) || (rdev->family == CHIP_RV515)) ++ if ((ASIC_IS_R300(rdev) || (rdev->family == CHIP_RV515)) && ++ !(rdev->flags & RADEON_IS_IGP)) + rdev->disp_priority = 2; + else + rdev->disp_priority = 0; diff --git a/queue-2.6.34/drm-radeon-kms-release-agp-bridge-at-suspend.patch b/queue-2.6.34/drm-radeon-kms-release-agp-bridge-at-suspend.patch new file mode 100644 index 00000000000..d1af5212392 --- /dev/null +++ b/queue-2.6.34/drm-radeon-kms-release-agp-bridge-at-suspend.patch @@ -0,0 +1,55 @@ +From 10b06122afcc78468bd1d009633cb71e528acdc5 Mon Sep 17 00:00:00 2001 +From: Jerome Glisse +Date: Fri, 21 May 2010 18:48:54 +0200 +Subject: drm/radeon/kms: release AGP bridge at suspend + +From: Jerome Glisse + +commit 10b06122afcc78468bd1d009633cb71e528acdc5 upstream. + +I think it's good to release the AGP bridge at suspend +and reacquire it at resume. Also fix : +https://bugzilla.kernel.org/show_bug.cgi?id=15969 + +Signed-off-by: Jerome Glisse +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon.h | 1 + + drivers/gpu/drm/radeon/radeon_agp.c | 5 +++++ + drivers/gpu/drm/radeon/radeon_device.c | 2 ++ + 3 files changed, 8 insertions(+) + +--- a/drivers/gpu/drm/radeon/radeon.h ++++ b/drivers/gpu/drm/radeon/radeon.h +@@ -566,6 +566,7 @@ typedef int (*radeon_packet3_check_t)(st + */ + int radeon_agp_init(struct radeon_device *rdev); + void radeon_agp_resume(struct radeon_device *rdev); ++void radeon_agp_suspend(struct radeon_device *rdev); + void radeon_agp_fini(struct radeon_device *rdev); + + +--- a/drivers/gpu/drm/radeon/radeon_agp.c ++++ b/drivers/gpu/drm/radeon/radeon_agp.c +@@ -270,3 +270,8 @@ void radeon_agp_fini(struct radeon_devic + } + #endif + } ++ ++void radeon_agp_suspend(struct radeon_device *rdev) ++{ ++ radeon_agp_fini(rdev); ++} +--- a/drivers/gpu/drm/radeon/radeon_device.c ++++ b/drivers/gpu/drm/radeon/radeon_device.c +@@ -748,6 +748,8 @@ int radeon_suspend_kms(struct drm_device + /* evict remaining vram memory */ + radeon_bo_evict_vram(rdev); + ++ radeon_agp_suspend(rdev); ++ + pci_save_state(dev->pdev); + if (state.event == PM_EVENT_SUSPEND) { + /* Shut down the device */ diff --git a/queue-2.6.34/drm-radeon-kms-reset-ddc_bus-in-object-header-parsing.patch b/queue-2.6.34/drm-radeon-kms-reset-ddc_bus-in-object-header-parsing.patch new file mode 100644 index 00000000000..328fab3245e --- /dev/null +++ b/queue-2.6.34/drm-radeon-kms-reset-ddc_bus-in-object-header-parsing.patch @@ -0,0 +1,43 @@ +From 2bfcc0fc698d550689ef020c73b2d977b73e728c Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Tue, 18 May 2010 19:26:46 -0400 +Subject: drm/radeon/kms: reset ddc_bus in object header parsing + +From: Alex Deucher + +commit 2bfcc0fc698d550689ef020c73b2d977b73e728c upstream. + +Some LVDS connectors don't have a ddc bus, so reset the +ddc bus to invalid before parsing the next connector +to avoid using stale ddc bus data. Should fix +fdo bug 28164. + +Signed-off-by: Alex Deucher +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/radeon_atombios.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +--- a/drivers/gpu/drm/radeon/radeon_atombios.c ++++ b/drivers/gpu/drm/radeon/radeon_atombios.c +@@ -530,6 +530,8 @@ bool radeon_get_atom_connector_info_from + } + + /* look up gpio for ddc, hpd */ ++ ddc_bus.valid = false; ++ hpd.hpd = RADEON_HPD_NONE; + if ((le16_to_cpu(path->usDeviceTag) & + (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) == 0) { + for (j = 0; j < con_obj->ucNumberOfObjects; j++) { +@@ -585,9 +587,6 @@ bool radeon_get_atom_connector_info_from + break; + } + } +- } else { +- hpd.hpd = RADEON_HPD_NONE; +- ddc_bus.valid = false; + } + + /* needed for aux chan transactions */ diff --git a/queue-2.6.34/powerpc-fix-handling-of-strncmp-with-zero-len.patch b/queue-2.6.34/powerpc-fix-handling-of-strncmp-with-zero-len.patch new file mode 100644 index 00000000000..5ad73674c6c --- /dev/null +++ b/queue-2.6.34/powerpc-fix-handling-of-strncmp-with-zero-len.patch @@ -0,0 +1,49 @@ +From 637a99022fb119b90fb281715d13172f0394fc12 Mon Sep 17 00:00:00 2001 +From: Jeff Mahoney +Date: Wed, 17 Mar 2010 10:55:51 +0000 +Subject: powerpc: Fix handling of strncmp with zero len + +From: Jeff Mahoney + +commit 637a99022fb119b90fb281715d13172f0394fc12 upstream. + +Commit 0119536c, which added the assembly version of strncmp to +powerpc, mentions that it adds two instructions to the version from +boot/string.S to allow it to handle len=0. Unfortunately, it doesn't +always return 0 when that is the case. The length is passed in r5, but +the return value is passed back in r3. In certain cases, this will +happen to work. Otherwise it will pass back the address of the first +string as the return value. + +This patch lifts the len <= 0 handling code from memcpy to handle that +case. + +Reported by: Christian_Sellars@symantec.com +Signed-off-by: Jeff Mahoney +Signed-off-by: Benjamin Herrenschmidt +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/lib/string.S | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/arch/powerpc/lib/string.S ++++ b/arch/powerpc/lib/string.S +@@ -71,7 +71,7 @@ _GLOBAL(strcmp) + + _GLOBAL(strncmp) + PPC_LCMPI r5,0 +- beqlr ++ ble- 2f + mtctr r5 + addi r5,r3,-1 + addi r4,r4,-1 +@@ -82,6 +82,8 @@ _GLOBAL(strncmp) + beqlr 1 + bdnzt eq,1b + blr ++2: li r3,0 ++ blr + + _GLOBAL(strlen) + addi r4,r3,-1 diff --git a/queue-2.6.34/powerpc-fix-ioremap_flags-with-book3e-pte-definition.patch b/queue-2.6.34/powerpc-fix-ioremap_flags-with-book3e-pte-definition.patch new file mode 100644 index 00000000000..b782eb9263d --- /dev/null +++ b/queue-2.6.34/powerpc-fix-ioremap_flags-with-book3e-pte-definition.patch @@ -0,0 +1,59 @@ +From 55052eeca6d71d76f7c3f156c0501814d8e5e6d3 Mon Sep 17 00:00:00 2001 +From: Benjamin Herrenschmidt +Date: Wed, 7 Apr 2010 14:39:36 +1000 +Subject: powerpc: Fix ioremap_flags() with book3e pte definition + +From: Benjamin Herrenschmidt + +commit 55052eeca6d71d76f7c3f156c0501814d8e5e6d3 upstream. + +We can't just clear the user read permission in book3e pte, because +that will also clear supervisor read permission. This surely isn't +desired. Fix the problem by adding the supervisor read back. + +BenH: Slightly simplified the ifdef and applied to ppc64 too + +Signed-off-by: Li Yang +Signed-off-by: Benjamin Herrenschmidt +Cc: Kumar Gala +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/mm/pgtable_32.c | 8 ++++++++ + arch/powerpc/mm/pgtable_64.c | 8 ++++++++ + 2 files changed, 16 insertions(+) + +--- a/arch/powerpc/mm/pgtable_32.c ++++ b/arch/powerpc/mm/pgtable_32.c +@@ -146,6 +146,14 @@ ioremap_flags(phys_addr_t addr, unsigned + /* we don't want to let _PAGE_USER and _PAGE_EXEC leak out */ + flags &= ~(_PAGE_USER | _PAGE_EXEC); + ++#ifdef _PAGE_BAP_SR ++ /* _PAGE_USER contains _PAGE_BAP_SR on BookE using the new PTE format ++ * which means that we just cleared supervisor access... oops ;-) This ++ * restores it ++ */ ++ flags |= _PAGE_BAP_SR; ++#endif ++ + return __ioremap_caller(addr, size, flags, __builtin_return_address(0)); + } + EXPORT_SYMBOL(ioremap_flags); +--- a/arch/powerpc/mm/pgtable_64.c ++++ b/arch/powerpc/mm/pgtable_64.c +@@ -265,6 +265,14 @@ void __iomem * ioremap_flags(phys_addr_t + /* we don't want to let _PAGE_USER and _PAGE_EXEC leak out */ + flags &= ~(_PAGE_USER | _PAGE_EXEC); + ++#ifdef _PAGE_BAP_SR ++ /* _PAGE_USER contains _PAGE_BAP_SR on BookE using the new PTE format ++ * which means that we just cleared supervisor access... oops ;-) This ++ * restores it ++ */ ++ flags |= _PAGE_BAP_SR; ++#endif ++ + if (ppc_md.ioremap) + return ppc_md.ioremap(addr, size, flags, caller); + return __ioremap_caller(addr, size, flags, caller); diff --git a/queue-2.6.34/powerpc-fsl-booke-fix-instructiontlberror-execute-permission-check.patch b/queue-2.6.34/powerpc-fsl-booke-fix-instructiontlberror-execute-permission-check.patch new file mode 100644 index 00000000000..e56898d850d --- /dev/null +++ b/queue-2.6.34/powerpc-fsl-booke-fix-instructiontlberror-execute-permission-check.patch @@ -0,0 +1,70 @@ +From 78e2e68a2b79f394b7cd61e07987a8a89af907f7 Mon Sep 17 00:00:00 2001 +From: Li Yang +Date: Fri, 7 May 2010 16:38:34 +0800 +Subject: powerpc/fsl-booke: Fix InstructionTLBError execute permission check + +From: Li Yang + +commit 78e2e68a2b79f394b7cd61e07987a8a89af907f7 upstream. + +In CONFIG_PTE_64BIT the PTE format has unique permission bits for user +and supervisor execute. However on !CONFIG_PTE_64BIT we overload the +supervisor bit to imply user execute with _PAGE_USER set. This allows +us to use the same permission check mask for user or supervisor code on +!CONFIG_PTE_64BIT. + +However, on CONFIG_PTE_64BIT we map _PAGE_EXEC to _PAGE_BAP_UX so we +need a different permission mask based on the fault coming from a kernel +address or user space. + +Without unique permission masks we see issues like the following with +modules: + +Unable to handle kernel paging request for instruction fetch +Faulting instruction address: 0xf938d040 +Oops: Kernel access of bad area, sig: 11 [#1] + +Signed-off-by: Li Yang +Signed-off-by: Jin Qing +Signed-off-by: Kumar Gala +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/kernel/head_fsl_booke.S | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +--- a/arch/powerpc/kernel/head_fsl_booke.S ++++ b/arch/powerpc/kernel/head_fsl_booke.S +@@ -639,6 +639,13 @@ interrupt_base: + rlwinm r12,r12,0,16,1 + mtspr SPRN_MAS1,r12 + ++ /* Make up the required permissions for kernel code */ ++#ifdef CONFIG_PTE_64BIT ++ li r13,_PAGE_PRESENT | _PAGE_BAP_SX ++ oris r13,r13,_PAGE_ACCESSED@h ++#else ++ li r13,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC ++#endif + b 4f + + /* Get the PGD for the current thread */ +@@ -646,15 +653,15 @@ interrupt_base: + mfspr r11,SPRN_SPRG_THREAD + lwz r11,PGDIR(r11) + +-4: +- /* Make up the required permissions */ ++ /* Make up the required permissions for user code */ + #ifdef CONFIG_PTE_64BIT +- li r13,_PAGE_PRESENT | _PAGE_EXEC ++ li r13,_PAGE_PRESENT | _PAGE_BAP_UX + oris r13,r13,_PAGE_ACCESSED@h + #else + li r13,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC + #endif + ++4: + FIND_PTE + andc. r13,r13,r11 /* Check permission */ + diff --git a/queue-2.6.34/powerpc-fsl-booke-move-loadcam_entry-back-to-asm-code-to-fix-smp-ftrace.patch b/queue-2.6.34/powerpc-fsl-booke-move-loadcam_entry-back-to-asm-code-to-fix-smp-ftrace.patch new file mode 100644 index 00000000000..e199bb6e6ec --- /dev/null +++ b/queue-2.6.34/powerpc-fsl-booke-move-loadcam_entry-back-to-asm-code-to-fix-smp-ftrace.patch @@ -0,0 +1,147 @@ +From 78f622377f7d31d988db350a43c5689dd5f31876 Mon Sep 17 00:00:00 2001 +From: Kumar Gala +Date: Thu, 13 May 2010 14:38:21 -0500 +Subject: powerpc/fsl-booke: Move loadcam_entry back to asm code to fix SMP ftrace + +From: Kumar Gala + +commit 78f622377f7d31d988db350a43c5689dd5f31876 upstream. + +When we build with ftrace enabled its possible that loadcam_entry would +have used the stack pointer (even though the code doesn't need it). We +call loadcam_entry in __secondary_start before the stack is setup. To +ensure that loadcam_entry doesn't use the stack pointer the easiest +solution is to just have it in asm code. + +Signed-off-by: Kumar Gala +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/kernel/asm-offsets.c | 8 ++++++++ + arch/powerpc/mm/fsl_booke_mmu.c | 25 +++---------------------- + arch/powerpc/mm/mmu_decl.h | 8 ++++++++ + arch/powerpc/mm/tlb_nohash_low.S | 28 ++++++++++++++++++++++++++++ + 4 files changed, 47 insertions(+), 22 deletions(-) + +--- a/arch/powerpc/kernel/asm-offsets.c ++++ b/arch/powerpc/kernel/asm-offsets.c +@@ -447,6 +447,14 @@ int main(void) + DEFINE(PGD_T_LOG2, PGD_T_LOG2); + DEFINE(PTE_T_LOG2, PTE_T_LOG2); + #endif ++#ifdef CONFIG_FSL_BOOKE ++ DEFINE(TLBCAM_SIZE, sizeof(struct tlbcam)); ++ DEFINE(TLBCAM_MAS0, offsetof(struct tlbcam, MAS0)); ++ DEFINE(TLBCAM_MAS1, offsetof(struct tlbcam, MAS1)); ++ DEFINE(TLBCAM_MAS2, offsetof(struct tlbcam, MAS2)); ++ DEFINE(TLBCAM_MAS3, offsetof(struct tlbcam, MAS3)); ++ DEFINE(TLBCAM_MAS7, offsetof(struct tlbcam, MAS7)); ++#endif + + #ifdef CONFIG_KVM_EXIT_TIMING + DEFINE(VCPU_TIMING_EXIT_TBU, offsetof(struct kvm_vcpu, +--- a/arch/powerpc/mm/fsl_booke_mmu.c ++++ b/arch/powerpc/mm/fsl_booke_mmu.c +@@ -2,7 +2,7 @@ + * Modifications by Kumar Gala (galak@kernel.crashing.org) to support + * E500 Book E processors. + * +- * Copyright 2004 Freescale Semiconductor, Inc ++ * Copyright 2004,2010 Freescale Semiconductor, Inc. + * + * This file contains the routines for initializing the MMU + * on the 4xx series of chips. +@@ -56,19 +56,13 @@ + + unsigned int tlbcam_index; + +-#define NUM_TLBCAMS (64) + + #if defined(CONFIG_LOWMEM_CAM_NUM_BOOL) && (CONFIG_LOWMEM_CAM_NUM >= NUM_TLBCAMS) + #error "LOWMEM_CAM_NUM must be less than NUM_TLBCAMS" + #endif + +-struct tlbcam { +- u32 MAS0; +- u32 MAS1; +- unsigned long MAS2; +- u32 MAS3; +- u32 MAS7; +-} TLBCAM[NUM_TLBCAMS]; ++#define NUM_TLBCAMS (64) ++struct tlbcam TLBCAM[NUM_TLBCAMS]; + + struct tlbcamrange { + unsigned long start; +@@ -109,19 +103,6 @@ unsigned long p_mapped_by_tlbcam(phys_ad + return 0; + } + +-void loadcam_entry(int idx) +-{ +- mtspr(SPRN_MAS0, TLBCAM[idx].MAS0); +- mtspr(SPRN_MAS1, TLBCAM[idx].MAS1); +- mtspr(SPRN_MAS2, TLBCAM[idx].MAS2); +- mtspr(SPRN_MAS3, TLBCAM[idx].MAS3); +- +- if (mmu_has_feature(MMU_FTR_BIG_PHYS)) +- mtspr(SPRN_MAS7, TLBCAM[idx].MAS7); +- +- asm volatile("isync;tlbwe;isync" : : : "memory"); +-} +- + /* + * Set up one of the I/D BAT (block address translation) register pairs. + * The parameters are not checked; in particular size must be a power +--- a/arch/powerpc/mm/mmu_decl.h ++++ b/arch/powerpc/mm/mmu_decl.h +@@ -149,7 +149,15 @@ extern unsigned long mmu_mapin_ram(unsig + extern void MMU_init_hw(void); + extern unsigned long mmu_mapin_ram(unsigned long top); + extern void adjust_total_lowmem(void); ++extern void loadcam_entry(unsigned int index); + ++struct tlbcam { ++ u32 MAS0; ++ u32 MAS1; ++ unsigned long MAS2; ++ u32 MAS3; ++ u32 MAS7; ++}; + #elif defined(CONFIG_PPC32) + /* anything 32-bit except 4xx or 8xx */ + extern void MMU_init_hw(void); +--- a/arch/powerpc/mm/tlb_nohash_low.S ++++ b/arch/powerpc/mm/tlb_nohash_low.S +@@ -271,3 +271,31 @@ _GLOBAL(set_context) + #else + #error Unsupported processor type ! + #endif ++ ++#if defined(CONFIG_FSL_BOOKE) ++/* ++ * extern void loadcam_entry(unsigned int index) ++ * ++ * Load TLBCAM[index] entry in to the L2 CAM MMU ++ */ ++_GLOBAL(loadcam_entry) ++ LOAD_REG_ADDR(r4, TLBCAM) ++ mulli r5,r3,TLBCAM_SIZE ++ add r3,r5,r4 ++ lwz r4,TLBCAM_MAS0(r3) ++ mtspr SPRN_MAS0,r4 ++ lwz r4,TLBCAM_MAS1(r3) ++ mtspr SPRN_MAS1,r4 ++ PPC_LL r4,TLBCAM_MAS2(r3) ++ mtspr SPRN_MAS2,r4 ++ lwz r4,TLBCAM_MAS3(r3) ++ mtspr SPRN_MAS3,r4 ++BEGIN_MMU_FTR_SECTION ++ lwz r4,TLBCAM_MAS7(r3) ++ mtspr SPRN_MAS7,r4 ++END_MMU_FTR_SECTION_IFSET(MMU_FTR_BIG_PHYS) ++ isync ++ tlbwe ++ isync ++ blr ++#endif diff --git a/queue-2.6.34/powerpc-oprofile-fix-potential-buffer-overrun-in-op_model_cell.c.patch b/queue-2.6.34/powerpc-oprofile-fix-potential-buffer-overrun-in-op_model_cell.c.patch new file mode 100644 index 00000000000..bd26d95ca4c --- /dev/null +++ b/queue-2.6.34/powerpc-oprofile-fix-potential-buffer-overrun-in-op_model_cell.c.patch @@ -0,0 +1,31 @@ +From 238c1a78c957f3dc7cb848b161dcf4805793ed56 Mon Sep 17 00:00:00 2001 +From: Denis Kirjanov +Date: Tue, 1 Jun 2010 15:43:34 -0400 +Subject: powerpc/oprofile: fix potential buffer overrun in op_model_cell.c + +From: Denis Kirjanov + +commit 238c1a78c957f3dc7cb848b161dcf4805793ed56 upstream. + +Fix potential initial_lfsr buffer overrun. +Writing past the end of the buffer could happen when index == ENTRIES + +Signed-off-by: Denis Kirjanov +Signed-off-by: Robert Richter +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/oprofile/op_model_cell.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/powerpc/oprofile/op_model_cell.c ++++ b/arch/powerpc/oprofile/op_model_cell.c +@@ -1077,7 +1077,7 @@ static int calculate_lfsr(int n) + index = ENTRIES-1; + + /* make sure index is valid */ +- if ((index > ENTRIES) || (index < 0)) ++ if ((index >= ENTRIES) || (index < 0)) + index = ENTRIES-1; + + return initial_lfsr[index]; diff --git a/queue-2.6.34/powerpc-pseries-make-query_cpu_stopped-callable-outside-hotplug-cpu.patch b/queue-2.6.34/powerpc-pseries-make-query_cpu_stopped-callable-outside-hotplug-cpu.patch new file mode 100644 index 00000000000..64d0dfc0c6c --- /dev/null +++ b/queue-2.6.34/powerpc-pseries-make-query_cpu_stopped-callable-outside-hotplug-cpu.patch @@ -0,0 +1,126 @@ +From f8b67691828321f5c85bb853283aa101ae673130 Mon Sep 17 00:00:00 2001 +From: Michael Neuling +Date: Wed, 28 Apr 2010 13:39:41 +0000 +Subject: powerpc/pseries: Make query_cpu_stopped callable outside hotplug cpu + +From: Michael Neuling + +commit f8b67691828321f5c85bb853283aa101ae673130 upstream. + +This moves query_cpu_stopped() out of the hotplug cpu code and into +smp.c so it can called in other places and renames it to +smp_query_cpu_stopped(). + +It also cleans up the return values by adding some #defines + +Signed-off-by: Michael Neuling +Signed-off-by: Benjamin Herrenschmidt +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/platforms/pseries/hotplug-cpu.c | 30 +++--------------------- + arch/powerpc/platforms/pseries/plpar_wrappers.h | 8 ++++++ + arch/powerpc/platforms/pseries/smp.c | 22 +++++++++++++++++ + 3 files changed, 34 insertions(+), 26 deletions(-) + +--- a/arch/powerpc/platforms/pseries/hotplug-cpu.c ++++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c +@@ -154,30 +154,6 @@ static void pseries_mach_cpu_die(void) + for(;;); + } + +-static int qcss_tok; /* query-cpu-stopped-state token */ +- +-/* Get state of physical CPU. +- * Return codes: +- * 0 - The processor is in the RTAS stopped state +- * 1 - stop-self is in progress +- * 2 - The processor is not in the RTAS stopped state +- * -1 - Hardware Error +- * -2 - Hardware Busy, Try again later. +- */ +-static int query_cpu_stopped(unsigned int pcpu) +-{ +- int cpu_status, status; +- +- status = rtas_call(qcss_tok, 1, 2, &cpu_status, pcpu); +- if (status != 0) { +- printk(KERN_ERR +- "RTAS query-cpu-stopped-state failed: %i\n", status); +- return status; +- } +- +- return cpu_status; +-} +- + static int pseries_cpu_disable(void) + { + int cpu = smp_processor_id(); +@@ -224,8 +200,9 @@ static void pseries_cpu_die(unsigned int + } else if (get_preferred_offline_state(cpu) == CPU_STATE_OFFLINE) { + + for (tries = 0; tries < 25; tries++) { +- cpu_status = query_cpu_stopped(pcpu); +- if (cpu_status == 0 || cpu_status == -1) ++ cpu_status = smp_query_cpu_stopped(pcpu); ++ if (cpu_status == QCSS_STOPPED || ++ cpu_status == QCSS_HARDWARE_ERROR) + break; + cpu_relax(); + } +@@ -388,6 +365,7 @@ static int __init pseries_cpu_hotplug_in + struct device_node *np; + const char *typep; + int cpu; ++ int qcss_tok; + + for_each_node_by_name(np, "interrupt-controller") { + typep = of_get_property(np, "compatible", NULL); +--- a/arch/powerpc/platforms/pseries/plpar_wrappers.h ++++ b/arch/powerpc/platforms/pseries/plpar_wrappers.h +@@ -4,6 +4,14 @@ + #include + #include + ++/* Get state of physical CPU from query_cpu_stopped */ ++int smp_query_cpu_stopped(unsigned int pcpu); ++#define QCSS_STOPPED 0 ++#define QCSS_STOPPING 1 ++#define QCSS_NOT_STOPPED 2 ++#define QCSS_HARDWARE_ERROR -1 ++#define QCSS_HARDWARE_BUSY -2 ++ + static inline long poll_pending(void) + { + return plpar_hcall_norets(H_POLL_PENDING); +--- a/arch/powerpc/platforms/pseries/smp.c ++++ b/arch/powerpc/platforms/pseries/smp.c +@@ -57,6 +57,28 @@ + */ + static cpumask_t of_spin_map; + ++/* Query where a cpu is now. Return codes #defined in plpar_wrappers.h */ ++int smp_query_cpu_stopped(unsigned int pcpu) ++{ ++ int cpu_status, status; ++ int qcss_tok = rtas_token("query-cpu-stopped-state"); ++ ++ if (qcss_tok == RTAS_UNKNOWN_SERVICE) { ++ printk(KERN_INFO "Firmware doesn't support " ++ "query-cpu-stopped-state\n"); ++ return QCSS_HARDWARE_ERROR; ++ } ++ ++ status = rtas_call(qcss_tok, 1, 2, &cpu_status, pcpu); ++ if (status != 0) { ++ printk(KERN_ERR ++ "RTAS query-cpu-stopped-state failed: %i\n", status); ++ return status; ++ } ++ ++ return cpu_status; ++} ++ + /** + * smp_startup_cpu() - start the given cpu + * diff --git a/queue-2.6.34/powerpc-pseries-only-call-start-cpu-when-a-cpu-is-stopped.patch b/queue-2.6.34/powerpc-pseries-only-call-start-cpu-when-a-cpu-is-stopped.patch new file mode 100644 index 00000000000..95b7749b824 --- /dev/null +++ b/queue-2.6.34/powerpc-pseries-only-call-start-cpu-when-a-cpu-is-stopped.patch @@ -0,0 +1,45 @@ +From aef40e87d866355ffd279ab21021de733242d0d5 Mon Sep 17 00:00:00 2001 +From: Michael Neuling +Date: Wed, 28 Apr 2010 13:39:41 +0000 +Subject: powerpc/pseries: Only call start-cpu when a CPU is stopped + +From: Michael Neuling + +commit aef40e87d866355ffd279ab21021de733242d0d5 upstream. + +Currently we always call start-cpu irrespective of if the CPU is +stopped or not. Unfortunatley on POWER7, firmware seems to not like +start-cpu being called when a cpu already been started. This was not +the case on POWER6 and earlier. + +This patch checks to see if the CPU is stopped or not via an +query-cpu-stopped-state call, and only calls start-cpu on CPUs which +are stopped. + +This fixes a bug with kexec on POWER7 on PHYP where only the primary +thread would make it to the second kernel. + +Reported-by: Ankita Garg +Signed-off-by: Michael Neuling +Signed-off-by: Benjamin Herrenschmidt +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/platforms/pseries/smp.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/arch/powerpc/platforms/pseries/smp.c ++++ b/arch/powerpc/platforms/pseries/smp.c +@@ -82,6 +82,12 @@ static inline int __devinit smp_startup_ + + pcpu = get_hard_smp_processor_id(lcpu); + ++ /* Check to see if the CPU out of FW already for kexec */ ++ if (smp_query_cpu_stopped(pcpu) == QCSS_NOT_STOPPED){ ++ cpu_set(lcpu, of_spin_map); ++ return 1; ++ } ++ + /* Fixup atomic count: it exited inside IRQ handler. */ + task_thread_info(paca[lcpu].__current)->preempt_count = 0; + diff --git a/queue-2.6.34/series b/queue-2.6.34/series index 0f175113a4b..f913761c56e 100644 --- a/queue-2.6.34/series +++ b/queue-2.6.34/series @@ -69,3 +69,17 @@ drivers-base-cpu.c-fix-the-output-from-sys-devices-system-cpu-offline.patch can-fix-sja1000-command-register-writes-on-smp-systems.patch pci-quirks-disable-msi-on-amd-rs4xx-internal-gfx-bridges.patch pci-disable-msi-for-mcp55-on-p5n32-e-sli.patch +drm-radeon-kms-don-t-default-display-priority-to-high-on-rs4xx.patch +drm-edid-fix-1024x768-85hz.patch +drm-radeon-kms-reset-ddc_bus-in-object-header-parsing.patch +drm-radeon-kms-atom-fix-typo-in-lvds-panel-info-parsing.patch +drm-i915-configure-the-tv-sense-state-correctly-on-gm45-to-make-tv-detection-reliable.patch +drm-radeon-kms-release-agp-bridge-at-suspend.patch +powerpc-fix-handling-of-strncmp-with-zero-len.patch +powerpc-pseries-only-call-start-cpu-when-a-cpu-is-stopped.patch +powerpc-pseries-make-query_cpu_stopped-callable-outside-hotplug-cpu.patch +powerpc-fix-ioremap_flags-with-book3e-pte-definition.patch +powerpc-fsl-booke-fix-instructiontlberror-execute-permission-check.patch +powerpc-fsl-booke-move-loadcam_entry-back-to-asm-code-to-fix-smp-ftrace.patch +powerpc-oprofile-fix-potential-buffer-overrun-in-op_model_cell.c.patch +writeback-disable-periodic-old-data-writeback-for-dirty_writeback_centisecs.patch diff --git a/queue-2.6.34/writeback-disable-periodic-old-data-writeback-for-dirty_writeback_centisecs.patch b/queue-2.6.34/writeback-disable-periodic-old-data-writeback-for-dirty_writeback_centisecs.patch new file mode 100644 index 00000000000..d854113b53c --- /dev/null +++ b/queue-2.6.34/writeback-disable-periodic-old-data-writeback-for-dirty_writeback_centisecs.patch @@ -0,0 +1,52 @@ +From 69b62d01ec44fe0d505d89917392347732135a4d Mon Sep 17 00:00:00 2001 +From: Jens Axboe +Date: Mon, 17 May 2010 12:51:03 +0200 +Subject: writeback: disable periodic old data writeback for !dirty_writeback_centisecs + +From: Jens Axboe + +commit 69b62d01ec44fe0d505d89917392347732135a4d upstream. + +Prior to 2.6.32, setting /proc/sys/vm/dirty_writeback_centisecs disabled +periodic dirty writeback from kupdate. This got broken and now causes +excessive sys CPU usage if set to zero, as we'll keep beating on +schedule(). + +Reported-by: Justin Maggard +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman + +--- + fs/fs-writeback.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +--- a/fs/fs-writeback.c ++++ b/fs/fs-writeback.c +@@ -852,6 +852,12 @@ static long wb_check_old_data_flush(stru + unsigned long expired; + long nr_pages; + ++ /* ++ * When set to zero, disable periodic writeback ++ */ ++ if (!dirty_writeback_interval) ++ return 0; ++ + expired = wb->last_old_flush + + msecs_to_jiffies(dirty_writeback_interval * 10); + if (time_before(jiffies, expired)) +@@ -947,8 +953,12 @@ int bdi_writeback_task(struct bdi_writeb + break; + } + +- wait_jiffies = msecs_to_jiffies(dirty_writeback_interval * 10); +- schedule_timeout_interruptible(wait_jiffies); ++ if (dirty_writeback_interval) { ++ wait_jiffies = msecs_to_jiffies(dirty_writeback_interval * 10); ++ schedule_timeout_interruptible(wait_jiffies); ++ } else ++ schedule(); ++ + try_to_freeze(); + } +