--- /dev/null
+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))