Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 5 Nov 2011 19:58:05 +0000 (UTC)
From:      Olivier Houchard <cognet@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r227119 - projects/armv6/sys/arm/arm
Message-ID:  <201111051958.pA5Jw577082327@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cognet
Date: Sat Nov  5 19:58:05 2011
New Revision: 227119
URL: http://svn.freebsd.org/changeset/base/227119

Log:
  When handling bounce pages, on POSTREAD, invalidate cache for all bounce
  pages, not just the first one.
  Also, make sure the address and the size are dataline cache size aligned,
  it should be ok to invalidate before and after the buffer, as long as it
  stays in the bounce page, as those bits aren't supposed to be used anyway.

Modified:
  projects/armv6/sys/arm/arm/busdma_machdep-v6.c

Modified: projects/armv6/sys/arm/arm/busdma_machdep-v6.c
==============================================================================
--- projects/armv6/sys/arm/arm/busdma_machdep-v6.c	Sat Nov  5 19:25:21 2011	(r227118)
+++ projects/armv6/sys/arm/arm/busdma_machdep-v6.c	Sat Nov  5 19:58:05 2011	(r227119)
@@ -1157,6 +1157,22 @@ _bus_dmamap_sync(bus_dma_tag_t dmat, bus
 			    (vm_offset_t)bpage->busaddr,
 			    bpage->datacount);
 			while (bpage != NULL) {
+				vm_offset_t startv;
+				vm_paddr_t startp;
+				int len;
+
+				startv = bpage->vaddr &~ arm_dcache_align_mask;
+				startp = bpage->busaddr &~ arm_dcache_align_mask;
+				len = bpage->datacount;
+				
+				if (startv != bpage->vaddr)
+					len += bpage->vaddr & arm_dcache_align_mask;
+				if (len & arm_dcache_align_mask) 
+					len = (len -
+					    (len & arm_dcache_align_mask)) +
+					    arm_dcache_align;
+				cpu_dcache_inv_range(startv, len);
+				l2cache_inv_range(startv, startp, len);
 				bcopy((void *)bpage->vaddr,
 				      (void *)bpage->datavaddr,
 				      bpage->datacount);



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