Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Aug 2012 00:39:30 GMT
From:      Bruce Evans <bde@FreeBSD.org>
To:        jhb@FreeBSD.org, rizzo@iet.unipi.it
Cc:        freebsd-hackers@FreeBSD.org, adrian@FreeBSD.org, mitya@cabletv.dp.ua, wojtek@wojtek.tensor.gdynia.pl, freebsd-net@FreeBSD.org
Subject:   Re: Replace bcopy() to update ether_addr
Message-ID:  <201208240039.q7O0dUbl029143@ref10-i386.freebsd.org>
In-Reply-To: <20120822215244.GC67796@onelab2.iet.unipi.it>

next in thread | previous in thread | raw e-mail | index | archive | help
>From owner-freebsd-net@FreeBSD.org Thu Aug 23 10:58:03 2012
Delivered-To: freebsd-net@freebsd.org
Date: Wed, 22 Aug 2012 23:52:44 +0200
From: Luigi Rizzo <rizzo@iet.unipi.it>
To: John Baldwin <jhb@FreeBSD.org>
References: <50324DB4.6080905@cabletv.dp.ua>
	<201208220802.14588.jhb@freebsd.org>
	<CAJ-Vmo=1cbJn3pkSvoCq7y-kEGig-h1Vxo6M5V0=b9=MkfuMRA@mail.gmail.com>
	<201208221521.06954.jhb@freebsd.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <201208221521.06954.jhb@freebsd.org>
User-Agent: Mutt/1.4.2.3i
Cc: freebsd-hackers@FreeBSD.org, Adrian Chadd <adrian@FreeBSD.org>,
        Mitya <mitya@cabletv.dp.ua>,
        Wojciech Puchar <wojtek@wojtek.tensor.gdynia.pl>,
        freebsd-net@FreeBSD.org
Subject: Re: Replace bcopy() to update ether_addr
X-BeenThere: freebsd-net@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Networking and TCP/IP with FreeBSD <freebsd-net.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/freebsd-net>,
	<mailto:freebsd-net-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-net>;
List-Post: <mailto:freebsd-net@freebsd.org>
List-Help: <mailto:freebsd-net-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/freebsd-net>,
	<mailto:freebsd-net-request@freebsd.org?subject=subscribe>
Sender: owner-freebsd-net@FreeBSD.org
Errors-To: owner-freebsd-net@FreeBSD.org
Content-Length: 2762
Lines: 64

On Wed, Aug 22, 2012 at 03:21:06PM -0400, John Baldwin wrote:
> On Wednesday, August 22, 2012 2:54:07 pm Adrian Chadd wrote:
> > On 22 August 2012 05:02, John Baldwin <jhb@freebsd.org> wrote:
> > > On Tuesday, August 21, 2012 12:34:42 pm Adrian Chadd wrote:
> > >> Hi,
> > >>
> > >> What about just creating an ETHER_ADDR_COPY(dst, src) and putting that
> > >> in a relevant include file, then hide the ugliness there?
> > >>
> > >> The same benefits will likely appear when copying wifi MAC addresses
> > >> to/from headers.
> > >>
> > >> Thanks, I'm glad someone noticed this.
> > >
> > > I doubt we even _need_ the ugliness.  We should just use *dst = *src
> > > unless there is a compelling reason not to.
> > 
> > Because it's not very clear? :-) I'd much prefer my array-of-things
> > copies to be explicit.
> 
> Eh?  'struct foo *src, *dst; *dst = *src' is pretty bog-standard C.  That 
> isn't really all that obtuse.

the thread has probably forked causing people to miss the explanation
that Bruce gave: quite often the function is called by casting
arbitrary pointers into 'struct foo *', so the compiler's expectations
about alignment do not necessarily match the user's lies.

Unfortunately we are building kernels with many compiler checks
disabled, so there is a fair chance that the compiler will not
detect such invalid casts.

Probably addresses are aligned to 2-byte boundaries, but certainly
not on a 4-byte, which means that a safe copy might require 3
instructions, even though a compiler could otherwise decide to align
all non-packed 'struct foo' to a 4- or 8-byte boundary and possibly
do the copy with 2 or even 1 instruction.

I would also suggest to try the code i posted in response to bruce
so you can check how good or bad are the various solutions on
different architectures or CPUs, and see if there is a reasonable
compromise.

cheers
luigi

> > Also, the optimisation and compiler silliness may not be THAT obvious
> > on intel (except when you're luigi and using netmap) but I can't help
> > but wonder whether the same does hold for MIPS/ARM. Getting it wrong
> > there will lead to some very very poor performing code.
> 
> Don't you think there's a really good chance the compiler knows how to copy a 
> structure appropriately for each architecture already?
> 
> -- 
> John Baldwin
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"




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