]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 1 Jun 2012 09:04:57 +0000 (17:04 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 1 Jun 2012 09:04:57 +0000 (17:04 +0800)
added patches:
drm-i915-adding-tv-out-missing-modes.patch
drm-i915-no-lvds-quirk-for-hp-t5740e-thin-client.patch
drm-i915-properly-handle-interlaced-bit-for-sdvo-dtd-conversion.patch
drm-i915-wait-for-a-vblank-to-pass-after-tv-detect.patch
drm-radeon-fix-typo-in-trinity-tiling-setup.patch
drm-radeon-fix-xfx-quirk.patch
iommu-amd-add-workaround-for-event-log-erratum.patch
iommu-amd-check-for-the-right-tlp-prefix-bit.patch
sunrpc-fix-loss-of-task-tk_status-after-rpc_delay-call-in-xprt_alloc_slot.patch

queue-3.4/drm-i915-adding-tv-out-missing-modes.patch [new file with mode: 0644]
queue-3.4/drm-i915-no-lvds-quirk-for-hp-t5740e-thin-client.patch [new file with mode: 0644]
queue-3.4/drm-i915-properly-handle-interlaced-bit-for-sdvo-dtd-conversion.patch [new file with mode: 0644]
queue-3.4/drm-i915-wait-for-a-vblank-to-pass-after-tv-detect.patch [new file with mode: 0644]
queue-3.4/drm-radeon-fix-typo-in-trinity-tiling-setup.patch [new file with mode: 0644]
queue-3.4/drm-radeon-fix-xfx-quirk.patch [new file with mode: 0644]
queue-3.4/iommu-amd-add-workaround-for-event-log-erratum.patch [new file with mode: 0644]
queue-3.4/iommu-amd-check-for-the-right-tlp-prefix-bit.patch [new file with mode: 0644]
queue-3.4/series
queue-3.4/sunrpc-fix-loss-of-task-tk_status-after-rpc_delay-call-in-xprt_alloc_slot.patch [new file with mode: 0644]

diff --git a/queue-3.4/drm-i915-adding-tv-out-missing-modes.patch b/queue-3.4/drm-i915-adding-tv-out-missing-modes.patch
new file mode 100644 (file)
index 0000000..1dea058
--- /dev/null
@@ -0,0 +1,93 @@
+From 9589919fb3d269d4202a112b197468c7db1f97a3 Mon Sep 17 00:00:00 2001
+From: Rodrigo Vivi <rodrigo.vivi@gmail.com>
+Date: Tue, 22 May 2012 15:23:24 -0300
+Subject: drm/i915: Adding TV Out Missing modes.
+
+From: Rodrigo Vivi <rodrigo.vivi@gmail.com>
+
+commit 9589919fb3d269d4202a112b197468c7db1f97a3 upstream.
+
+These 2 modes were removed by mistake during a clean up.
+So, now it is time to add them back. For further info about
+supported mode and standard timing table please check:
+VOL_3_display_registers_updated.pdf at intellinuxgraphics.org.
+
+Note that this regression has been introduce in
+
+commit 55a6713b3f30a5024056027e9dbf03ac8f13bfc9
+Author: Rodrigo Vivi <rodrigo.vivi@gmail.com>
+Date:   Thu Dec 15 14:47:33 2011 -0200
+
+    drm/i915: Removing TV Out modes.
+
+and this commit partially reverts it by re-adding the wrongly removed
+modes.
+
+Reported-by: Robert Lowery <rglowery@exemail.com.au>
+Signed-off-by: Rodrigo Vivi <rodrigo.vivi@gmail.com>
+[danvet: Pimped commit message to cite the commit that introduced this
+regression.]
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_tv.c |   48 ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 48 insertions(+)
+
+--- a/drivers/gpu/drm/i915/intel_tv.c
++++ b/drivers/gpu/drm/i915/intel_tv.c
+@@ -674,6 +674,54 @@ static const struct tv_mode tv_modes[] =
+               .filter_table = filter_table,
+       },
+       {
++              .name       = "480p",
++              .clock          = 107520,
++              .refresh        = 59940,
++              .oversample     = TV_OVERSAMPLE_4X,
++              .component_only = 1,
++
++              .hsync_end      = 64,               .hblank_end         = 122,
++              .hblank_start   = 842,              .htotal             = 857,
++
++              .progressive    = true,             .trilevel_sync = false,
++
++              .vsync_start_f1 = 12,               .vsync_start_f2     = 12,
++              .vsync_len      = 12,
++
++              .veq_ena        = false,
++
++              .vi_end_f1      = 44,               .vi_end_f2          = 44,
++              .nbr_end        = 479,
++
++              .burst_ena      = false,
++
++              .filter_table = filter_table,
++      },
++      {
++              .name       = "576p",
++              .clock          = 107520,
++              .refresh        = 50000,
++              .oversample     = TV_OVERSAMPLE_4X,
++              .component_only = 1,
++
++              .hsync_end      = 64,               .hblank_end         = 139,
++              .hblank_start   = 859,              .htotal             = 863,
++
++              .progressive    = true,             .trilevel_sync = false,
++
++              .vsync_start_f1 = 10,               .vsync_start_f2     = 10,
++              .vsync_len      = 10,
++
++              .veq_ena        = false,
++
++              .vi_end_f1      = 48,               .vi_end_f2          = 48,
++              .nbr_end        = 575,
++
++              .burst_ena      = false,
++
++              .filter_table = filter_table,
++      },
++      {
+               .name       = "720p@60Hz",
+               .clock          = 148800,
+               .refresh        = 60000,
diff --git a/queue-3.4/drm-i915-no-lvds-quirk-for-hp-t5740e-thin-client.patch b/queue-3.4/drm-i915-no-lvds-quirk-for-hp-t5740e-thin-client.patch
new file mode 100644 (file)
index 0000000..049c5ed
--- /dev/null
@@ -0,0 +1,38 @@
+From 3347111999870c37eab1b969e90af9fdaf0334ba Mon Sep 17 00:00:00 2001
+From: Jan-Benedict Glaw <jan-benedict.glaw@getslash.de>
+Date: Tue, 22 May 2012 15:21:53 +0200
+Subject: drm/i915: no lvds quirk for HP t5740e Thin Client
+
+From: Jan-Benedict Glaw <jan-benedict.glaw@getslash.de>
+
+commit 3347111999870c37eab1b969e90af9fdaf0334ba upstream.
+
+This box has DisplayPort and VGA, but no LVDS. Product specs are at
+http://h10010.www1.hp.com/wwpc/us/en/sm/WF25a/12454-12454-321959-338927-3640406-4282707.html?dnr=1
+and dmidecode output can be found at http://www.getslash.de/bug_attachments/dmidecode-t5740e.txt
+
+Signed-off-by: Jan-Benedict Glaw <jbglaw@getslash.de>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_lvds.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/gpu/drm/i915/intel_lvds.c
++++ b/drivers/gpu/drm/i915/intel_lvds.c
+@@ -747,6 +747,14 @@ static const struct dmi_system_id intel_
+       },
+       {
+               .callback = intel_no_lvds_dmi_callback,
++              .ident = "Hewlett-Packard HP t5740e Thin Client",
++              .matches = {
++                      DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "HP t5740e Thin Client"),
++              },
++      },
++      {
++              .callback = intel_no_lvds_dmi_callback,
+               .ident = "Hewlett-Packard t5745",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
diff --git a/queue-3.4/drm-i915-properly-handle-interlaced-bit-for-sdvo-dtd-conversion.patch b/queue-3.4/drm-i915-properly-handle-interlaced-bit-for-sdvo-dtd-conversion.patch
new file mode 100644 (file)
index 0000000..cee9cb2
--- /dev/null
@@ -0,0 +1,73 @@
+From 59d92bfa5f0cdf57f82f5181b0ad6af75c3fdf41 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Sat, 12 May 2012 22:22:58 +0200
+Subject: drm/i915: properly handle interlaced bit for sdvo dtd conversion
+
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+
+commit 59d92bfa5f0cdf57f82f5181b0ad6af75c3fdf41 upstream.
+
+We've simply ignored this, which isn't too great. With this, interlaced
+1080i works on my HDMI screen connected through sdvo. For no apparent
+reason anything else still doesn't work as it should.
+
+While at it, give these magic numbers in the dtd proper names and
+add a comment that they match with EDID detailed timings.
+
+v2: Actually use the right bit for interlaced.
+
+Tested-by: Peter Ross <pross@xvid.org>
+Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
+Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_sdvo.c      |   12 ++++++++----
+ drivers/gpu/drm/i915/intel_sdvo_regs.h |    5 +++++
+ 2 files changed, 13 insertions(+), 4 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_sdvo.c
++++ b/drivers/gpu/drm/i915/intel_sdvo.c
+@@ -769,10 +769,12 @@ static void intel_sdvo_get_dtd_from_mode
+               ((v_sync_len & 0x30) >> 4);
+       dtd->part2.dtd_flags = 0x18;
++      if (mode->flags & DRM_MODE_FLAG_INTERLACE)
++              dtd->part2.dtd_flags |= DTD_FLAG_INTERLACE;
+       if (mode->flags & DRM_MODE_FLAG_PHSYNC)
+-              dtd->part2.dtd_flags |= 0x2;
++              dtd->part2.dtd_flags |= DTD_FLAG_HSYNC_POSITIVE;
+       if (mode->flags & DRM_MODE_FLAG_PVSYNC)
+-              dtd->part2.dtd_flags |= 0x4;
++              dtd->part2.dtd_flags |= DTD_FLAG_VSYNC_POSITIVE;
+       dtd->part2.sdvo_flags = 0;
+       dtd->part2.v_sync_off_high = v_sync_offset & 0xc0;
+@@ -806,9 +808,11 @@ static void intel_sdvo_get_mode_from_dtd
+       mode->clock = dtd->part1.clock * 10;
+       mode->flags &= ~(DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC);
+-      if (dtd->part2.dtd_flags & 0x2)
++      if (dtd->part2.dtd_flags & DTD_FLAG_INTERLACE)
++              mode->flags |= DRM_MODE_FLAG_INTERLACE;
++      if (dtd->part2.dtd_flags & DTD_FLAG_HSYNC_POSITIVE)
+               mode->flags |= DRM_MODE_FLAG_PHSYNC;
+-      if (dtd->part2.dtd_flags & 0x4)
++      if (dtd->part2.dtd_flags & DTD_FLAG_VSYNC_POSITIVE)
+               mode->flags |= DRM_MODE_FLAG_PVSYNC;
+ }
+--- a/drivers/gpu/drm/i915/intel_sdvo_regs.h
++++ b/drivers/gpu/drm/i915/intel_sdvo_regs.h
+@@ -61,6 +61,11 @@ struct intel_sdvo_caps {
+       u16 output_flags;
+ } __attribute__((packed));
++/* Note: SDVO detailed timing flags match EDID misc flags. */
++#define DTD_FLAG_HSYNC_POSITIVE (1 << 1)
++#define DTD_FLAG_VSYNC_POSITIVE (1 << 2)
++#define DTD_FLAG_INTERLACE    (1 << 7)
++
+ /** This matches the EDID DTD structure, more or less */
+ struct intel_sdvo_dtd {
+       struct {
diff --git a/queue-3.4/drm-i915-wait-for-a-vblank-to-pass-after-tv-detect.patch b/queue-3.4/drm-i915-wait-for-a-vblank-to-pass-after-tv-detect.patch
new file mode 100644 (file)
index 0000000..b42c9a9
--- /dev/null
@@ -0,0 +1,64 @@
+From bf2125e2f7e931b50a6c76ba0435ba001409ccbf Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Tue, 22 May 2012 21:41:25 +0200
+Subject: drm/i915: wait for a vblank to pass after tv detect
+
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+
+commit bf2125e2f7e931b50a6c76ba0435ba001409ccbf upstream.
+
+Otherwise the hw will get confused and result in a black screen.
+
+This regression has been most likely introduce in
+
+commit 974b93315b2213b74a42a87e8a9d4fc8c0dbe90c
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date:   Sun Sep 5 00:44:20 2010 +0100
+
+    drm/i915/tv: Poll for DAC state change
+
+That commit replace the first msleep(20) with a busy-loop, but failed
+to keep the 2nd msleep around. Later on we've replaced all these
+msleep(20) by proper vblanks.
+
+For reference also see the commit in xf86-video-intel:
+
+commit 1142be53eb8d2ee8a9b60ace5d49f0ba27332275
+Author: Jesse Barnes <jbarnes@hobbes.lan>
+Date:   Mon Jun 9 08:52:59 2008 -0700
+
+    Fix TV programming:  add vblank wait after TV_CTL writes
+
+    Fxies FDO bug #14000; we need to wait for vblank after
+    writing TV_CTL or following "DPMS on" calls may not actually enable the output.
+
+v2: As suggested by Chris Wilson, add a small comment to ensure that
+no one accidentally removes this vblank wait again - there really
+seems to be no sane explanation for why we need it, but it is
+required.
+
+Launchpad: https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/763688
+Reported-and-Tested-by: Robert Lowery <rglowery@exemail.com.au>
+Cc: Rodrigo Vivi <rodrigo.vivi@gmail.com>
+Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_tv.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/gpu/drm/i915/intel_tv.c
++++ b/drivers/gpu/drm/i915/intel_tv.c
+@@ -1233,6 +1233,11 @@ intel_tv_detect_type(struct intel_tv *in
+       I915_WRITE(TV_DAC, save_tv_dac & ~TVDAC_STATE_CHG_EN);
+       I915_WRITE(TV_CTL, save_tv_ctl);
++      POSTING_READ(TV_CTL);
++
++      /* For unknown reasons the hw barfs if we don't do this vblank wait. */
++      intel_wait_for_vblank(intel_tv->base.base.dev,
++                            to_intel_crtc(intel_tv->base.base.crtc)->pipe);
+       /* Restore interrupt config */
+       if (connector->polled & DRM_CONNECTOR_POLL_HPD) {
diff --git a/queue-3.4/drm-radeon-fix-typo-in-trinity-tiling-setup.patch b/queue-3.4/drm-radeon-fix-typo-in-trinity-tiling-setup.patch
new file mode 100644 (file)
index 0000000..4bec885
--- /dev/null
@@ -0,0 +1,30 @@
+From 1f73cca799d29df80de3e8f1f1c488485467577a Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 24 May 2012 22:55:15 -0400
+Subject: drm/radeon: fix typo in trinity tiling setup
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 1f73cca799d29df80de3e8f1f1c488485467577a upstream.
+
+Using the wrong union.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/ni.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/ni.c
++++ b/drivers/gpu/drm/radeon/ni.c
+@@ -865,7 +865,7 @@ static void cayman_gpu_init(struct radeo
+       /* num banks is 8 on all fusion asics. 0 = 4, 1 = 8, 2 = 16 */
+       if (rdev->flags & RADEON_IS_IGP)
+-              rdev->config.evergreen.tile_config |= 1 << 4;
++              rdev->config.cayman.tile_config |= 1 << 4;
+       else
+               rdev->config.cayman.tile_config |=
+                       ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) << 4;
diff --git a/queue-3.4/drm-radeon-fix-xfx-quirk.patch b/queue-3.4/drm-radeon-fix-xfx-quirk.patch
new file mode 100644 (file)
index 0000000..ae478da
--- /dev/null
@@ -0,0 +1,38 @@
+From 1ebf169ad4dc68f18cc0dab35163b0f324fc6c41 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 23 May 2012 11:48:59 -0400
+Subject: drm/radeon: fix XFX quirk
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 1ebf169ad4dc68f18cc0dab35163b0f324fc6c41 upstream.
+
+Only override the ddc bus if the connector doesn't have
+a valid one.  The existing code overrode the ddc bus for
+all connectors even if it had ddc bus.
+
+Fixes ddc on another XFX card with the same pci ids that
+was broken by the quirk overwriting the correct ddc bus.
+
+Reported-by: Mehdi Aqadjani Memar <m.aqadjanimemar@student.ru.nl>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_atombios.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_atombios.c
++++ b/drivers/gpu/drm/radeon/radeon_atombios.c
+@@ -444,7 +444,9 @@ static bool radeon_atom_apply_quirks(str
+        */
+       if ((dev->pdev->device == 0x9498) &&
+           (dev->pdev->subsystem_vendor == 0x1682) &&
+-          (dev->pdev->subsystem_device == 0x2452)) {
++          (dev->pdev->subsystem_device == 0x2452) &&
++          (i2c_bus->valid == false) &&
++          !(supported_device & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT))) {
+               struct radeon_device *rdev = dev->dev_private;
+               *i2c_bus = radeon_lookup_i2c_gpio(rdev, 0x93);
+       }
diff --git a/queue-3.4/iommu-amd-add-workaround-for-event-log-erratum.patch b/queue-3.4/iommu-amd-add-workaround-for-event-log-erratum.patch
new file mode 100644 (file)
index 0000000..14b37a0
--- /dev/null
@@ -0,0 +1,66 @@
+From 3d06fca8d2aa3543030e40b95f1d62f9f5a03540 Mon Sep 17 00:00:00 2001
+From: Joerg Roedel <joerg.roedel@amd.com>
+Date: Thu, 12 Apr 2012 14:12:00 +0200
+Subject: iommu/amd: Add workaround for event log erratum
+
+From: Joerg Roedel <joerg.roedel@amd.com>
+
+commit 3d06fca8d2aa3543030e40b95f1d62f9f5a03540 upstream.
+
+Due to a recent erratum it can happen that the head pointer
+of the event-log is updated before the actual event-log
+entry is written. This patch implements the recommended
+workaround.
+
+Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/iommu/amd_iommu.c |   29 +++++++++++++++++++++++------
+ 1 file changed, 23 insertions(+), 6 deletions(-)
+
+--- a/drivers/iommu/amd_iommu.c
++++ b/drivers/iommu/amd_iommu.c
+@@ -450,12 +450,27 @@ static void dump_command(unsigned long p
+ static void iommu_print_event(struct amd_iommu *iommu, void *__evt)
+ {
+-      u32 *event = __evt;
+-      int type  = (event[1] >> EVENT_TYPE_SHIFT)  & EVENT_TYPE_MASK;
+-      int devid = (event[0] >> EVENT_DEVID_SHIFT) & EVENT_DEVID_MASK;
+-      int domid = (event[1] >> EVENT_DOMID_SHIFT) & EVENT_DOMID_MASK;
+-      int flags = (event[1] >> EVENT_FLAGS_SHIFT) & EVENT_FLAGS_MASK;
+-      u64 address = (u64)(((u64)event[3]) << 32) | event[2];
++      int type, devid, domid, flags;
++      volatile u32 *event = __evt;
++      int count = 0;
++      u64 address;
++
++retry:
++      type    = (event[1] >> EVENT_TYPE_SHIFT)  & EVENT_TYPE_MASK;
++      devid   = (event[0] >> EVENT_DEVID_SHIFT) & EVENT_DEVID_MASK;
++      domid   = (event[1] >> EVENT_DOMID_SHIFT) & EVENT_DOMID_MASK;
++      flags   = (event[1] >> EVENT_FLAGS_SHIFT) & EVENT_FLAGS_MASK;
++      address = (u64)(((u64)event[3]) << 32) | event[2];
++
++      if (type == 0) {
++              /* Did we hit the erratum? */
++              if (++count == LOOP_TIMEOUT) {
++                      pr_err("AMD-Vi: No event written to event log\n");
++                      return;
++              }
++              udelay(1);
++              goto retry;
++      }
+       printk(KERN_ERR "AMD-Vi: Event logged [");
+@@ -508,6 +523,8 @@ static void iommu_print_event(struct amd
+       default:
+               printk(KERN_ERR "UNKNOWN type=0x%02x]\n", type);
+       }
++
++      memset(__evt, 0, 4 * sizeof(u32));
+ }
+ static void iommu_poll_events(struct amd_iommu *iommu)
diff --git a/queue-3.4/iommu-amd-check-for-the-right-tlp-prefix-bit.patch b/queue-3.4/iommu-amd-check-for-the-right-tlp-prefix-bit.patch
new file mode 100644 (file)
index 0000000..088e40d
--- /dev/null
@@ -0,0 +1,50 @@
+From a3b93121430c7b46c2895a7744261be107ccdf7f Mon Sep 17 00:00:00 2001
+From: Joerg Roedel <joerg.roedel@amd.com>
+Date: Thu, 12 Apr 2012 12:49:26 +0200
+Subject: iommu/amd: Check for the right TLP prefix bit
+
+From: Joerg Roedel <joerg.roedel@amd.com>
+
+commit a3b93121430c7b46c2895a7744261be107ccdf7f upstream.
+
+Unfortunatly the PRI spec changed and moved the
+TLP-prefix-required bit to a different location. This patch
+makes the necessary change in the AMD IOMMU driver.
+Regressions are not expected because all hardware
+implementing the PRI capability sets this bit to zero
+anyway.
+
+Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/iommu/amd_iommu.c |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/iommu/amd_iommu.c
++++ b/drivers/iommu/amd_iommu.c
+@@ -2035,20 +2035,20 @@ out_err:
+ }
+ /* FIXME: Move this to PCI code */
+-#define PCI_PRI_TLP_OFF               (1 << 2)
++#define PCI_PRI_TLP_OFF               (1 << 15)
+ bool pci_pri_tlp_required(struct pci_dev *pdev)
+ {
+-      u16 control;
++      u16 status;
+       int pos;
+       pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_PRI);
+       if (!pos)
+               return false;
+-      pci_read_config_word(pdev, pos + PCI_PRI_CTRL, &control);
++      pci_read_config_word(pdev, pos + PCI_PRI_STATUS, &status);
+-      return (control & PCI_PRI_TLP_OFF) ? true : false;
++      return (status & PCI_PRI_TLP_OFF) ? true : false;
+ }
+ /*
index 2f459f943564643070e326ce2ab1fbf0c070e45f..6b10d4bd6ca5567116bc7a8384f2651f4d20a17d 100644 (file)
@@ -22,3 +22,12 @@ x86-amd-xen-avoid-null-pointer-paravirt-references.patch
 nfs-kmalloc-doesn-t-return-an-err_ptr.patch
 nfsv4-map-nfs4err_share_denied-into-an-eacces-error-instead-of-eio.patch
 hugetlb-fix-resv_map-leak-in-error-path.patch
+sunrpc-fix-loss-of-task-tk_status-after-rpc_delay-call-in-xprt_alloc_slot.patch
+iommu-amd-check-for-the-right-tlp-prefix-bit.patch
+iommu-amd-add-workaround-for-event-log-erratum.patch
+drm-radeon-fix-xfx-quirk.patch
+drm-radeon-fix-typo-in-trinity-tiling-setup.patch
+drm-i915-properly-handle-interlaced-bit-for-sdvo-dtd-conversion.patch
+drm-i915-adding-tv-out-missing-modes.patch
+drm-i915-wait-for-a-vblank-to-pass-after-tv-detect.patch
+drm-i915-no-lvds-quirk-for-hp-t5740e-thin-client.patch
diff --git a/queue-3.4/sunrpc-fix-loss-of-task-tk_status-after-rpc_delay-call-in-xprt_alloc_slot.patch b/queue-3.4/sunrpc-fix-loss-of-task-tk_status-after-rpc_delay-call-in-xprt_alloc_slot.patch
new file mode 100644 (file)
index 0000000..5353a2e
--- /dev/null
@@ -0,0 +1,58 @@
+From 1afeaf5c29aa07db25760d2fbed5c08a3aec3498 Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Sat, 19 May 2012 12:12:53 -0400
+Subject: sunrpc: fix loss of task->tk_status after rpc_delay call in xprt_alloc_slot
+
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+
+commit 1afeaf5c29aa07db25760d2fbed5c08a3aec3498 upstream.
+
+xprt_alloc_slot will call rpc_delay() to make the task wait a bit before
+retrying when it gets back an -ENOMEM error from xprt_dynamic_alloc_slot.
+The problem is that rpc_delay will clear the task->tk_status, causing
+call_reserveresult to abort the task.
+
+The solution is simply to let call_reserveresult handle the ENOMEM error
+directly.
+
+Reported-by: Jeff Layton <jlayton@redhat.com>
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/sunrpc/clnt.c |    2 ++
+ net/sunrpc/xprt.c |    5 +++--
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+--- a/net/sunrpc/clnt.c
++++ b/net/sunrpc/clnt.c
+@@ -1288,6 +1288,8 @@ call_reserveresult(struct rpc_task *task
+       }
+       switch (status) {
++      case -ENOMEM:
++              rpc_delay(task, HZ >> 2);
+       case -EAGAIN:   /* woken up; retry */
+               task->tk_action = call_reserve;
+               return;
+--- a/net/sunrpc/xprt.c
++++ b/net/sunrpc/xprt.c
+@@ -984,15 +984,16 @@ static void xprt_alloc_slot(struct rpc_t
+               goto out_init_req;
+       switch (PTR_ERR(req)) {
+       case -ENOMEM:
+-              rpc_delay(task, HZ >> 2);
+               dprintk("RPC:       dynamic allocation of request slot "
+                               "failed! Retrying\n");
++              task->tk_status = -ENOMEM;
+               break;
+       case -EAGAIN:
+               rpc_sleep_on(&xprt->backlog, task, NULL);
+               dprintk("RPC:       waiting for request slot\n");
++      default:
++              task->tk_status = -EAGAIN;
+       }
+-      task->tk_status = -EAGAIN;
+       return;
+ out_init_req:
+       task->tk_status = 0;