]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.25/patches.arch/ia64-sn-fix-pci-attribute-propagation-bug.patch
Revert "Move xen patchset to new version's subdir."
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.25 / patches.arch / ia64-sn-fix-pci-attribute-propagation-bug.patch
diff --git a/src/patches/suse-2.6.27.25/patches.arch/ia64-sn-fix-pci-attribute-propagation-bug.patch b/src/patches/suse-2.6.27.25/patches.arch/ia64-sn-fix-pci-attribute-propagation-bug.patch
new file mode 100644 (file)
index 0000000..fe211d0
--- /dev/null
@@ -0,0 +1,72 @@
+From: Jeremy Higdon <jeremy@sgi.com>
+Subject: ia64: sn: fix pci attribute propagation bug
+Patch-mainline: 2.6.29
+References: bnc#480591
+
+Customer backups were no longer able to complete within 24 hours after
+upgrading from SLES10 SP1 to SLES10 SP2.  Further investigation demonstrated
+tape streaming bandwidth reduced when the scsi controller is operating at PCI
+66 mhz.  Operating both ports simultaneously caused the reduced bandwidth to
+reduce in half to each tape drive.  If the controller is operating at PCI-X
+100mhz, there is no reduction in the tape performance.
+
+Performance degradation is noticeable with a single tape drive writing highly
+compressible data and the controller operating in PCI-66.  This only affects
+PCI mode, not PCIx.
+
+kotd SP2 baseline: 4194304000 bytes (4.2 GB) copied, 70.7747 seconds, 59.3 MB/s
+kotd SP1 baseline: 4194304000 bytes (4.2 GB) copied, 26.7403 seconds, 157 MB/s
+
+The culprit patch is:
+    patches.fixes/fix-ia64-sn-msi-support
+
+The patch is a backport of the following upstream patch:
+
+   http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=83821d3f558dc651e555d62182ed0c95651f41a6
+
+The fact that the patch is sn2 specific, and that the problem shows up only in
+PCI mode, would easily explain how the performance regression managed to go
+unnoticed for this long.
+
+The problem is that DMA attributes are not getting set on 64bit DMA addresses
+on our PIC ASIC based PCI busses (i.e. O350 and O3000 systems).  This only
+affects devices running in PCI mode, not PCIx mode.  The result is anything
+from poor performance to data corruption -- so this is a mustfix type problem.
+
+This is a _regression_ in SLES10SP2 introduced _accidentally_ by the patch
+   patches.fixes/fix-ia64-sn-msi-support
+That implemented MSI support on IA64 SN2 systems.
+
+The broken code is located in the changes to the pcibr_dmatrans_direct64()
+routine in arch/ia64/sn/pci/pcibr/pcibr_dma.c.
+
+The bug is also present in upstream code which means that SLES11 too suffers
+from the same problem: git commit that introduced the bug is
+83821d3f558dc651e555d62182ed0c95651f41a6
+
+This patch resolves the problem.
+
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ arch/ia64/sn/pci/pcibr/pcibr_dma.c |    7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+--- a/arch/ia64/sn/pci/pcibr/pcibr_dma.c
++++ b/arch/ia64/sn/pci/pcibr/pcibr_dma.c
+@@ -135,11 +135,10 @@ pcibr_dmatrans_direct64(struct pcidev_in
+       if (SN_DMA_ADDRTYPE(dma_flags) == SN_DMA_ADDR_PHYS)
+               pci_addr = IS_PIC_SOFT(pcibus_info) ?
+                               PHYS_TO_DMA(paddr) :
+-                              PHYS_TO_TIODMA(paddr) | dma_attributes;
++                              PHYS_TO_TIODMA(paddr);
+       else
+-              pci_addr = IS_PIC_SOFT(pcibus_info) ?
+-                              paddr :
+-                              paddr | dma_attributes;
++              pci_addr = paddr;
++      pci_addr |= dma_attributes;
+       /* Handle Bus mode */
+       if (IS_PCIX(pcibus_info))