]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.13-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Mar 2014 18:09:35 +0000 (11:09 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Mar 2014 18:09:35 +0000 (11:09 -0700)
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

queue-3.13/drm-i915-fix-pch-pci-device-enumeration.patch [new file with mode: 0644]
queue-3.13/drm-i915-reject-165mhz-modes-w-dvi-monitors.patch [new file with mode: 0644]
queue-3.13/drm-radeon-atom-select-the-proper-number-of-lanes-in.patch [new file with mode: 0644]
queue-3.13/drm-radeon-dpm-fix-typo-in-evergreen_smc_firmware_header_softregisters.patch [new file with mode: 0644]
queue-3.13/drm-radeon-re-order-firmware-loading-in-preparation-for-dpm-rework.patch [new file with mode: 0644]
queue-3.13/fs-proc-base.c-fix-gpf-in-proc-pid-map_files.patch [new file with mode: 0644]
queue-3.13/iscsi-target-fix-iscsit_get_tpg_from_np-tpg_state-bug.patch [new file with mode: 0644]
queue-3.13/series

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 (file)
index 0000000..9a1cdfe
--- /dev/null
@@ -0,0 +1,128 @@
+From bcdb72ac7c00d2b56359fc82bcc8fe50454717d5 Mon Sep 17 00:00:00 2001
+From: Imre Deak <imre.deak@intel.com>
+Date: Fri, 14 Feb 2014 20:23:54 +0200
+Subject: drm/i915: fix pch pci device enumeration
+
+From: Imre Deak <imre.deak@intel.com>
+
+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 <firemeteor@users.sourceforge.net>
+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]  [<ffffffff816a32a6>] dump_stack+0x4e/0x7a
+[  164.377447]  [<ffffffff8104f75d>] warn_slowpath_common+0x7d/0xa0
+[  164.384238]  [<ffffffff8104f83a>] warn_slowpath_null+0x1a/0x20
+[  164.390851]  [<ffffffff8169aeae>] klist_next+0xae/0x110
+[  164.396777]  [<ffffffff8130a110>] ? pci_do_find_bus+0x70/0x70
+[  164.403286]  [<ffffffff813cb4a9>] bus_find_device+0x89/0xc0
+[  164.409719]  [<ffffffff8130a373>] pci_get_dev_by_id+0x63/0xa0
+[  164.416238]  [<ffffffff8130a4e4>] pci_get_class+0x44/0x50
+[  164.422433]  [<ffffffffa034821f>] intel_dsm_detect+0x16f/0x1f0 [i915]
+[  164.429801]  [<ffffffffa03482ae>] intel_register_dsm_handler+0xe/0x10 [i915]
+[  164.437831]  [<ffffffffa02d30fe>] i915_driver_load+0xafe/0xf30 [i915]
+[  164.445126]  [<ffffffff8158a150>] ? intel_alloc_coherent+0x110/0x110
+[  164.452340]  [<ffffffffa0148c07>] drm_dev_register+0xc7/0x150 [drm]
+[  164.459462]  [<ffffffffa014b23f>] drm_get_pci_dev+0x11f/0x1f0 [drm]
+[  164.466554]  [<ffffffff816abb81>] ? _raw_spin_unlock_irqrestore+0x51/0x70
+[  164.474287]  [<ffffffffa02cf7a6>] i915_pci_probe+0x56/0x60 [i915]
+[  164.481185]  [<ffffffff8130a028>] pci_device_probe+0x78/0xf0
+[  164.487603]  [<ffffffff813cd495>] driver_probe_device+0x155/0x350
+[  164.494505]  [<ffffffff813cd74e>] __driver_attach+0x6e/0xa0
+[  164.500826]  [<ffffffff813cd6e0>] ? __device_attach+0x50/0x50
+[  164.507333]  [<ffffffff813cb2be>] bus_for_each_dev+0x6e/0xc0
+[  164.513752]  [<ffffffff813ccefe>] driver_attach+0x1e/0x20
+[  164.519870]  [<ffffffff813cc958>] bus_add_driver+0x138/0x260
+[  164.526289]  [<ffffffffa0188000>] ? 0xffffffffa0187fff
+[  164.532116]  [<ffffffff813cde78>] driver_register+0x98/0xe0
+[  164.538558]  [<ffffffffa0188000>] ? 0xffffffffa0187fff
+[  164.544389]  [<ffffffff813087b0>] __pci_register_driver+0x60/0x70
+[  164.551336]  [<ffffffffa014b37d>] drm_pci_init+0x6d/0x120 [drm]
+[  164.558040]  [<ffffffffa0188000>] ? 0xffffffffa0187fff
+[  164.563928]  [<ffffffffa018806a>] i915_init+0x6a/0x6c [i915]
+[  164.570363]  [<ffffffff810002da>] do_one_initcall+0xaa/0x160
+[  164.576783]  [<ffffffff8103b140>] ? set_memory_nx+0x40/0x50
+[  164.583100]  [<ffffffff810ce7f5>] load_module+0x1fb5/0x2550
+[  164.589410]  [<ffffffff810caab0>] ? store_uevent+0x40/0x40
+[  164.595628]  [<ffffffff810cee7d>] SyS_init_module+0xed/0x100
+[  164.602048]  [<ffffffff816b3c52>] system_call_fastpath+0x16/0x1b
+
+v2: simplify the loop further (Chris)
+
+Signed-off-by: Imre Deak <imre.deak@intel.com>
+Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
+Reported-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=65652
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=74161
+Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..fb09eb4
--- /dev/null
@@ -0,0 +1,59 @@
+From 6375b768a9850b6154478993e5fb566fa4614a9c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com>
+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?= <ville.syrjala@linux.intel.com>
+
+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 <daniel.vetter@ffwll.ch>
+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 <a.nielsen@shikadi.net>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=75345
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=70331
+Tested-by: Ralf Jung <post+kernel@ralfj.de>
+Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..cb0e3a2
--- /dev/null
@@ -0,0 +1,34 @@
+From d03874c881a049a50e12f285077ab1f9fc2686e1 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+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 <alexander.deucher@amd.com>
+
+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 <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..ab68510
--- /dev/null
@@ -0,0 +1,34 @@
+From 13714323f83ffa5a772fe0d8b74e0fa32ee08819 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 6 Mar 2014 13:16:55 -0500
+Subject: drm/radeon/dpm: fix typo in EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+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 <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..1c44d5a
--- /dev/null
@@ -0,0 +1,287 @@
+From 01ac8794a77192236a4b91c33adf4177ac5a21f0 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 18 Dec 2013 19:11:27 -0500
+Subject: drm/radeon: re-order firmware loading in preparation for dpm rework
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+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 <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..a49a5dc
--- /dev/null
@@ -0,0 +1,55 @@
+From 70335abb2689c8cd5df91bf2d95a65649addf50b Mon Sep 17 00:00:00 2001
+From: Artem Fetishev <artem_fetishev@epam.com>
+Date: Mon, 10 Mar 2014 15:49:45 -0700
+Subject: fs/proc/base.c: fix GPF in /proc/$PID/map_files
+
+From: Artem Fetishev <artem_fetishev@epam.com>
+
+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 <artem_fetishev@epam.com>
+Signed-off-by: Aleksandr Terekhov <aleksandr_terekhov@epam.com>
+Reported-by: <wiebittewas@gmail.com>
+Acked-by: Pavel Emelyanov <xemul@parallels.com>
+Acked-by: Cyrill Gorcunov <gorcunov@openvz.org>
+Reviewed-by: "Eric W. Biederman" <ebiederm@xmission.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..ea8ae56
--- /dev/null
@@ -0,0 +1,35 @@
+From a2a99cea5ec7c1e47825559f0e75a4efbcf8aee3 Mon Sep 17 00:00:00 2001
+From: Nicholas Bellinger <nab@linux-iscsi.org>
+Date: Wed, 26 Feb 2014 03:09:41 -0800
+Subject: iscsi-target: Fix iscsit_get_tpg_from_np tpg_state bug
+
+From: Nicholas Bellinger <nab@linux-iscsi.org>
+
+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 <nab@linux-iscsi.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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;
+               }
index ff3c15926d07a584b3081fa9b806b75ee254a1d3..51302a6a8e6b546ec41871413dea22cd111ee5df 100644 (file)
@@ -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