rpms/kernel/F-11 linux-2.6-dma-debug-fixes.patch, NONE, 1.1 kernel.spec, 1.1508, 1.1509

Dave Jones davej at fedoraproject.org
Fri Apr 3 16:38:24 UTC 2009


Author: davej

Update of /cvs/pkgs/rpms/kernel/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv11511

Modified Files:
	kernel.spec 
Added Files:
	linux-2.6-dma-debug-fixes.patch 
Log Message:
x86/dma: unify definition of pci_unmap_addr* and pci_unmap_len macros

linux-2.6-dma-debug-fixes.patch:

--- NEW FILE linux-2.6-dma-debug-fixes.patch ---
Date: 	Fri, 3 Apr 2009 15:50:14 +0200
From: Joerg Roedel <joerg.roedel at amd.com>
To: mingo at redhat.com
CC: linux-kernel at vger.kernel.org, shemminger at vyatta.com
Subject: [git pull] dma-debug fixes for 2.6.30-rc
Message-ID: <20090403135014.GG22472 at amd.com>

Hi Ingo,

The following changes since commit 8fe74cf053de7ad2124a894996f84fa890a81093:
  Linus Torvalds (1):
        Merge branch 'for-linus' of git://git.kernel.org/.../viro/vfs-2.6

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git dma-debug

Joerg Roedel (1):
      x86/dma: unify definition of pci_unmap_addr* and pci_unmap_len macros

 arch/x86/include/asm/pci.h    |   36 ++++++++++++++++++++++++++++++++----
 arch/x86/include/asm/pci_32.h |   34 ----------------------------------
 arch/x86/include/asm/pci_64.h |   22 ----------------------
 3 files changed, 32 insertions(+), 60 deletions(-)
 delete mode 100644 arch/x86/include/asm/pci_32.h

This unification fixes dma-debug false positives on i386 reporting that a dma
mapping was freed with another length than it was allocated. The full diff is
also attached. This patch is against linus/master since your HEAD of latest
tip/core/iommu branch is currently 2.6.29 final. Please pull.

diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
index a977de2..e403448 100644
--- a/arch/x86/include/asm/pci.h
+++ b/arch/x86/include/asm/pci.h
@@ -86,12 +86,40 @@ static inline void early_quirks(void) { }
 
 extern void pci_iommu_alloc(void);
 
-#endif  /* __KERNEL__ */
+#define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys)
+
+#if defined(CONFIG_X86_64) || defined(CONFIG_DMA_API_DEBUG)
+
+#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)       \
+	        dma_addr_t ADDR_NAME;
+#define DECLARE_PCI_UNMAP_LEN(LEN_NAME)         \
+	        __u32 LEN_NAME;
+#define pci_unmap_addr(PTR, ADDR_NAME)                  \
+	        ((PTR)->ADDR_NAME)
+#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL)         \
+	        (((PTR)->ADDR_NAME) = (VAL))
+#define pci_unmap_len(PTR, LEN_NAME)                    \
+	        ((PTR)->LEN_NAME)
+#define pci_unmap_len_set(PTR, LEN_NAME, VAL)           \
+	        (((PTR)->LEN_NAME) = (VAL))
 
-#ifdef CONFIG_X86_32
-# include "pci_32.h"
 #else
-# include "pci_64.h"
+
+#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)       dma_addr_t ADDR_NAME[0];
+#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) unsigned LEN_NAME[0];
+#define pci_unmap_addr(PTR, ADDR_NAME)  sizeof((PTR)->ADDR_NAME)
+#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \
+	        do { break; } while (pci_unmap_addr(PTR, ADDR_NAME))
+#define pci_unmap_len(PTR, LEN_NAME)            sizeof((PTR)->LEN_NAME)
+#define pci_unmap_len_set(PTR, LEN_NAME, VAL) \
+	        do { break; } while (pci_unmap_len(PTR, LEN_NAME))
+
+#endif
+
+#endif  /* __KERNEL__ */
+
+#ifdef CONFIG_X86_64
+#include "pci_64.h"
 #endif
 
 /* implement the pci_ DMA API in terms of the generic device dma_ one */
diff --git a/arch/x86/include/asm/pci_64.h b/arch/x86/include/asm/pci_64.h
index 4da2079..ae5e40f 100644
--- a/arch/x86/include/asm/pci_64.h
+++ b/arch/x86/include/asm/pci_64.h
@@ -24,28 +24,6 @@ extern int (*pci_config_write)(int seg, int bus, int dev, int fn,
 
 extern void dma32_reserve_bootmem(void);
 
-/* The PCI address space does equal the physical memory
- * address space.  The networking and block device layers use
- * this boolean for bounce buffer decisions
- *
- * On AMD64 it mostly equals, but we set it to zero if a hardware
- * IOMMU (gart) of sotware IOMMU (swiotlb) is available.
- */
-#define PCI_DMA_BUS_IS_PHYS (dma_ops->is_phys)
-
-#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)	\
-	dma_addr_t ADDR_NAME;
-#define DECLARE_PCI_UNMAP_LEN(LEN_NAME)		\
-	__u32 LEN_NAME;
-#define pci_unmap_addr(PTR, ADDR_NAME)			\
-	((PTR)->ADDR_NAME)
-#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL)		\
-	(((PTR)->ADDR_NAME) = (VAL))
-#define pci_unmap_len(PTR, LEN_NAME)			\
-	((PTR)->LEN_NAME)
-#define pci_unmap_len_set(PTR, LEN_NAME, VAL)		\
-	(((PTR)->LEN_NAME) = (VAL))
-
 #endif /* __KERNEL__ */
 
 #endif /* _ASM_X86_PCI_64_H */


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-11/kernel.spec,v
retrieving revision 1.1508
retrieving revision 1.1509
diff -u -r1.1508 -r1.1509
--- kernel.spec	3 Apr 2009 02:09:50 -0000	1.1508
+++ kernel.spec	3 Apr 2009 16:37:54 -0000	1.1509
@@ -654,6 +654,8 @@
 Patch684: linux-2.6-iwlagn-fix-hw-rfkill-while-the-interface-is-down.patch
 Patch685: linux-2.6-iwl3945-rely-on-priv-_lock-to-protect-priv-access.patch
 
+Patch700: linux-2.6-dma-debug-fixes.patch
+
 Patch1515: linux-2.6.29-lirc.patch
 
 # Fix the return code CD accesses when the CDROM drive door is closed
@@ -1251,6 +1253,9 @@
 # fix locking in ipw3945 conf_tx callback
 ApplyPatch linux-2.6-iwl3945-rely-on-priv-_lock-to-protect-priv-access.patch
 
+# Fix up DMA debug code
+ApplyPatch linux-2.6-dma-debug-fixes.patch
+
 # http://www.lirc.org/
 ApplyPatch linux-2.6.29-lirc.patch
 
@@ -1884,6 +1889,9 @@
 # and build.
 
 %changelog
+* Fri Apr 03 2009 Dave Jones <davej at redhat.com>
+- x86/dma: unify definition of pci_unmap_addr* and pci_unmap_len macros
+
 * Thu Apr 02 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.29.1-46
 - Enable debug builds and turn of debugging in the regular kernel.
 - Remove dma-debug patches.




More information about the fedora-extras-commits mailing list