From 6fd7d5ae69807ffa908fe61daa9842ba87dabd35 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 20 Mar 2014 11:09:35 -0700 Subject: [PATCH] 3.13-stable patches added patches: drm-i915-fix-pch-pci-device-enumeration.patch drm-i915-reject-165mhz-modes-w-dvi-monitors.patch drm-radeon-atom-select-the-proper-number-of-lanes-in.patch drm-radeon-dpm-fix-typo-in-evergreen_smc_firmware_header_softregisters.patch drm-radeon-re-order-firmware-loading-in-preparation-for-dpm-rework.patch fs-proc-base.c-fix-gpf-in-proc-pid-map_files.patch iscsi-target-fix-iscsit_get_tpg_from_np-tpg_state-bug.patch --- ...-i915-fix-pch-pci-device-enumeration.patch | 128 ++++++++ ...5-reject-165mhz-modes-w-dvi-monitors.patch | 59 ++++ ...select-the-proper-number-of-lanes-in.patch | 34 +++ ...en_smc_firmware_header_softregisters.patch | 34 +++ ...oading-in-preparation-for-dpm-rework.patch | 287 ++++++++++++++++++ ...base.c-fix-gpf-in-proc-pid-map_files.patch | 55 ++++ ...iscsit_get_tpg_from_np-tpg_state-bug.patch | 35 +++ queue-3.13/series | 7 + 8 files changed, 639 insertions(+) create mode 100644 queue-3.13/drm-i915-fix-pch-pci-device-enumeration.patch create mode 100644 queue-3.13/drm-i915-reject-165mhz-modes-w-dvi-monitors.patch create mode 100644 queue-3.13/drm-radeon-atom-select-the-proper-number-of-lanes-in.patch create mode 100644 queue-3.13/drm-radeon-dpm-fix-typo-in-evergreen_smc_firmware_header_softregisters.patch create mode 100644 queue-3.13/drm-radeon-re-order-firmware-loading-in-preparation-for-dpm-rework.patch create mode 100644 queue-3.13/fs-proc-base.c-fix-gpf-in-proc-pid-map_files.patch create mode 100644 queue-3.13/iscsi-target-fix-iscsit_get_tpg_from_np-tpg_state-bug.patch diff --git a/queue-3.13/drm-i915-fix-pch-pci-device-enumeration.patch b/queue-3.13/drm-i915-fix-pch-pci-device-enumeration.patch new file mode 100644 index 00000000000..9a1cdfe3f9c --- /dev/null +++ b/queue-3.13/drm-i915-fix-pch-pci-device-enumeration.patch @@ -0,0 +1,128 @@ +From bcdb72ac7c00d2b56359fc82bcc8fe50454717d5 Mon Sep 17 00:00:00 2001 +From: Imre Deak +Date: Fri, 14 Feb 2014 20:23:54 +0200 +Subject: drm/i915: fix pch pci device enumeration + +From: Imre Deak + +commit bcdb72ac7c00d2b56359fc82bcc8fe50454717d5 upstream. + +pci_get_class(class, from) drops the refcount for 'from', so the +extra pci_dev_put we do on it will result in a use after free bug +starting with the WARN below. + +Regression introduced in + +commit 6a9c4b35e6696a63805b6da5e4889c6986e9ee1b +Author: Rui Guo +Date: Wed Jun 19 21:10:23 2013 +0800 + + drm/i915: Fix PCH detect with multiple ISA bridges in VM + +[ 164.338460] WARNING: CPU: 1 PID: 2094 at include/linux/kref.h:47 klist_next+0xae/0x110() +[ 164.347731] CPU: 1 PID: 2094 Comm: modprobe Tainted: G O 3.13.0-imre+ #354 +[ 164.356468] Hardware name: Intel Corp. VALLEYVIEW B0 PLATFORM/NOTEBOOK, BIOS BYTICRB1.X64.0062.R70.1310112051 10/11/2013 +[ 164.368796] Call Trace: +[ 164.371609] [] dump_stack+0x4e/0x7a +[ 164.377447] [] warn_slowpath_common+0x7d/0xa0 +[ 164.384238] [] warn_slowpath_null+0x1a/0x20 +[ 164.390851] [] klist_next+0xae/0x110 +[ 164.396777] [] ? pci_do_find_bus+0x70/0x70 +[ 164.403286] [] bus_find_device+0x89/0xc0 +[ 164.409719] [] pci_get_dev_by_id+0x63/0xa0 +[ 164.416238] [] pci_get_class+0x44/0x50 +[ 164.422433] [] intel_dsm_detect+0x16f/0x1f0 [i915] +[ 164.429801] [] intel_register_dsm_handler+0xe/0x10 [i915] +[ 164.437831] [] i915_driver_load+0xafe/0xf30 [i915] +[ 164.445126] [] ? intel_alloc_coherent+0x110/0x110 +[ 164.452340] [] drm_dev_register+0xc7/0x150 [drm] +[ 164.459462] [] drm_get_pci_dev+0x11f/0x1f0 [drm] +[ 164.466554] [] ? _raw_spin_unlock_irqrestore+0x51/0x70 +[ 164.474287] [] i915_pci_probe+0x56/0x60 [i915] +[ 164.481185] [] pci_device_probe+0x78/0xf0 +[ 164.487603] [] driver_probe_device+0x155/0x350 +[ 164.494505] [] __driver_attach+0x6e/0xa0 +[ 164.500826] [] ? __device_attach+0x50/0x50 +[ 164.507333] [] bus_for_each_dev+0x6e/0xc0 +[ 164.513752] [] driver_attach+0x1e/0x20 +[ 164.519870] [] bus_add_driver+0x138/0x260 +[ 164.526289] [] ? 0xffffffffa0187fff +[ 164.532116] [] driver_register+0x98/0xe0 +[ 164.538558] [] ? 0xffffffffa0187fff +[ 164.544389] [] __pci_register_driver+0x60/0x70 +[ 164.551336] [] drm_pci_init+0x6d/0x120 [drm] +[ 164.558040] [] ? 0xffffffffa0187fff +[ 164.563928] [] i915_init+0x6a/0x6c [i915] +[ 164.570363] [] do_one_initcall+0xaa/0x160 +[ 164.576783] [] ? set_memory_nx+0x40/0x50 +[ 164.583100] [] load_module+0x1fb5/0x2550 +[ 164.589410] [] ? store_uevent+0x40/0x40 +[ 164.595628] [] SyS_init_module+0xed/0x100 +[ 164.602048] [] system_call_fastpath+0x16/0x1b + +v2: simplify the loop further (Chris) + +Signed-off-by: Imre Deak +Cc: Jesse Barnes +Reported-by: Jesse Barnes +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=65652 +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=74161 +Reviewed-by: Chris Wilson +Signed-off-by: Jani Nikula +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_drv.c | 23 +++++++++-------------- + 1 file changed, 9 insertions(+), 14 deletions(-) + +--- a/drivers/gpu/drm/i915/i915_drv.c ++++ b/drivers/gpu/drm/i915/i915_drv.c +@@ -401,7 +401,7 @@ MODULE_DEVICE_TABLE(pci, pciidlist); + void intel_detect_pch(struct drm_device *dev) + { + struct drm_i915_private *dev_priv = dev->dev_private; +- struct pci_dev *pch; ++ struct pci_dev *pch = NULL; + + /* In all current cases, num_pipes is equivalent to the PCH_NOP setting + * (which really amounts to a PCH but no South Display). +@@ -422,12 +422,9 @@ void intel_detect_pch(struct drm_device + * all the ISA bridge devices and check for the first match, instead + * of only checking the first one. + */ +- pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL); +- while (pch) { +- struct pci_dev *curr = pch; ++ while ((pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, pch))) { + if (pch->vendor == PCI_VENDOR_ID_INTEL) { +- unsigned short id; +- id = pch->device & INTEL_PCH_DEVICE_ID_MASK; ++ unsigned short id = pch->device & INTEL_PCH_DEVICE_ID_MASK; + dev_priv->pch_id = id; + + if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) { +@@ -459,18 +456,16 @@ void intel_detect_pch(struct drm_device + DRM_DEBUG_KMS("Found LynxPoint LP PCH\n"); + WARN_ON(!IS_HASWELL(dev)); + WARN_ON(!IS_ULT(dev)); +- } else { +- goto check_next; +- } +- pci_dev_put(pch); ++ } else ++ continue; ++ + break; + } +-check_next: +- pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, curr); +- pci_dev_put(curr); + } + if (!pch) +- DRM_DEBUG_KMS("No PCH found?\n"); ++ DRM_DEBUG_KMS("No PCH found.\n"); ++ ++ pci_dev_put(pch); + } + + bool i915_semaphore_is_enabled(struct drm_device *dev) diff --git a/queue-3.13/drm-i915-reject-165mhz-modes-w-dvi-monitors.patch b/queue-3.13/drm-i915-reject-165mhz-modes-w-dvi-monitors.patch new file mode 100644 index 00000000000..fb09eb4fa6f --- /dev/null +++ b/queue-3.13/drm-i915-reject-165mhz-modes-w-dvi-monitors.patch @@ -0,0 +1,59 @@ +From 6375b768a9850b6154478993e5fb566fa4614a9c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= +Date: Mon, 3 Mar 2014 11:33:36 +0200 +Subject: drm/i915: Reject >165MHz modes w/ DVI monitors +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= + +commit 6375b768a9850b6154478993e5fb566fa4614a9c upstream. + +Single-link DVI max dotclock is 165MHz. Filter out modes with higher +dotclock when the monitor doesn't support HDMI. + +Modes higher than 165 MHz were allowed in + +commit 7d148ef51a657fd04036c3ed7803da600dd0d451 +Author: Daniel Vetter +Date: Mon Jul 22 18:02:39 2013 +0200 + + drm/i915: fix hdmi portclock limits + +Also don't attempt to use 12bpc mode with DVI monitors. + +Cc: Adam Nielsen +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=75345 +Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=70331 +Tested-by: Ralf Jung +Signed-off-by: Ville Syrjälä +Signed-off-by: Jani Nikula +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/intel_hdmi.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/gpu/drm/i915/intel_hdmi.c ++++ b/drivers/gpu/drm/i915/intel_hdmi.c +@@ -845,7 +845,7 @@ static int hdmi_portclock_limit(struct i + { + struct drm_device *dev = intel_hdmi_to_dev(hdmi); + +- if (IS_G4X(dev)) ++ if (!hdmi->has_hdmi_sink || IS_G4X(dev)) + return 165000; + else if (IS_HASWELL(dev) || INTEL_INFO(dev)->gen >= 8) + return 300000; +@@ -898,8 +898,8 @@ bool intel_hdmi_compute_config(struct in + * outputs. We also need to check that the higher clock still fits + * within limits. + */ +- if (pipe_config->pipe_bpp > 8*3 && clock_12bpc <= portclock_limit +- && HAS_PCH_SPLIT(dev)) { ++ if (pipe_config->pipe_bpp > 8*3 && intel_hdmi->has_hdmi_sink && ++ clock_12bpc <= portclock_limit && HAS_PCH_SPLIT(dev)) { + DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n"); + desired_bpp = 12*3; + diff --git a/queue-3.13/drm-radeon-atom-select-the-proper-number-of-lanes-in.patch b/queue-3.13/drm-radeon-atom-select-the-proper-number-of-lanes-in.patch new file mode 100644 index 00000000000..cb0e3a20c95 --- /dev/null +++ b/queue-3.13/drm-radeon-atom-select-the-proper-number-of-lanes-in.patch @@ -0,0 +1,34 @@ +From d03874c881a049a50e12f285077ab1f9fc2686e1 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 6 Mar 2014 18:09:52 -0500 +Subject: drm/radeon/atom: select the proper number of lanes in + transmitter setup + +From: Alex Deucher + +commit d03874c881a049a50e12f285077ab1f9fc2686e1 upstream. + +We need to check for DVI vs. HDMI when setting up duallink since +HDMI is single link only. Fixes 4k modes on newer asics. + +bug: +https://bugs.freedesktop.org/show_bug.cgi?id=75223 + +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/atombios_encoders.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/radeon/atombios_encoders.c ++++ b/drivers/gpu/drm/radeon/atombios_encoders.c +@@ -1313,7 +1313,7 @@ atombios_dig_transmitter_setup(struct dr + } + if (is_dp) + args.v5.ucLaneNum = dp_lane_count; +- else if (radeon_encoder->pixel_clock > 165000) ++ else if (radeon_dig_monitor_is_duallink(encoder, radeon_encoder->pixel_clock)) + args.v5.ucLaneNum = 8; + else + args.v5.ucLaneNum = 4; diff --git a/queue-3.13/drm-radeon-dpm-fix-typo-in-evergreen_smc_firmware_header_softregisters.patch b/queue-3.13/drm-radeon-dpm-fix-typo-in-evergreen_smc_firmware_header_softregisters.patch new file mode 100644 index 00000000000..ab68510b007 --- /dev/null +++ b/queue-3.13/drm-radeon-dpm-fix-typo-in-evergreen_smc_firmware_header_softregisters.patch @@ -0,0 +1,34 @@ +From 13714323f83ffa5a772fe0d8b74e0fa32ee08819 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Thu, 6 Mar 2014 13:16:55 -0500 +Subject: drm/radeon/dpm: fix typo in EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters + +From: Alex Deucher + +commit 13714323f83ffa5a772fe0d8b74e0fa32ee08819 upstream. + +Should be at 0x8 rather than 0. + +fixes: +https://bugzilla.kernel.org/show_bug.cgi?id=60523 + +Noticed by ArtForz on #radeon + +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/evergreen_smc.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/radeon/evergreen_smc.h ++++ b/drivers/gpu/drm/radeon/evergreen_smc.h +@@ -57,7 +57,7 @@ typedef struct SMC_Evergreen_MCRegisters + + #define EVERGREEN_SMC_FIRMWARE_HEADER_LOCATION 0x100 + +-#define EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters 0x0 ++#define EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters 0x8 + #define EVERGREEN_SMC_FIRMWARE_HEADER_stateTable 0xC + #define EVERGREEN_SMC_FIRMWARE_HEADER_mcRegisterTable 0x20 + diff --git a/queue-3.13/drm-radeon-re-order-firmware-loading-in-preparation-for-dpm-rework.patch b/queue-3.13/drm-radeon-re-order-firmware-loading-in-preparation-for-dpm-rework.patch new file mode 100644 index 00000000000..1c44d5a81ad --- /dev/null +++ b/queue-3.13/drm-radeon-re-order-firmware-loading-in-preparation-for-dpm-rework.patch @@ -0,0 +1,287 @@ +From 01ac8794a77192236a4b91c33adf4177ac5a21f0 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Wed, 18 Dec 2013 19:11:27 -0500 +Subject: drm/radeon: re-order firmware loading in preparation for dpm rework + +From: Alex Deucher + +commit 01ac8794a77192236a4b91c33adf4177ac5a21f0 upstream. + +We need to reorder the driver init sequence to better accomodate +dpm which needs to be loaded earlier in the init sequence. Move +fw init up so that it's available for dpm init. + +Signed-off-by: Alex Deucher +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/radeon/cik.c | 42 +++++++++++++++++++------------------ + drivers/gpu/drm/radeon/evergreen.c | 33 +++++++++++++++-------------- + drivers/gpu/drm/radeon/ni.c | 36 ++++++++++++++++--------------- + drivers/gpu/drm/radeon/r600.c | 16 +++++++------- + drivers/gpu/drm/radeon/rv770.c | 16 +++++++------- + drivers/gpu/drm/radeon/si.c | 18 +++++++-------- + 6 files changed, 84 insertions(+), 77 deletions(-) + +--- a/drivers/gpu/drm/radeon/cik.c ++++ b/drivers/gpu/drm/radeon/cik.c +@@ -7498,26 +7498,7 @@ static int cik_startup(struct radeon_dev + + cik_mc_program(rdev); + +- if (rdev->flags & RADEON_IS_IGP) { +- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw || +- !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw) { +- r = cik_init_microcode(rdev); +- if (r) { +- DRM_ERROR("Failed to load firmware!\n"); +- return r; +- } +- } +- } else { +- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw || +- !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw || +- !rdev->mc_fw) { +- r = cik_init_microcode(rdev); +- if (r) { +- DRM_ERROR("Failed to load firmware!\n"); +- return r; +- } +- } +- ++ if (!(rdev->flags & RADEON_IS_IGP)) { + r = ci_mc_load_microcode(rdev); + if (r) { + DRM_ERROR("Failed to load MC firmware!\n"); +@@ -7830,6 +7811,27 @@ int cik_init(struct radeon_device *rdev) + if (r) + return r; + ++ if (rdev->flags & RADEON_IS_IGP) { ++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw || ++ !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw) { ++ r = cik_init_microcode(rdev); ++ if (r) { ++ DRM_ERROR("Failed to load firmware!\n"); ++ return r; ++ } ++ } ++ } else { ++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw || ++ !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw || ++ !rdev->mc_fw) { ++ r = cik_init_microcode(rdev); ++ if (r) { ++ DRM_ERROR("Failed to load firmware!\n"); ++ return r; ++ } ++ } ++ } ++ + ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; + ring->ring_obj = NULL; + r600_ring_init(rdev, ring, 1024 * 1024); +--- a/drivers/gpu/drm/radeon/evergreen.c ++++ b/drivers/gpu/drm/radeon/evergreen.c +@@ -5110,26 +5110,11 @@ static int evergreen_startup(struct rade + evergreen_mc_program(rdev); + + if (ASIC_IS_DCE5(rdev)) { +- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) { +- r = ni_init_microcode(rdev); +- if (r) { +- DRM_ERROR("Failed to load firmware!\n"); +- return r; +- } +- } + r = ni_mc_load_microcode(rdev); + if (r) { + DRM_ERROR("Failed to load MC firmware!\n"); + return r; + } +- } else { +- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { +- r = r600_init_microcode(rdev); +- if (r) { +- DRM_ERROR("Failed to load firmware!\n"); +- return r; +- } +- } + } + + if (rdev->flags & RADEON_IS_AGP) { +@@ -5357,6 +5342,24 @@ int evergreen_init(struct radeon_device + if (r) + return r; + ++ if (ASIC_IS_DCE5(rdev)) { ++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) { ++ r = ni_init_microcode(rdev); ++ if (r) { ++ DRM_ERROR("Failed to load firmware!\n"); ++ return r; ++ } ++ } ++ } else { ++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { ++ r = r600_init_microcode(rdev); ++ if (r) { ++ DRM_ERROR("Failed to load firmware!\n"); ++ return r; ++ } ++ } ++ } ++ + rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; + r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); + +--- a/drivers/gpu/drm/radeon/ni.c ++++ b/drivers/gpu/drm/radeon/ni.c +@@ -1876,23 +1876,7 @@ static int cayman_startup(struct radeon_ + + evergreen_mc_program(rdev); + +- if (rdev->flags & RADEON_IS_IGP) { +- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { +- r = ni_init_microcode(rdev); +- if (r) { +- DRM_ERROR("Failed to load firmware!\n"); +- return r; +- } +- } +- } else { +- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) { +- r = ni_init_microcode(rdev); +- if (r) { +- DRM_ERROR("Failed to load firmware!\n"); +- return r; +- } +- } +- ++ if (!(rdev->flags & RADEON_IS_IGP)) { + r = ni_mc_load_microcode(rdev); + if (r) { + DRM_ERROR("Failed to load MC firmware!\n"); +@@ -2143,6 +2127,24 @@ int cayman_init(struct radeon_device *rd + if (r) + return r; + ++ if (rdev->flags & RADEON_IS_IGP) { ++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { ++ r = ni_init_microcode(rdev); ++ if (r) { ++ DRM_ERROR("Failed to load firmware!\n"); ++ return r; ++ } ++ } ++ } else { ++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) { ++ r = ni_init_microcode(rdev); ++ if (r) { ++ DRM_ERROR("Failed to load firmware!\n"); ++ return r; ++ } ++ } ++ } ++ + ring->ring_obj = NULL; + r600_ring_init(rdev, ring, 1024 * 1024); + +--- a/drivers/gpu/drm/radeon/r600.c ++++ b/drivers/gpu/drm/radeon/r600.c +@@ -2776,14 +2776,6 @@ static int r600_startup(struct radeon_de + + r600_mc_program(rdev); + +- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { +- r = r600_init_microcode(rdev); +- if (r) { +- DRM_ERROR("Failed to load firmware!\n"); +- return r; +- } +- } +- + if (rdev->flags & RADEON_IS_AGP) { + r600_agp_enable(rdev); + } else { +@@ -2971,6 +2963,14 @@ int r600_init(struct radeon_device *rdev + if (r) + return r; + ++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { ++ r = r600_init_microcode(rdev); ++ if (r) { ++ DRM_ERROR("Failed to load firmware!\n"); ++ return r; ++ } ++ } ++ + rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; + r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); + +--- a/drivers/gpu/drm/radeon/rv770.c ++++ b/drivers/gpu/drm/radeon/rv770.c +@@ -1665,14 +1665,6 @@ static int rv770_startup(struct radeon_d + + rv770_mc_program(rdev); + +- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { +- r = r600_init_microcode(rdev); +- if (r) { +- DRM_ERROR("Failed to load firmware!\n"); +- return r; +- } +- } +- + if (rdev->flags & RADEON_IS_AGP) { + rv770_agp_enable(rdev); + } else { +@@ -1876,6 +1868,14 @@ int rv770_init(struct radeon_device *rde + if (r) + return r; + ++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) { ++ r = r600_init_microcode(rdev); ++ if (r) { ++ DRM_ERROR("Failed to load firmware!\n"); ++ return r; ++ } ++ } ++ + rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; + r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); + +--- a/drivers/gpu/drm/radeon/si.c ++++ b/drivers/gpu/drm/radeon/si.c +@@ -6328,15 +6328,6 @@ static int si_startup(struct radeon_devi + + si_mc_program(rdev); + +- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw || +- !rdev->rlc_fw || !rdev->mc_fw) { +- r = si_init_microcode(rdev); +- if (r) { +- DRM_ERROR("Failed to load firmware!\n"); +- return r; +- } +- } +- + r = si_mc_load_microcode(rdev); + if (r) { + DRM_ERROR("Failed to load MC firmware!\n"); +@@ -6604,6 +6595,15 @@ int si_init(struct radeon_device *rdev) + if (r) + return r; + ++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw || ++ !rdev->rlc_fw || !rdev->mc_fw) { ++ r = si_init_microcode(rdev); ++ if (r) { ++ DRM_ERROR("Failed to load firmware!\n"); ++ return r; ++ } ++ } ++ + ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; + ring->ring_obj = NULL; + r600_ring_init(rdev, ring, 1024 * 1024); diff --git a/queue-3.13/fs-proc-base.c-fix-gpf-in-proc-pid-map_files.patch b/queue-3.13/fs-proc-base.c-fix-gpf-in-proc-pid-map_files.patch new file mode 100644 index 00000000000..a49a5dce41c --- /dev/null +++ b/queue-3.13/fs-proc-base.c-fix-gpf-in-proc-pid-map_files.patch @@ -0,0 +1,55 @@ +From 70335abb2689c8cd5df91bf2d95a65649addf50b Mon Sep 17 00:00:00 2001 +From: Artem Fetishev +Date: Mon, 10 Mar 2014 15:49:45 -0700 +Subject: fs/proc/base.c: fix GPF in /proc/$PID/map_files + +From: Artem Fetishev + +commit 70335abb2689c8cd5df91bf2d95a65649addf50b upstream. + +The expected logic of proc_map_files_get_link() is either to return 0 +and initialize 'path' or return an error and leave 'path' uninitialized. + +By the time dname_to_vma_addr() returns 0 the corresponding vma may have +already be gone. In this case the path is not initialized but the +return value is still 0. This results in 'general protection fault' +inside d_path(). + +Steps to reproduce: + + CONFIG_CHECKPOINT_RESTORE=y + + fd = open(...); + while (1) { + mmap(fd, ...); + munmap(fd, ...); + } + + ls -la /proc/$PID/map_files + +Addresses https://bugzilla.kernel.org/show_bug.cgi?id=68991 + +Signed-off-by: Artem Fetishev +Signed-off-by: Aleksandr Terekhov +Reported-by: +Acked-by: Pavel Emelyanov +Acked-by: Cyrill Gorcunov +Reviewed-by: "Eric W. Biederman" +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + fs/proc/base.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/fs/proc/base.c ++++ b/fs/proc/base.c +@@ -1819,6 +1819,7 @@ static int proc_map_files_get_link(struc + if (rc) + goto out_mmput; + ++ rc = -ENOENT; + down_read(&mm->mmap_sem); + vma = find_exact_vma(mm, vm_start, vm_end); + if (vma && vma->vm_file) { diff --git a/queue-3.13/iscsi-target-fix-iscsit_get_tpg_from_np-tpg_state-bug.patch b/queue-3.13/iscsi-target-fix-iscsit_get_tpg_from_np-tpg_state-bug.patch new file mode 100644 index 00000000000..ea8ae56e3d1 --- /dev/null +++ b/queue-3.13/iscsi-target-fix-iscsit_get_tpg_from_np-tpg_state-bug.patch @@ -0,0 +1,35 @@ +From a2a99cea5ec7c1e47825559f0e75a4efbcf8aee3 Mon Sep 17 00:00:00 2001 +From: Nicholas Bellinger +Date: Wed, 26 Feb 2014 03:09:41 -0800 +Subject: iscsi-target: Fix iscsit_get_tpg_from_np tpg_state bug + +From: Nicholas Bellinger + +commit a2a99cea5ec7c1e47825559f0e75a4efbcf8aee3 upstream. + +This patch fixes a bug in iscsit_get_tpg_from_np() where the +tpg->tpg_state sanity check was looking for TPG_STATE_FREE, +instead of != TPG_STATE_ACTIVE. + +The latter is expected during a normal TPG shutdown once the +tpg_state goes into TPG_STATE_INACTIVE in order to reject any +new incoming login attempts. + +Signed-off-by: Nicholas Bellinger +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/target/iscsi/iscsi_target_tpg.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/target/iscsi/iscsi_target_tpg.c ++++ b/drivers/target/iscsi/iscsi_target_tpg.c +@@ -137,7 +137,7 @@ struct iscsi_portal_group *iscsit_get_tp + list_for_each_entry(tpg, &tiqn->tiqn_tpg_list, tpg_list) { + + spin_lock(&tpg->tpg_state_lock); +- if (tpg->tpg_state == TPG_STATE_FREE) { ++ if (tpg->tpg_state != TPG_STATE_ACTIVE) { + spin_unlock(&tpg->tpg_state_lock); + continue; + } diff --git a/queue-3.13/series b/queue-3.13/series index ff3c15926d0..51302a6a8e6 100644 --- a/queue-3.13/series +++ b/queue-3.13/series @@ -94,3 +94,10 @@ iser-target-ignore-completions-for-frwrs-in-isert_cq_tx_work.patch iser-target-fix-post_send_buf_count-for-rdma-read-write.patch iser-target-fix-command-leak-for-tx_desc-comp_llnode_batch.patch mm-readahead.c-fix-do_readahead-for-no-readpage-s.patch +iscsi-target-fix-iscsit_get_tpg_from_np-tpg_state-bug.patch +fs-proc-base.c-fix-gpf-in-proc-pid-map_files.patch +drm-radeon-atom-select-the-proper-number-of-lanes-in.patch +drm-radeon-dpm-fix-typo-in-evergreen_smc_firmware_header_softregisters.patch +drm-i915-fix-pch-pci-device-enumeration.patch +drm-i915-reject-165mhz-modes-w-dvi-monitors.patch +drm-radeon-re-order-firmware-loading-in-preparation-for-dpm-rework.patch -- 2.47.3