svn commit: r246713 - in head/sys: arm/arm cam cam/ctl cam/scsi conf dev/aac dev/advansys dev/aha dev/ahb dev/ahci dev/aic dev/aic7xxx dev/amr dev/arcmsr dev/ata dev/buslogic dev/ciss dev/dpt dev/f...

Konstantin Belousov kostikbel at gmail.com
Mon Apr 1 08:49:03 UTC 2013


On Sun, Mar 31, 2013 at 06:20:17PM -0600, Ian Lepore wrote:
> On Tue, 2013-02-12 at 16:57 +0000, Konstantin Belousov wrote:
> > Author: kib
> > Date: Tue Feb 12 16:57:20 2013
> > New Revision: 246713
> > URL: http://svnweb.freebsd.org/changeset/base/246713
> > 
> > Log:
> >   Reform the busdma API so that new types may be added without modifying
> >   every architecture's busdma_machdep.c.  It is done by unifying the
> >   bus_dmamap_load_buffer() routines so that they may be called from MI
> >   code.  The MD busdma is then given a chance to do any final processing
> >   in the complete() callback.
> >   
> >   The cam changes unify the bus_dmamap_load* handling in cam drivers.
> >   
> >   The arm and mips implementations are updated to track virtual
> >   addresses for sync().  Previously this was done in a type specific
> >   way.  Now it is done in a generic way by recording the list of
> >   virtuals in the map.
> >   
> >   Submitted by:	jeff (sponsored by EMC/Isilon)
> >   Reviewed by:	kan (previous version), scottl,
> >   	mjacob (isp(4), no objections for target mode changes)
> >   Discussed with:	     ian (arm changes)
> >   Tested by:	marius (sparc64), mips (jmallet), isci(4) on x86 (jharris),
> >   	amd64 (Fabian Keil <freebsd-listen at fabiankeil.de>)
> > 
> > Added:
> >   head/sys/kern/subr_bus_dma.c   (contents, props changed)
> >   [...]
> 
> I've just discovered that _bus_dmamap_load_vlist() gets a compile
> warning when building tinderbox on an i386 host, while building for PAE
> and XEN:
> 
> cc1: warnings being treated as errors
> /local/build/staging/freebsd/head/src/sys/kern/subr_bus_dma.c: In function '_bus_dmamap_load_vlist':
> /local/build/staging/freebsd/head/src/sys/kern/subr_bus_dma.c:69: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
> 
> My build machine is i386 PAE running 8.3 (needs to be that old for our
> build system at $work), so if this is a bogus error caused by building
> -current on such a downlevel system, I appologize in advance for the
> noise.

The warning is bogus in a sense that the code is correct. The bus_addr_t
on the PAE i386 is uint64_t, and since void * is 32bit, the warning
is emited. On the other hand, the promise of the caller of the
_bus_dmamap_load_vlist() is to have the virtual addresses stored in the
ds_addr, so the cast is not problematic.

The warning is useful only in the other direction, IMO, i.e. when casting
wide pointer to narrow integer type.

The warning is obviously specific to the version of the compiler you use.
It is not hard to fix it, could you, please, verify the patch below ?

diff --git a/sys/kern/subr_bus_dma.c b/sys/kern/subr_bus_dma.c
index 45fa9bb..4528601 100644
--- a/sys/kern/subr_bus_dma.c
+++ b/sys/kern/subr_bus_dma.c
@@ -66,8 +66,8 @@ _bus_dmamap_load_vlist(bus_dma_tag_t dmat, bus_dmamap_t map,
 	error = 0;
 	for (; sglist_cnt > 0; sglist_cnt--, list++) {
 		error = _bus_dmamap_load_buffer(dmat, map,
-		    (void *)list->ds_addr, list->ds_len, pmap, flags, NULL,
-		    nsegs);
+		    (void *)(uintptr_t)list->ds_addr, list->ds_len, pmap,
+		    flags, NULL, nsegs);
 		if (error)
 			break;
 	}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/svn-src-head/attachments/20130401/e01de1bd/attachment.sig>


More information about the svn-src-head mailing list