svn commit: r213282 - in head/sys: amd64/amd64 i386/i386 ia64/ia64
powerpc/powerpc sparc64/sparc64
Neel Natu
neel at FreeBSD.org
Wed Sep 29 21:53:11 UTC 2010
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);
}
More information about the svn-src-all
mailing list