Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Sep 2010 21:53:11 +0000 (UTC)
From:      Neel Natu <neel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r213282 - in head/sys: amd64/amd64 i386/i386 ia64/ia64 powerpc/powerpc sparc64/sparc64
Message-ID:  <201009292153.o8TLrBn9023042@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: neel
Date: Wed Sep 29 21:53:11 2010
New Revision: 213282
URL: http://svn.freebsd.org/changeset/base/213282

Log:
  Fix bogus error message from bus_dmamem_alloc() about incorrect alignment.
  
  The check for alignment should be made against the physical address and not
  the virtual address that maps it.
  
  Sponsored by:	NetApp
  Submitted by:	Will McGovern (will at netapp dot com)
  Reviewed by:	mjacob, jhb

Modified:
  head/sys/amd64/amd64/busdma_machdep.c
  head/sys/i386/i386/busdma_machdep.c
  head/sys/ia64/ia64/busdma_machdep.c
  head/sys/powerpc/powerpc/busdma_machdep.c
  head/sys/sparc64/sparc64/bus_machdep.c

Modified: head/sys/amd64/amd64/busdma_machdep.c
==============================================================================
--- head/sys/amd64/amd64/busdma_machdep.c	Wed Sep 29 21:20:29 2010	(r213281)
+++ head/sys/amd64/amd64/busdma_machdep.c	Wed Sep 29 21:53:11 2010	(r213282)
@@ -526,7 +526,7 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi
 		CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
 		    __func__, dmat, dmat->flags, ENOMEM);
 		return (ENOMEM);
-	} else if ((uintptr_t)*vaddr & (dmat->alignment - 1)) {
+	} else if (vtophys(*vaddr) & (dmat->alignment - 1)) {
 		printf("bus_dmamem_alloc failed to align memory properly.\n");
 	}
 	if (flags & BUS_DMA_NOCACHE)

Modified: head/sys/i386/i386/busdma_machdep.c
==============================================================================
--- head/sys/i386/i386/busdma_machdep.c	Wed Sep 29 21:20:29 2010	(r213281)
+++ head/sys/i386/i386/busdma_machdep.c	Wed Sep 29 21:53:11 2010	(r213282)
@@ -540,7 +540,7 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi
 		CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
 		    __func__, dmat, dmat->flags, ENOMEM);
 		return (ENOMEM);
-	} else if ((uintptr_t)*vaddr & (dmat->alignment - 1)) {
+	} else if (vtophys(*vaddr) & (dmat->alignment - 1)) {
 		printf("bus_dmamem_alloc failed to align memory properly.\n");
 	}
 	if (flags & BUS_DMA_NOCACHE)

Modified: head/sys/ia64/ia64/busdma_machdep.c
==============================================================================
--- head/sys/ia64/ia64/busdma_machdep.c	Wed Sep 29 21:20:29 2010	(r213281)
+++ head/sys/ia64/ia64/busdma_machdep.c	Wed Sep 29 21:53:11 2010	(r213282)
@@ -455,7 +455,7 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi
 	}
 	if (*vaddr == NULL)
 		return (ENOMEM);
-	else if ((uintptr_t)*vaddr & (dmat->alignment - 1))
+	else if (vtophys(*vaddr) & (dmat->alignment - 1))
 		printf("bus_dmamem_alloc failed to align memory properly.\n");
 	return (0);
 }

Modified: head/sys/powerpc/powerpc/busdma_machdep.c
==============================================================================
--- head/sys/powerpc/powerpc/busdma_machdep.c	Wed Sep 29 21:20:29 2010	(r213281)
+++ head/sys/powerpc/powerpc/busdma_machdep.c	Wed Sep 29 21:53:11 2010	(r213282)
@@ -529,7 +529,7 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi
 		CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
 		    __func__, dmat, dmat->flags, ENOMEM);
 		return (ENOMEM);
-	} else if ((uintptr_t)*vaddr & (dmat->alignment - 1)) {
+	} else if (vtophys(*vaddr) & (dmat->alignment - 1)) {
 		printf("bus_dmamem_alloc failed to align memory properly.\n");
 	}
 #ifdef NOTYET

Modified: head/sys/sparc64/sparc64/bus_machdep.c
==============================================================================
--- head/sys/sparc64/sparc64/bus_machdep.c	Wed Sep 29 21:20:29 2010	(r213281)
+++ head/sys/sparc64/sparc64/bus_machdep.c	Wed Sep 29 21:53:11 2010	(r213282)
@@ -652,7 +652,7 @@ nexus_dmamem_alloc(bus_dma_tag_t dmat, v
 	}
 	if (*vaddr == NULL)
 		return (ENOMEM);
-	if ((uintptr_t)*vaddr % dmat->dt_alignment)
+	if (vtophys(*vaddr) % dmat->dt_alignment)
 		printf("%s: failed to align memory properly.\n", __func__);
 	return (0);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201009292153.o8TLrBn9023042>